19 января 2012 в 22:59

Проброс блочных устройств в виртуальную машину XenServer

В современном мире наверно все адекватные системные администраторы корпоративных сетей используют виртуализацию. Для мелкого и среднего бизнеса одним из самых осмысленных выборов гипервизора является бесплатная версия Citrix XenServer. Основное его преимущество для небольшой фирмы, не имеющей возможности покупать железо под задачи — это огромная гибкость, во многом за счёт Linux, на котором базируется обозначенный гипервизор.

Огромнейшая проблема XenServer, как и Xen Cloud Platform, в очень ограниченном количестве документации. Точнее сказать — в полном её отсутствии для нестандартных ситуаций. В частности нигде в официальных источниках мне не удалось найти инструкции по пробросу блочного устройства непосредственно в виртуальную машину.

Для начала зачем это может понадобиться. Простейший пример — у вас есть сервер без надёжного аппаратного RAID контроллера. Но вы хотите рейд. Без проблем — Linux (и XenServer) содержит великолепнейшую штуку — mdadm. А нужен вам этот RAID для файлопомойки, причём файлопомойка займёт всё доступное место. Смысла городить RAID, а поверх него ещё делать XenServer StorageRepository (SR) с type=lvm, в котором создавать один-единственный диск на весь объём нет. Гораздо лучше создать RAID, и пробросить его блочное устройство непосредственно в виртуальную машину. Так и надёжней — в случае чего вы всегда сможете достать жёсткие диски из сервера и воткнуть их в любую Linux машину, которая тут же увидит все ваши данные.

В общем, перейдём к практике. XenServer поддерживает такой тип SR как udev. Основное его предназначение — поддержка внешних USB носителей и проброс их в виртуалки. Работает SR такого типа крайне просто: в качестве VDI (Virtual Device Image) выступают все блочные устройства, найденные в некоторой папке. При этом VDI создаются автоматически при сканировании SR, вам остаётся только добавить их к нужным виртуальным машинам.

Поскольку нет никакой разницы, какого типа блочное устройство в Linux использовать, и флешка ничем не отличается от mdadm массива и LVM тома, то можно вручную создать SR с типом udev и вручную в него добавить симлинк на нужное нам блочное устройство. Например, на массив md0.

Для начала создаём каталог, в котором будут симлинки на нужные нам блочные устройства:

mkdir /srv/block-devices

Теперь делаем его SR типа udev с content-type=disk:

xe sr-create name-label="Block devices" name-description="Блочные устройства, которые хотим пробросить с гипервизора в виртуалки" type=udev content-type=disk device-config:location=/srv/block-devices

Добавляем нужное нам устройство:

ln -s /dev/md0 /srv/block-devices/md0

Затем пересканируем SR, дабы автоматически создались нужные VDI:

xe sr-scan uuid=<uuid_нашего_SR>

Должен появится новый VDI с name-label «Unrecognised bus type» на нашем SR. Убедиться в этом можно командой

xe vdi-list sr-uuid=<uuid_нашего_SR>

Ок, всё что осталось сделать — поменять имя и описание этого VDI и присоединить его к нужной машинке. Сделать это можно уже и через XenCenter. Кстати не бойтесь, созданные таким образом SR и VDI никуда не пропадут после перезагрузки и не поменяют своих параметров.

Вот и всё. Немного странно, что о таком примитивном способе нет ни слова в официальной документации.
Вадим Неворотин @Malamut
карма
128,0
рейтинг 0,0
Похожие публикации
Самое читаемое Администрирование

Комментарии (7)

  • 0
    Здорово! Как раз недавно городил SR и единственный VDI.
    Т.е вначале RAID, затем SR c LVM и VDI c ext3. Надо потестить ваш вариант.
    По идее оберток меньше и стабильность должна быть выше.
  • 0
    Отлично! Спасибо за дельную информацию по XenServer.
  • 0
    Это ведь идет в разрез с идеологией XenServera. То бишь при fault-tolerance при миграции вашей виртуалки она не смигрирует, так как блочное устройство осталось на «старом» сервере. По этой же причине внутрь гостя нельзя пробрасывать аппаратные ключи и прочие USB-девайсы.
    • 0
      Когда у вас есть куда мигрировать, т.е. нечто типо SAS дисковой полки и пула, то вряд ли вам потребуется пробрасывать mdadm рейд в виртуалку :) А аппаратные ключи пробрасывать приходится в любом случае, ибо многим !"№;%: из тех, кто их производит, невдомёк, что никто физические сервера уже сто лет как не использует.
      • 0
        С ключами можно решить вопрос с помощью различных usb-to-ethernet
  • 0
    Давно хочу завести виртуализацию на домашнем сервере, как раз думал о Citrix XEN, останавливает следующее: имею аппаратный RAID массив, на контроллере 3Ware, массив содержит один раздел, отформатированный в XFS, данных несколько ТБ, понятное дело, что забекапить такой объем проблематично.

    Правильно ли я понимаю, что смогу пробросить имеющийся диск в гостевую систему и там его подмонтировать, не потеряв естественно данных?
    Не пострадают ли данные в процессе установки Citrix XEN?
    • 0
      Use KVM luke. А про Citrix забудь, оно в некоторой степени проприетарное.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.