Samstag, 23. Dezember 2023

libvirt - Hardware direkt zum Gast verbinden

Ein großer Vorteil der Linux QEMU/KVM gegenüber Windows Hyper-V ist meiner Meinung nach die Möglichkeit physische Hardware mit dem Gast System zu verbinden. Ich will kurz die Möglichkeiten aufzeigen einen USB Speicherstick einzubinden.

Über den virt-manager geht das ganze recht intuitiv per GUI: Maschinenkonfiguration öffnen, Gerät hinzufügen, links USB Host-Gerät auswählen und rechts das konkrete USB Device auswählen, fertig.

In der Kommandozeile schaut man sich zunächst mit dem Befehl lsusb die Situation an und hat die Zeile mit dem betreffenden Gerät im Blick.

Beispiel:

lsusb
Bus 002 Device 010: ID 0781:5588 SanDisk Corp. Extreme Prob

Die Anbindung mit virsh erfolgt in dem Fall mit einer XML Datei, mit diesem Inhalt. 

<hostdev mode="subsystem" type="usb" managed="yes">
  <source>
        <vendor id="0x0781"/>
        <product id="0x5588"/>
  </source>
</hostdev>

Wie man sieht, muss man die Zahlen hinter ID entsprechend übernehmen. Man könnte auch mit Bus und Device arbeiten, dies hat den Nachteil, dass der Stick dann immer am gleichen Anschluss stecken müsste.

Per Befehl kann man jetzt den Stick mit dem Gast verbinden. Der Schalter --current schreibt entweder in die Konfiguration und man kann anschließend die VM starten, oder im laufenden System wird das Gerät direkt verbunden (und nicht gespeichert).  Siehe: virsh attach-device --help

virsh attach-device vmID usbstick.xml --current

Will man von dem angeschlossenen Speicher booten kommt man mit ESC ins Bootmenu. 

Später den Stick wieder "abziehen". 

virsh detach-device vmID usbstick.xml --current

Mit dieser Methode lässt sich offenbar jedes USB Gerät so wie es ist zum Gast verbinden, das ist nicht auf Speichersticks beschränkt.

Handelt es sich um eine USB HDD kann man diese auch per Laufwerkspfad (/dev/sdx) anbinden:

Zunächst wird der Devicename ermittelt

lsblk

Und dann ohne Umwege eingebunden.

virsh attach-disk win11 /dev/sdf vdf --config

Ich finde diese Methode für eine USB HDD nicht sinnvoll, zumindest ist es mir auch nicht gelungen davon zu starten. 

Sehr umfangreich kann man auch mit Storage pools arbeiten, siehe im libvirt Handbuch:

Libvirt Storage Pool  https://libvirt.org/storage.html

ToDo? 

Code

 

Keine Kommentare:

Kommentar veröffentlichen