Pull to refresh

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

Virtualization *
В современном мире наверно все адекватные системные администраторы корпоративных сетей используют виртуализацию. Для мелкого и среднего бизнеса одним из самых осмысленных выборов гипервизора является бесплатная версия 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 никуда не пропадут после перезагрузки и не поменяют своих параметров.

Вот и всё. Немного странно, что о таком примитивном способе нет ни слова в официальной документации.
Tags: XenServercitrix xenserverxen cloud platform
Hubs: Virtualization
Total votes 17: ↑13 and ↓4 +9
Comments 7
Comments Comments 7

Popular right now