P2V - partitionsweise Überführung in eine VM

Eine vorhandene Linuxmaschine in eine virtuelle Maschine zu überführen ist einfach. Einfach eine Kopie mit einem P2V Tool anlegen und fertig! Problem nur, wenn man keine kompletten Festplatten klonen möchte und keine 200GB an freiem Speicher in das Diskimage schreiben möchte. Das Ausgangssystem war ein Debian 8 das ca. 6GB Festplattenspeicher auf einer 250GB Platte belegte. Um das resultierende Image zu verkleinern verkleinerte ich zunächst die EXT4 Root Partiton mit gparted Live auf angenehme 16GB. Mit

dd if=/dev/sda1 of=hdd_raw.img

konnte ich das Rohabbild der Partion schon einmal klonen. Da zur Überführung in ein durch Virtualbox nutzbares VDI Format natürlich auch ein MasterBootRecord und eine Partitionstabelle im Plattenabbild vorhanden sein müssen, kann man das oben erzeugte Abbild erst einmal nicht nutzen. Um dieses Problem zu lösen habe ich zunächst mit dd eine leere Datei in Größe meiner neuen virtuellen Festplatte erzeugt, diese muss natürlich mindestens genau so viel Speicher haben wie das Partitionsimage (in diesem Fall 16GB). Um noch Platz für eine Swap Partition zu haben, erzeuge ich das Image mit 20 GB:

dd if=/dev/zero of=neue_platte.img bs=1G count=19

Da fdisk auf Dateibasis arbeitet, kann mit

fdisk neue_platte.img

die Datei partitioniert werden. Hierzu lege ich eine 16GB große Primärpartition an und zudem eine Extended Partition, welche die Swap-Partion wird. fdisk bemerkt beim Start schon, dass keine Partitionstabelle existiert und legt automatisch eine neue an. Wichtig ist zudem noch, dass die neue Partition das Bootable Flag bekommt. Am Ende das ganze noch speichern und wir haben ein Image mit (leeren) Partitionen. Mit dem Tool kpartx können nun die einzelnen Partitionen im Image File als Loopback Device im System eingebunden werden. Hierzu werden root Rechte benötigt:

sudo kpartx -a neue_platte.img

Da wir in unserem Image 2 Partitionen haben, legt kpartx auch 2 Loopback Devices an. Diese liegen unter /dev/mapper/loop0pX. In diesem Fall soll nur die erste Partition überschrieben werden, also kann das gedumpte Image (hdd_raw.img) einfach auf das Device loop0p1 kopiert werden.

sudo cp hdd_raw.img /dev/mapper/loop0p1

Jetzt kann mittels resize2fs noch das Dateisystem repariert bzw. auf den verbleibenden Speicherplatz vergrößert werden: sudo resize2fs /dev/mapper/loop0p1 . Ist dieser Prozess sauber durchgelaufen, können die Partionen wieder aus dem System entfernt werden:

sudo kpartx -d neue_platte.img

und das Loopback Device wieder freigegeben werden (sudo losetup -D). Jetzt liegt ein sauberes Plattenimage inklusive Partitionstabelle und MBR vor, welches nun für den Betrieb in einer VM vorbereitet werden kann:

VBoxManage convertdd neue_platte.img vm_festplatte.vdi --format VDI

In meinem Fall hatte ich noch das Problem, dass scheinbar der Bootloader nicht mehr korrekt funktionierte und die VM nicht bootete. Dies konnte ich allerdings schnell mit einer Reparatur mit der Boot Repair Disk beheben (klick). Ein weiterer Fallstrick war, dass sich die UUID der Swap Partition verändert hatte (logisch, denn die wurde ja nicht geklont) und Debian diese in der VM nicht mehr finden konnte. Die Änderung der UUID der Swap Partition in der /etc/fstab brachte jedoch schnell Abhilfe und das System läuft nun sauber und ohne Probleme.

Kommentar eintragen

HTML-Code wird als normaler Text angezeigt, Links und Email-Adressen werden automatisch umgewandelt.

Die Kommentare dieses Eintrags als Atom-Feed abonnieren