Как подключить USB-накопитель непосредственно к виртуальной машине libvirt KVM?

9

Я ищу информацию о сопоставлении существующего диска (USB-накопителя) с виртуальной машиной KVM с помощью libvirt. Я перебираю http://libvirt.org/formatstorage.html#StoragePoolTarget . Но я не совсем понимаю, какие варианты необходимы, чтобы выставить существующее устройство на виртуальную машину (или, если это вообще возможно).

Из того, что я читаю, targetэлемент ожидает pathэлемент в папке на машине, чтобы сохранить изображение на основе файла. Может ли pathбыть такое устройство, как /dev/sdc1? с typeо raw?

Энди Шинн
источник

Ответы:

9

Проверьте «USB сквозной | Использование раздела Libvirt 'на этой странице из вики Edubuntu. Больше информации здесь и здесь .

Если вы не планируете горячее подключение / отключение USB-накопителя во время работы гостевой системы, вы также можете попробовать добавить раздел, например

<disk type='block' device='disk'>
  <driver name='qemu' type='raw'/>
  <source dev='/dev/sdb'/>
  <target dev='sdb' bus='scsi'/>
</disk>

в файл определения xml вашей виртуальной машины. Просто измените исходный dev, чтобы он соответствовал тому, что было назначено вашему usb, когда он был подключен. Однако вы не можете гарантировать, что назначение dev usb переживет перезагрузку, если другие устройства будут добавлены или удалены, поэтому я рекомендую подход в Первая ссылка выше вместо.

В случае, если ссылка исчезнет, ​​вот соответствующий раздел USB-соединения в связанных документах:

Использование Libvirt

загорелся уже существующий В.М.

virsh start maverick2

подключил USB-накопитель
нашел USB-адрес с помощью lsusb, который дал мне
{{ Bus 002 Device 006: ID 1058:1023 Western Digital Technologies, Inc. }}}

определил XML-файл с информацией об устройстве:

<hostdev mode='subsystem' type='usb'> <source> <vendor id='0x1058'/> <product id='0x1023'/> </source> </hostdev>
передал USB-накопитель в ВМ

sudo virsh attach-device maverick2 /tmp/a.xml

ОДНАКО это не работает с включенным apparmor. Вы должны либо отключить apparmor, либо добавить

/dev/bus/usb/*/[0-9]* rw,

либо /etc/apparmor.d/libvirt-qemu(что дает всем гостям полный доступ к физическим хост-устройствам), либо

/etc/apparmor.d/libvirt/libvirt-<uuid>

который даст только один гость, который имеет доступ. (Спасибо jdstrand за помощь в этом.)

nedm
источник
1
Спасибо, эта страница была очень полезной. Я получил это работает. Но вместо продавца и продукта я использовал addressэлемент. При использовании поставщика и продукта я не мог подключить 2 одинаковых USB-накопителя. Это пройдет только через первый.
Энди Шинн