Migration paravirtualisierter XEN-Gäste nach KVM (PVM -> HVM)

24. Oktober 2012 | Von | Kategorie: Admin | Virtualisierung

Bei 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.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Ping.fm Post to Reddit

Tags: | | | | |

Schreibe einen Kommentar

Fühle dich ermuntert einen Kommentar, Anmerkungen, Hinweise oder deine Ideen zum Thema zu hinterlassen. Wir freuen uns über deine Rückmeldung.