Migration von “Xen-Classic” mittels xva.py (Paravirtualisiert oder QEMU)
Hintergrund: Häufig kommt es vor, dass virtualisierte Maschinen aus der XEN-Welt in den proprietären Zweig von Citrix XenServer übernommen werden sollen. Hierfür ist das Python-Skript “xva.py” hervorragend geeignet. Mehr Infos und den Link zum Download gibt es hier: http://www.xen.org/files/xva/
Mit Hilfe des Python-Skripts “xva.py” lassen sich sowohl paravirtualisierte (Linux-)Maschinen als auch hardwarevirtualisierte (QEMU-)Maschinen vom “alten” Xen auf Citrix XenServer portieren. Die Vorgehensweise ist hierbei für beide Varianten identisch. Für nachfolgende Anleitung gehen wir davon aus, dass auf der Quell- und der Zielmaschine das Verzeichnis “/mnt/tmp/” identisch ist (NFS-Share), sowie genügend Platz bietet und dass das Script xva.py ausführbar in /root/ liegt.
1. Download und Vorbereitungen auf dem Quell-System:
cd /root wget http://www.xen.org/files/xva/xva.py chmod +x xva.py
2. Vorbereitung in der “alten” VM:
Vor dem Umzug ist es ratsam, nicht mehr benötigten Dateien zu entfernen, um das Export-File nicht unnötig groß werden zu lassen.
PV-Linux (Paravirtualisierung): Unter paravirtualisierten Maschinen sollte möglichst vor dem Umzug die Standardkonsole von TTY1 auf HVC0 umgestellt werden, dafür in der Datei /etc/inittab folgende Anpassungen vornehmen:
1:2345:respawn:/sbin/getty 38400 tty1
ändern in:
1:2345:respawn:/sbin/getty 38400 hvc0
Dies kann ich im Nachinein geschehen, doch bevor diese Zeile nicht angepasst wurde, funktioniert die “Console” im XenCenter nicht!
3. HVM / QEMU Windows / Linux:
Unter QEMU Windows VMs sind unnötige Treiber zu entfernen, sowie mögliche VM-Tools zu deinstallieren.
4. Start der Portierung:
Auf der Quellmaschine wird zuerst die alte Maschine heruntergefahren, dann mittels xva.py in eine .xva-Datei exportiert:
cd /root/ ./xva.py --config=/etc/xen/auto/maschine.conf --filename=/mnt/tmp/maschine.xva
5. Import der VM auf Citrix-Xen
xe vm-import filename=/mnt/maschine.xva
Unter Umständen muss die SR-UUID des Local-Storage mit angegeben werden (Software-RAID-Maschinen), dies funktioniert wie folgt:
xe vm-import filename=/mnt/maschine.xva sr-uuid=<>
“sr-uuid”: Kann auf dem Ziel-System angezeigt werden mit: xe sr-list
z.B.:
uuid ( RO) : f9bd32ec-b63f-5be1-1f9c-274aefd4a7b8 name-label ( RW): Local storage
Hinweis: Der Importvorgang kann mittels folgendem Befehl live geprüft werden: watch xe task-list
6. Nachbereitung:
Nachdem die Maschine dann fertig importiert ist, kann diese im XenCenter bearbeitet werden (Name, Netzwerk etc.). Es ist ratsam, direkt einen Snapshot zu erstellen.
PV-Linux (Paravirtualisiert): Hinweis: Zum Anzeigen der ID folg. Befehl anwenden:
xe vm-list
Für ursprüngliche PV-Maschinen muss noch gemäß den Anweisungen der Kernel bzw. die Initrd bereitgestellt werden, z.B.:
Auf dem Quellhost:
scp /boot/initrd.img-2.6.26-2-xen-amd64 root@:/boot/guest/<<***>>/initrd
und:
scp /boot/vmlinuz-2.6.26-2-xen-amd64 root@<>:/boot/guest/<<***>>/vmlinuz
***Anmerkung: Wird genannt nach der Ausführung von des oben genannten Skriptes xva.py
Auf dem Zielhost ausführen:
xe vm-param-set uuid=<> PV-bootloader=
(Ja, nach dem Gleichzeichen kommt nichts mehr)
Außerdem muss über die “Einstellungen”-Seite unter Boot-Optionen im XenCenter folgende Zeile ergänzt bzw. angepasst werden:
root=/dev/hda1 console=tty
ändern in:
root=/dev/xvda console=hvc0
Anmerkungen:
Grundsätzlich ist übrigens auch das direkte “Streamen” einer Classic-Xen-Maschine zu XenServer möglich. Hierbei wird ein wenig im Quellcode des Python-Skriptes verändert. Demnächst in diesem Blog!
Toller Artikel, hat bei mir reibungslos funktioniert. Danke!