Mapeando a unidade USB diretamente para a máquina virtual libvirt KVM?

9

Estou procurando informações sobre o mapeamento de uma unidade existente (unidade USB) para uma máquina virtual KVM usando libvirt. Eu estive revisando http://libvirt.org/formatstorage.html#StoragePoolTarget . Mas não entendo bem quais opções são necessárias para expor um dispositivo existente à VM (ou se for possível).

Pelo que estou lendo, o targetelemento está esperando um pathelemento em uma pasta na máquina para armazenar uma imagem baseada em arquivo. Pode pathser um dispositivo como /dev/sdc1? com um typede raw?

Andy Shinn
fonte

Respostas:

9

Confira o 'passthrough USB | Usando Libvirt ' nesta página do wiki do Edubuntu. Mais informações aqui e aqui .

Se você nunca planeja conectar / desconectar a unidade USB enquanto o convidado estiver em execução, tente adicionar uma seção como

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

para o arquivo de definição xml da sua VM. Apenas altere o dev de origem para corresponder ao que foi atribuído ao seu usb quando ele foi conectado. No entanto, você não pode garantir que a atribuição do dev do usb sobreviverá à reinicialização se outros dispositivos forem adicionados ou removidos, por isso recomendo a abordagem no primeiro link acima.

Caso o link desapareça, aqui está a seção relevante de passagem USB dos documentos vinculados:

Usando Libvirt

acionou uma vm pré-existente

virsh start maverick2

conectado a uma unidade USB
encontrou o endereço usb usando lsusb, o que me deu
{{ Bus 002 Device 006: ID 1058:1023 Western Digital Technologies, Inc. }}}

definiu um arquivo xml com as informações do dispositivo:

<hostdev mode='subsystem' type='usb'> <source> <vendor id='0x1058'/> <product id='0x1023'/> </source> </hostdev>
passou o drive usb para o vm

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

No entanto, isso não funciona com o apparmor ativado. Você deve desativar o apparmor ou adicionar

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

para tanto /etc/apparmor.d/libvirt-qemu(que dá todos os hóspedes acesso completo aos dispositivos host físicos) ou para

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

que dará apenas o convidado que acessar. (Agradecemos a jdstrand por ajudar a esclarecer isso.)

nedm
fonte
1
Obrigado, essa página foi muito útil. Eu consegui funcionar. Mas, em vez de fornecedor e produto, usei o addresselemento Ao usar o fornecedor e o produto, não consegui montar 2 unidades USB iguais. Só passaria pelo primeiro.
Andy Shinn