VirtualBox: Mit LVM Snapshots Backups und Klone laufender virtueller Maschinen erstellen (keine Downtime)

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>
Follow me on Twitter

Wenn Sie LVM Datenträger für Ihre VirtualBox VMs benutzen (wie im Tutorial Using RAW Devices In VirtualBox VMs) können Sie Backups und Klone von laufenden virtuellen Maschinen anlegen ohne diese vorher herunterzufahren. Dieses Tutorial zeigt Ihnen, wie Sie dies bewerkstelligen: LVM Snapshots benutzen um Backups und Klone ohne Downtime anzulegen.

Für die Richtigkeit der Inhalte dieses Tutorials gebe ich keinerlei Garantie!

1 Vorbemerkung

Da ich VirtualBox auf einem headless Server installiert habe benutze ich im Folgenden phpvirtualbox als VirtualBox GUI. Es treten jedoch keine Probleme auf, falls Sie die normale grafische Oberfläche vonVirtualBox benutzen.

Meine laufende virtuelle Maschine (von der ich ein Backup anlegen möchte) heißt vm10 und befindet sich auf dem LVM Datenträger /dev/vg0/vm10.

Stellen Sie sicher, dass Sie als root angemeldet sind (geben Sie

sudo su

ein um sich als root anzumelden), da alle Schritte des Tutorials als root ausgeführt werden müssen.

2 Erstellen eines Backups der laufenden VM mit LVM Snapshots

Um ein Backup der laufenden virtuellen Maschine vm10 zu erstellen, erzeuge ich zunächst einen LVM Snapshot von /dev/vg0/vm10 namens vm10_snap. Snapshots können kleiner sein als der Originaldatenträger – 512MB könnten an sich genug sein, ich benutze hier jedoch eine Größe von 5GB:

lvcreate -L5G -s -n vm10_snap /dev/vg0/vm10

Als nächstes benutze ich dd um den Inhalt des Snapshots auszulesen und ihn zu gzip zu pipen um ein gzipptes Backup im Verzeichnis /backup zu erzeugen (Sie können natürlich auch jedes andere Verzeichnis verwenden):

dd if=/dev/vg0/vm10_snap bs=64k | gzip -c > /backup/vm10.img.gz

Das war’s – Ihr Backup von vm10 ist nun unter /backup/vm10.img.gz zu finden.

Entfernen Sie nun den LVM Snapshot:

lvremove -f /dev/vg0/vm10_snap

3 Ein Backup/Klon wiederherstellen

Wiederherstellen und klonen ist im Prinzip das selbe, ich zeige Ihnen deshalb im Folgenden wie Sie einen Klon des gerade angelegten Backups namens vm11 anlegen.

Erstellen Sie zunächst einen LVM Datenträger der selben Größe wie die der Original-LVM-Datenträger (in diesem Beispiel 20GB):

lvcreate -L20G -n vm11 vg0

Stellen Sie nun das Backup von vm10 auf dem neuen logischen Datenträger /dev/vg0/vm11 wieder her:

gunzip -c /backup/vm10.img.gz | dd of=/dev/vg0/vm11
bs=64k

Erstellen Sie eine .vmdk Datei für /dev/vg0/vm11 (z.B. vm11.vmdk), sodass Sie sie mit VirtualBox benutzen können. Es ist wahrscheinlich am besten diese im Homeverzeichnis des Benutzers anzulegen, mit dem VirtualBox ausgeführt wird (z.B. /home/vbox falls Sie phpvirtualbox benutzen) – der Benutzer muss auch Besitzer der Datei sein:

cd /home/vbox
VBoxManage internalcommands createrawvmdk -filename vm11.vmdk -rawdisk /dev/vg0/vm11
chown vbox:vbox vm11.vmdk

Gehen Sie als nächstes in Ihre VirtualBox Oberfläche (normale VirtulBox GUI oder phpvirtualbox) und klicken Sie auf New:

Klicken Sie im Create New Virtual Machine Wizard auf Next>>:

Geben Sie den Namen der neuen VM an und wählen Sie das selbe Betriebssystem und die selbe Version aus wie die der original VM:

Geben Sie den Arbeitsspeicher des Klons an:

Im Virtual Hard Disk Bildschirm wählen Sie Use existing hard disk und klicken auf das Choose a virtual hard disk file Symbol:

Wählen Sie die vm11.vmdk Datei aus und klicken auf OK:

Klicken Sie auf Next>>:

Klicken Sie auf Create:

Bevor Sie den Klon in Betrieb nehmen könnten Sie daran interessiert sein, einige Einstellungen an das Original anzupassen, zum Beispiel können Sie Bridging im Netzwerkkonfigurationsmenü auswählen, falls dies auch beim Original eingestellt war:

Klicken Sie nun auf Start um den Klon zu starten:

Während des Hochfahrens könnten Sie bemerken, dass die Netzwerkkonfiguration hängt:

Dies geschieht, weil VirtualBox dem Klon eine andere MAC Adresse für eth0 zugewiesen hat, die /etc/udev/rules.d/70-persistent-net.rules Datei des Klons aber immernoch die ursprüngliche MAC Adresse benutzt. Nachdem der Klon hochgefahren ist, benutzen Sie den ifconfig Befehl…

ifconfig

… und Sie werden sehen, dass eth0 fehlt (aufgrund des MAC-Adressenproblems), was bedeutet, dass der Klon das Networking nicht benutzen kann:

Um das Problem zu beheben, öffnen Sie im Klon /etc/udev/rules.d/70-persistent-net.rules

vi /etc/udev/rules.d/70-persistent-net.rules

… und kommentieren die eth0 Zeile aus (wie auch die eth1 Zeile, die während des Systemstarts hinzugefügt wurde, weil die MAC Adresse von eth0 falsch war). Dies stellt sicher, dass beim nächsten Systemstart eine neue eth0 Zeile mit der korrekten MAC Adresse hinzugefügt wird.

Starten Sie dann den Klon neu. Nach dem Neustart sollte das Networking funktionieren und Sie sollten eth0 in der Ausgabe von ifconfig finden:

ifconfig

Herzlichen Glückwunsch, Sie haben erfolgreich eine VM geklont, ohne die original VM abzuschalten.

4 Links

Das könnte dich auch interessieren …