Wie man eine virtuelle Disk zur Laufzeit hinzufügt

Hotplugging bei KVM

| Autor: Thomas Drilling

KVM (libvirt kommt unter anderem aujch mit NFS-Storage zurecht.
KVM (libvirt kommt unter anderem aujch mit NFS-Storage zurecht. (www.linux-kvm.org)

Auch unter KVM/libvirt lassen sich einer virtuellen Maschine zur Laufzeit neue Festplatten hinzufügen. Und das geht so.

Ein netter Nebeneffekt von Virtualisierung besteht darin, dass sich einer virtuellen Maschine neue Hardware unterschieben lässt, ohne diese dazu herunterfahren zu müssen. Das klappt nicht nur bei vSphere oder Hyper-V, sondern auch unter Libvirt/Qemu/KVM in einer Linux-basierten Virtualisierungsumgebung.

Folgende Kommandos ergänzen eine vorhandene VM mit einer neuen virtuellen Festplatte.

Zuerst muss das neue virtuelle Disk-Image wie gewohnt mit qemu-img angelegt werden:

qemu-img create harddisk-2.img 100G

Das Anhängen des Images an eine VM im laufenden Betrieb erfolgt dann z. B. mit Hilfe des virsh-Befehls. Mit der attach-disk-Option funktioniert dies direkt, ohne vorheriges Bereitstellen einer XML-Beschreibungsdatei:

virsh attach-disk Guest1 /var/lib/libvirt/images/harddisk-2.img vdb

Der Parameter vdb ist der „gewünschte“ Gerätename „in“ der virtuellem Maschine. Dieser darf natürlich noch nicht vergeben sein. Welche bereits vergeben sind, lässt sich mit folgendem Kommando vom Host aus feststellen:

virsh dumpxml Guest1 | grep target

Komfortabler per Libvirt-XML-Beschreibung

Soweit zum „Schnellverfahren“. Neben attach-disk kennt virsh aber auch den Parameter attach-device, dem man eine vollständige Definition der neuen „Hardware“ (hier einer virtuellen Disk) in Form einer XML-Datei im Libvirt-Format übergibt. Hier ein Beispiel:

<<disk type='file' device='disk'>
   <driver name='qemu' type='raw'/>
   <source file='/var/lib/libvirt/images/harddisk-2.img'/>
   <target dev='vdb' bus='virtio'/>
</disk>

Der Weg über die XML-Datei ist immer dann übersichtlicher, wenn mehrere, von den Defaults abweichende, Parameter die neue virtuelle Disk beschreiben, wie hier z. B. der Typ des virtuellen Bus, an dem die Disk angeschlossen werden soll. "Virtio" z. B. nutzt den performanteren paravirtualisierten Treiber.

Die virsh-Kommandos kennen im Bereich der Device-Befehle noch weitere Schalter. Einzelheiten finden sich in der man-Page im Abschnitt „Device Commands“. So macht etwa der Schalter --persistent die Änderungen nach dem nächsten Reboot der Libvirt-Domain persistent.

Ergänzende Informationen finden sich in der Dokumentation von Red Hat Enterprise Linux (RHEL).