![](https://habrastorage.org/storage2/d2f/8e9/1f3/d2f8e91f3303c2a0d941cce8897fc3dc.png)
Огромнейшая проблема 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 никуда не пропадут после перезагрузки и не поменяют своих параметров.
Вот и всё. Немного странно, что о таком примитивном способе нет ни слова в официальной документации.