Libvirt QEMU/KVM VM migration/upgrading

Wenn man VMs (und deren Definitionsdatei) von einem älteren KVM System umzieht oder den Hypervisor upgraded sollte man nicht vergessen im XML-file den Maschinentyp zu checken. Ansonsten kann es nach Live-Migrationen zu unerwarteten Effekten kommen. Bei mir hing z.B. bei einigen Systemen die Real-Time-Clock – was oft einen Totalabsturz zur folge hat. Der Bug ist hier beschrieben.

Für eine aktuelle QEMU-KVM Version sieht dies so aus (entscheidend ist das „pc-1.0“):

<!-- /etc/libvirt/qemu/vm-01.xml -->
<type arch='x86_64' machine='pc-1.0'>hvm</type>

Damit man nicht händisch sämtliche XML Dateien anpassen muss, liefert Libvirt ein praktisches, aber wohl eher unbekanntes Script mit:

libvirt-migrate-qemu-machinetype -a

Damit werden direkt alle VMs auf die jeweils aktuelle Einstellung angepasst. Sehr schön. Damit die Einstellung greift muss man die VMs allerdings neu starten (soweit ich weiß).

dd over ssh

Libvirt unterstützt leider noch nicht das Migrieren von VM-Images auf andere Speicherformen – z.B. von NAS auf eine lokale Partition. Dieses muss man dann halt selber machen ;).

Folgendes Kommando holt sich vom entfernten Rechner den Inhalt des dort gemounteten iSCSI Targets und packt ihn in ein lokales Volume (in diesem Fall LVM):

ssh root@cloudnode \
"dd if=/dev/disk/by-path/ip-10.10.199.4:3260-iscsi-cloud1-11-lun-0" \
| buffer -S 10m -s 64k | dd of=/dev/vmdata/vm02

Das Tool „buffer“ hat noch den Nebeneffekt, dass es Statistiken zum laufenden Transport ausgibt. Ein ähnliches Tool in dem Zusammenhang ist Pipe-Viewer (pv), welches ich auch immer schon mal erwähnen wollte.

libvirt: Interface hinzufügen

Einfacher und eleganter als das XML zu editieren und dann zu reloaden ist direkt das Interface (in diesem Fall ein Bridge-Device) über libvirt hinzuzufügen:

virsh attach-interface domain-1-22 bridge br0

libvirt: XML neu einlesen

Damit liest libvirt die entsprechende Beschreibungsdatei (ohne Neustart von libvirtd) erneut ein:

virsh define /etc/libvirt/qemu/domain-1-22.xml