Odwzorowanie napędu USB bezpośrednio na maszynę wirtualną libvirt KVM?

9

Szukam informacji o mapowaniu istniejącego dysku (dysku USB) na maszynę wirtualną KVM za pomocą libvirt. Przeglądałem http://libvirt.org/formatstorage.html#StoragePoolTarget . Ale nie do końca rozumiem, jakie opcje są potrzebne, aby udostępnić istniejące urządzenie maszynie wirtualnej (a nawet jeśli jest to możliwe).

Z tego, co czytam, targetelement oczekuje, że pathelement w folderze na komputerze będzie przechowywać obraz oparty na plikach. Czy może to pathbyć takie urządzenie jak /dev/sdc1? z typeod raw?

Andy Shinn
źródło

Odpowiedzi:

9

Sprawdź „USB passsthrough | Korzystanie z sekcji Libvirt tej strony z wiki Edubuntu. Więcej informacji tutaj i tutaj .

Jeśli nigdy nie planujesz podłączać / odłączać dysku USB podczas pracy gościa, możesz również spróbować dodać sekcję

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

do pliku definicji xml maszyny wirtualnej. Po prostu zmień źródłowy program dev, aby pasował do tego, który został przypisany do twojego usb, gdy był podłączony. Jednak nie możesz zagwarantować, że przypisanie usb przetrwa restart, jeśli inne urządzenia zostaną dodane lub usunięte, więc polecam podejście w zamiast tego pierwszy link powyżej.

W przypadku, gdy link zniknie, oto odpowiednia sekcja przejściówki USB połączonych dokumentów:

Korzystanie z Libvirt

wystrzelił wcześniej istniejącą maszynę wirtualną

virsh start maverick2

podłączony do napędu USB
znalazł adres USB przy użyciu lsusb, co mi dało
{{ Bus 002 Device 006: ID 1058:1023 Western Digital Technologies, Inc. }}}

zdefiniował plik xml z informacjami o urządzeniu:

<hostdev mode='subsystem' type='usb'> <source> <vendor id='0x1058'/> <product id='0x1023'/> </source> </hostdev>
przekazał dysk USB do VM

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

JEDNAK to nie działa z włączonym Apparmor. Musisz albo wyłączyć zbroję, albo dodać

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

do /etc/apparmor.d/libvirt-qemu(który daje wszystkim gościom pełny dostęp do fizycznych urządzeń hosta) lub do

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

co da tylko jednemu gościowi dostęp. (Podziękowania dla jdstrand za pomoc w zrozumieniu tego.)

nedm
źródło
1
Dzięki, ta strona była bardzo pomocna. Sprawiłem, że działało. Ale zamiast sprzedawcy i produktu użyłem tego addresselementu. Podczas korzystania z dostawcy i produktu nie mogłem zamontować 2 takich samych napędów USB. Przejdzie tylko przez pierwszy.
Andy Shinn