Migration paravirtualisierter XEN-Gäste nach KVM (PVM -> HVM)
24. Oktober 2012 | Von Ralf Spenneberg | Kategorie: Admin | VirtualisierungBei uns gab es noch ein uraltes XEN-System. Ursprünglich aufgesetzt noch mit Debian Sarge ist es inzwischen bei Squeeze angekommen. Leider macht die Hardware nicht mehr mit. Vor 3 Wochen ist das sieben Jahre alte Motherboard ausgefallen. Wir konnten den Rechner mit einem anderen Board wieder zum Leben erwecken, aber dieses bietet nicht alle Funktionen. Zeit für ein neues System. Dabei sollte dann auch KVM statt XEN zum Einsatz kommen. Leider sind einige der XEN-Gäste aber sehr früh entstanden und verfügen nicht über eine komplette Festplatte sondern XEN simuliert lediglich einzelne Partitionen. Damit ist das für KVM nicht brauchbar. Also mussten die Gäste entsprechend angepasst werden.
Vor dem Herunterfahren des Gastes habe ich noch Grub und einen Linux-Kernel installiert. Diese sind bei XEN üblicherweise auch nicht erforderlich.
Dann wurde das Image auf die neue Maschine kopiert. Dort wurde dann mit dd eine leere 20GB Datei angelegt, die ein wenig größer als die originale Image Datei ist. Die originale Datei enthält nur eine Partition ohne Partitionstabelle. Diese muss nun in der neuen Datei angelegt werden. Dies kann komfortabel mit parted erledigt werden.
# dd if=/dev/zero of=/kvm/disk.img bs=1024M count=20 # parted /kvm/disk.img (parted) mklabel msdos (parted) mkpart primary ext3 1 19GB (parted) mkpart primary linux-swap 19GB -1s (parted) print Model: (file) Disk /kvm/disk.img: 21,5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 1049kB 19,0GB 19,0GB primary 2 19,0GB 21,5GB 2475MB primary (parted) quit
Nun muss der Inhalt der alten Partition in die neue Partition kopiert werden. Hier nutzen wir kpartx um die Partition in dem neuen Image verfügbar zu machen:
# kpartx -a -v disk.img add map loop0p1 (254:1): 0 37107712 linear /dev/loop0 2048 add map loop0p2 (254:2): 0 4833280 linear /dev/loop0 37109760 # dd if=olddisk-part.img of=/dev/mapper/loop0p1
Um den Fortschritt der Kopie zu verfolgen, kann dieser mit „pkill -USR1 dd“ angezeigt werden. Sobald der Kopiervorgang abgeschlossen ist, sollte das Dateisystem mit fsck –force geprüft werden. Dann kann es an die neue Größe mit resize2fs angepasst werden:
</pre> # fsck.ext3 -f /dev/mapper/loop0p1 # resize2fs /dev/mapper/loop0p1 # mkswap /dev/mapper/loop0p2 # kpartx -d -v /kvm/disk.img <pre>
Nun kann eine virtuelle KVM-Maschine erzeugt werden. Dies erfolgt der Einfachheit zum Beispiel mit dem virt-manager. Dabei wählen Sie dann „Festplattenimage importieren“. Da der Bootloader noch nicht installiert ist, sollte die KVM-Instanz zunächst noch mit einer Live-CD gebootet werden. Außerdem müssen möglicherweise noch die /etc/inittab und /etc/fstab angepasst werden.
In der /etc/inittab kann eine hvc0- oder con0-Konsole eingetragen sein. Diese gibt es bei KVM nicht. Daher wählen Sie am Ende des Dialogs zur Erzeugung der neuen KVM-Maschine die Option „Konfiguration bearbeiten vor der Installation“. Fügen Sie dann ein CD-ROM-Laufwerk hinzu und hängen Sie eine Live-CD ein. Aus dieser können Sie dann die Festplatte mounten und entsprechend anpassen. Vergessen Sie nicht Grub mit „grub-install“ zu installieren und bei Debian „update-grub“ aufzurufen. Der letzte Befehl
erzeugt die Grub-Konfiguration. Auf anderen Systemen müssen Sie diese manuell erzeugen.