Mapeo de la unidad USB directamente a la máquina virtual KVM libvirt?

9

Estoy buscando información sobre la asignación de una unidad existente (unidad USB) a una máquina virtual KVM usando libvirt. He estado revisando http://libvirt.org/formatstorage.html#StoragePoolTarget . Pero no entiendo qué opciones son necesarias para exponer un dispositivo existente a la VM (o si es posible).

Por lo que estoy leyendo, el targetelemento espera un pathelemento en una carpeta en la máquina para almacenar una imagen basada en un archivo. ¿Puede pathser un dispositivo como /dev/sdc1? con un typede raw?

Andy Shinn
fuente

Respuestas:

9

Echa un vistazo a la 'transferencia USB' | Usando la sección Libvirt 'de esta página del wiki de Edubuntu. Más información aquí y aquí .

Si nunca planea conectar / desconectar en caliente la unidad usb mientras el invitado se está ejecutando, también puede intentar agregar una sección como

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

al archivo de definición xml de su VM. Simplemente cambie el desarrollador de origen para que coincida con lo que se asignó a su usb cuando se conectó. Sin embargo, no puede garantizar que la asignación de desarrollo del usb sobrevivirá al reinicio si se agregan o eliminan otros dispositivos, por lo que recomiendo el enfoque en el primer enlace de arriba en su lugar.

En caso de que el enlace desaparezca, aquí está la sección relevante de transferencia de USB de los documentos vinculados:

Usando Libvirt

disparó un vm preexistente

virsh start maverick2

enchufado a una unidad usb
encontró la dirección usb usando lsusb, lo que me dio
{{ Bus 002 Device 006: ID 1058:1023 Western Digital Technologies, Inc. }}}

definió un archivo xml con la información del dispositivo:

<hostdev mode='subsystem' type='usb'> <source> <vendor id='0x1058'/> <product id='0x1023'/> </source> </hostdev>
pasó la unidad usb a la vm

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

SIN EMBARGO, esto no funciona con apparmor habilitado. Debe deshabilitar apparmor o agregar

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

a cualquiera de los dos /etc/apparmor.d/libvirt-qemu(que le da a todos los invitados acceso completo a los dispositivos físicos del host) o

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

que le dará acceso al único invitado. (Gracias a jdstrand por su ayuda para aclarar eso).

nedm
fuente
1
Gracias, esa página fue muy útil. Lo hice funcionar. Pero en lugar de un proveedor y un producto, utilicé el addresselemento. Al usar el proveedor y el producto, no pude montar 2 unidades USB que fueran iguales. Solo pasaría por el primero.
Andy Shinn el