ADMIN

2021

02

2021-02-01T12:00:00

Sichere Virtualisierung

SCHWERPUNKT

086

Virtualisierung

Datenaufbereitung

VMs kopieren mit VirtualBox, Libvirt und KVM/Qem

Klonmeister

von Tim Schürmann

Veröffentlicht in Ausgabe 02/2021 - SCHWERPUNKT

Das Klonen von virtuellen Maschinen spart wiederkehrende Konfigurationsarbeiten. Die meisten freien Virtualisierungsangebote erstellen ein Duplikat zwar auf Knopfdruck oder per Kommandozeilenbefehl, das Kopieren birgt aber auch ein paar Stolperfallen. Der Beitrag zeigt, auf was Sie achten sollten.

Wer regelmäßig mit virtuellen Maschinen jongliert, wünscht sich irgendwann Duplikate. So lässt sich etwa mit einer geklonten Datenbank-VM schnell die Ausfallsicherheit erhöhen oder zeitnah ein Cluster aufbauen. Benötigt ein Anwender eine neue VM, erhält er mit einem Klon umgehend ein bereits vorkonfiguriertes Exemplar. Mittlerweile erzeugen die meisten Virtualisierungsansätze einen Klon mit wenigen Mausklicks oder über einen knackigen Kommandozeilenbefehl. Die quelloffenen Angebote VirtualBox, Libvirt mit seinem virt-manager sowie das Gespann aus KVM und Qemu erfordern dabei jedoch etwas Aufmerksamkeit vom Administrator.
VM für Klonvorgang vorbereiten
Jeder Klon übernimmt unverändert die Inhalte der ursprünglichen VM. Dabei bleibt insbesondere die Netzwerkkonfiguration des Gastbetriebssystems erhalten. Sie müssen daher unter Umständen noch weitere Werkzeuge auf das geklonte Gastsystem loslassen und mit ihnen beispielsweise statische IP-Adressen korrigieren. In einer Libvirt-Installation können Sie dazu das Werkzeug "virt-sysprep" heranziehen. Im Idealfall richten Sie die VM schon im Vorfeld so ein, dass sie sich später einfach klonen lässt – beispielsweise, indem sie ihre IP-Adressen per DHCP einholt. Wenn Sie eine Maschine mit kommerzieller Software klonen, müssen Sie zudem die jeweiligen Lizenzbedingungen beachten. So dürfen Sie zum Beispiel Windows nicht mehrfach starten, sondern benötigen zunächst entsprechend viele Lizenzen.
Während das Gastsystem unangetastet bleibt, gilt dies nicht für die MAC-Adressen der virtuellen Netzwerkadapter. Diese können Sie entweder von der ursprünglichen VM übernehmen oder für den Klon neu wählen. Um Kollisionen im Netzwerk zu verhindern, schlägt die Virtualisierungssoftware bereits neu ausgewürfelte MAC-Adressen vor. Übernehmen sollten Sie die MAC-Adressen der ursprünglichen VM nur im Ausnahmefall, etwa wenn der Klon das Original ersetzen soll.
Wer regelmäßig mit virtuellen Maschinen jongliert, wünscht sich irgendwann Duplikate. So lässt sich etwa mit einer geklonten Datenbank-VM schnell die Ausfallsicherheit erhöhen oder zeitnah ein Cluster aufbauen. Benötigt ein Anwender eine neue VM, erhält er mit einem Klon umgehend ein bereits vorkonfiguriertes Exemplar. Mittlerweile erzeugen die meisten Virtualisierungsansätze einen Klon mit wenigen Mausklicks oder über einen knackigen Kommandozeilenbefehl. Die quelloffenen Angebote VirtualBox, Libvirt mit seinem virt-manager sowie das Gespann aus KVM und Qemu erfordern dabei jedoch etwas Aufmerksamkeit vom Administrator.
VM für Klonvorgang vorbereiten
Jeder Klon übernimmt unverändert die Inhalte der ursprünglichen VM. Dabei bleibt insbesondere die Netzwerkkonfiguration des Gastbetriebssystems erhalten. Sie müssen daher unter Umständen noch weitere Werkzeuge auf das geklonte Gastsystem loslassen und mit ihnen beispielsweise statische IP-Adressen korrigieren. In einer Libvirt-Installation können Sie dazu das Werkzeug "virt-sysprep" heranziehen. Im Idealfall richten Sie die VM schon im Vorfeld so ein, dass sie sich später einfach klonen lässt – beispielsweise, indem sie ihre IP-Adressen per DHCP einholt. Wenn Sie eine Maschine mit kommerzieller Software klonen, müssen Sie zudem die jeweiligen Lizenzbedingungen beachten. So dürfen Sie zum Beispiel Windows nicht mehrfach starten, sondern benötigen zunächst entsprechend viele Lizenzen.
Während das Gastsystem unangetastet bleibt, gilt dies nicht für die MAC-Adressen der virtuellen Netzwerkadapter. Diese können Sie entweder von der ursprünglichen VM übernehmen oder für den Klon neu wählen. Um Kollisionen im Netzwerk zu verhindern, schlägt die Virtualisierungssoftware bereits neu ausgewürfelte MAC-Adressen vor. Übernehmen sollten Sie die MAC-Adressen der ursprünglichen VM nur im Ausnahmefall, etwa wenn der Klon das Original ersetzen soll.
Das Klonen funktioniert grundsätzlich nur bei ausgeschalteter VM; virt-manager erlaubt zwar auch das Kopieren einer pausierten VM, je nach Backend und dessen Konfiguration kann der Klonvorgang dabei jedoch fehlschlagen. Beim Ausschalten ist es möglich, den Zustand der VM festzuhalten. In VirtualBox gelingt das über "Maschine / Schließen / Zustand sichern", in virt-manager klicken Sie die Maschine mit der rechten Maustaste an und schalten sie unter "Herunterfahren / Sichern" ab.
Dabei landet der aktuelle Hauptspeicherinhalt der VM auf der Festplatte. Während VirtualBox diesen gesicherten Zustand in den Klon übernimmt, kopiert virt-manager nur den Festplatteninhalt. Beim Start des Klons kann dies dann zu unangenehmen Nebenwirkungen führen. War beispielsweise in der ursprünglichen VM ein Textdokument geöffnet, aber noch nicht gespeichert, geht es im Klon unweigerlich verloren. Sie sollten daher in virt-manager auf das Sichern verzichten und die virtuelle Maschine geordnet herunterfahren. Das Dateiformat der Festplatten bleibt übrigens bei allen Virtualisierungslösungen erhalten: Nutzt das Festplattenimage das VMDK-Format, so verwendet es auch der Klon.
Neue MAC-Adressen generieren
Um in der Benutzeroberfläche von VirtualBox einen Klon zu erstellen, selektieren Sie die gewünschte Maschine in der Liste und rufen dann aus dem Menü den Punkt "Klonen" auf. Noch schneller führt "Strg+O" zum Ziel.
Im erscheinenden Assistenten öffnen Sie den "Experten-Modus". Der wichtigste Punkt ist die "MAC-Adressen-Richtlinie": In der Standardeinstellung wählt der Assistent für alle virtuellen Netzwerkadapter neue MAC-Adressen – mit Ausnahme aller Netzwerkschnittstellen, die am internen NAT angeschlossen sind. Ob diese Ausnahme für Sie Sinn ergibt, hängt von Ihrem Netzwerk ab. Im Zweifelsfall sollten Sie daher besser die Option "Neue MAC-Adressen für alle Netzwerkadapter generieren" auswählen. Bei der Einstellung "MAC-Adressen aller Netzwerkadapter mit einbeziehen" übernehmen alle virtuellen Netzwerkadapter im Klon die MAC-Adressen des Originals.
Im obersten Feld müssen Sie der neuen VM einen Namen geben. Diesen verwendet VirtualBox gleichzeitig als Dateinamen für das geklonte Festplattenimage. In Bild 1 würde das Image folglich den Dateinamen "Ubuntu Server-Klon.vdi" tragen. Wenn VirtualBox stattdessen den Dateinamen des Originals übernehmen soll, setzen Sie einen Haken vor "Namen der Platten behalten".
Jede Festplatte besitzt, wie einige andere Hardwarekomponenten, eine eindeutige Identifikationsnummer (UUID). VirtualBox weist deshalb der geklonten Festplatte automatisch eine neue UUID zu. Verhindern können Sie dies mit einem Haken vor "Hardware-UUIDs behalten". Sinnvoll ist das vor allem, wenn die Software in der VM die UUID abfragt. Dazu gehören unter anderem einige Kopierschutzverfahren, die Sie allerdings damit nicht immer besänftigen können.
Bild 1: Nur im Experten-Modus präsentiert der Assistent von VirtualBox alle Einstellungen.
Vollständiger und verknüpfter Klon
Wenn Sie Snapshots verwenden, klont VirtualBox standardmäßig den gerade aktuellen Zustand. Kontrollieren Sie daher vor dem Erstellen des Duplikats noch einmal, welcher Snapshot gerade aktiv ist. Dieses Verhalten können Sie sich allerdings auch für ein Backup zunutze machen: Jeder Snapshot besitzt sein eigenes Festplattenimage, das alle Änderungen zu den vorherigen Sicherungspunkten enthält. Beim Klonen erstellt VirtualBox ein neues Festplattenimage, in das es nur die tatsächlich notwendigen Datenblöcke aus den einzelnen Festplattenimages kopiert. Sie erhalten somit im Klon nicht nur ein einziges und somit leichter zu sicherndes Festplattenimage, es belegt mitunter auch noch weniger Speicherplatz als die Snap-shots zusammen. Möchten Sie hingegen alle Snapshots in den Klon übernehmen, aktivieren Sie im Assistenten den Punkt "Alles" im Bereich "Sicherungspunkte".
VirtualBox kann das Duplikat auf zwei Arten erstellen. Ein "vollständiger Klon" ist eine komplette Kopie des Originals. Nach der Duplizierung existieren folglich zwei unabhängige virtuelle Maschinen mit jeweils einem eigenen Festplattenimage.
Der "verknüpfte Klon" nutzt hingegen die Festplatte des Originals mit. Das Konzept dahinter ist allerdings etwas trickreich: Zunächst erstellt VirtualBox für das Original und den Klon je ein eigenes neues Festplattenimage. In ihnen landen jeweils die Änderungen gegenüber dem ursprünglichen Festplattenimage (Ubuntu.vdi), wie in Bild 2 zu sehen ist. Ändert der Klon eine Datei, landet die neue Fassung dieser Datei in seinem eigenen Festplattenimage (Image2.vdi).
Auf diese Weise teilen sich Original und Klon ein gemeinsames Festplattenimage, sehen aber nicht die Änderungen der jeweils anderen VM. Im Hintergrund erstellt VirtualBox den verknüpften Klon über die Snapshot-Funktion: Beim Klonen legt VirtualBox in der ursprünglichen VM automatisch einen Snapshot unter dem Namen "Ausgangspunkt für …" an, der wiederum die Basis für beide virtuellen Maschinen bildet.
Bild 2: Ein vollständiger Klon führt zu zwei komplett voneinander unabhängigen VMs. Bei einem verknüpften Klon nutzen beide VMs ein gemeinsames Festplattenimage als Basis.
VM via Kommandozeile klonen
Das Klonen klappt nicht nur in der GUI von VirtualBox, sondern natürlich auch remote auf der Kommandozeile über das Werkzeug "VBoxManage". Ihm führen Sie sämtliche Einstellungen über Parameter zu, was zu Bandwürmern wie dem folgenden führt:
VBoxManage clonevm "<Ubuntu Server>" --name="<Ubuntu Server Kopie>" --mode=all --options=KeepAllMACs --options=KeepDiskNames --register
Die Aktion clonevm weist VBoxManage an, die virtuelle Maschine "Ubuntu Server" zu klonen. Anstelle des Namens können Sie auch die UUID angeben, die VBoxManage list vms verrät. Hinter    "--name=" steht der Name des Klons.
Mit der Option "--mode=all" übernimmt der Klon sämtliche Sicherungspunkte des Originals. Gegenüber der GUI kann VBoxManage den Klon aber auch aus einem beliebigen Snapshot erzeugen. Dazu ersetzen Sie "--mode=all" durch "--mode=machine --snapshot="<Sicherungspunkt 2>"". Hinter "--snapshot=" steht dabei der Name des Snapshots, aus dem VirtualBox eine neue virtuelle Maschine erstellen soll. Die untergeordneten Sicherungspunkte dieses Snapshots klont VBoxManage dabei allerdings nicht mit. Möchten Sie auch diese Sicherungspunkte in den Klon übernehmen, tauschen Sie hinter dem Parameter "--mode=" die Angabe "machine" gegen "machineandchildren" aus.
Wenn Sie "--mode=machine" oder "--mode=machineand-children" verwenden und den Parameter "--snapshot" vergessen, klont VBoxManage automatisch immer den aktuellen Zustand der originalen VM.
Sämtliche weiteren Einstellungen verrät jeweils ein mit "--options=" beginnender Parameter. Mit "--options=Link" würde VBoxManage einen verknüpften Klon erzeugen. Standardmäßig verpasst das Werkzeug allen virtuellen Netzwerkkarten eine neue MAC-Adresse. Der Parameter "--options=KeepAllMACs" übernimmt hingegen die MAC-Adressen aus der ursprünglichen VM, "--options=KeepNATMACs" nur die mit dem NAT verbundenen. Abschließend behält VBoxManage mit dem Parameter "--options=KeepDiskNames" die Dateinamen der Festplattenimages, "--options= KeepHwUUIDs" würde zudem die UUIDs der Hardwarekomponenten übernehmen.
Das im Beispiel angehängte "--register" sorgt dafür, dass VirtualBox die neue virtuelle Maschine registriert. Andernfalls würde VBoxMa­na­ge den Klon einfach nur in einem neuen Verzeichnis ablegen, was recht nützlich ist, wenn Sie nur ein Backup erstellen möchten. Das Verzeichnis für den Klon hinterlegen Sie dann im Parameter "--basefolder=", über den Sie immer das Speicherverzeichnis für das Duplikat vorgeben können.
Bild 3: Das Klonen der VM über die Kommandozeile: Über den Parameter "--register" melden Sie den Klon bei VirtualBox an.
Duplikat mittels virt-manager erstellen
In virt-manager erzeugt der Assistent aus Bild 4 den Klon. Dieser kann allerdings keine Snapshots kopieren, das Duplikat entspricht immer dem aktuellen Zustand. Prüfen Sie daher vor dem Klonen, ob in der zu kopierenden VM der korrekte Snapshot aktiviert ist. Klicken Sie dann die virtuelle Maschine mit der rechten Maustaste an und wählen Sie "Klonen".
Neben einem Namen lässt sich via "Details" für die jeweilige Netzwerkkarte eine andere MAC-Adresse vorgeben – virt-manager schlägt bereits eine neue vor. Die bislang von der ursprünglichen VM genutzte Adresse erscheint über dem Eingabefeld. Standardmäßig kopiert virt-manager das Festplattenimage.
Je nach Backend und dessen Konfiguration können Sie über die Dropdown-Liste unter "Speicherplatz" das jeweilige Image auch "freigeben". Ähnlich wie bei VirtualBox nutzt dann der Klon das Festplattenimage des Originals mit.
Bild 4: virt-manager bietet deutlich weniger Einstellungen als VirtualBox und das Kommandozeilenwerkzeug virt-clone.
Klonen mit Kommandozeilen-Tool virt-clone
Beim Einsatz von Libvirt dupliziert auf der Kommandozeile das Tool "virt-clone" eine VM. Das Werkzeug steckt bei vielen Linux-Distributionen in einem eigenen Paket, Ubuntu und Debian halten es beispielsweise in "virtinst" vor. Auch virt-clone beachtet keine Snapshots, der Klon entspricht immer dem aktuellen Zustand der zu kopierenden VM. Zum Erstellen einer Kopie genügt dann der Befehl:
virt-clone -o "<Ubuntu Server>"
--auto-clone
Der Zusatz "-o" verrät den Namen der zu kopierenden VM, mit "--auto-clone" darf das Werkzeug den Namen des Klons und dessen Einstellungen selbst wählen. virt-clone nutzt dabei die von Libvirt vorgegebene Standardverbindung.
Eine Liste mit allen virtuellen Maschinen liefert auf der Kommandozeile virsh list --all. Das Tool "virsh" finden Sie bei Ubu- ntu und Debian im Paket "libvirt-clients".
Bild 5: Mit VBoxManage --snapshot="" übernimmt der Klon die Sicherungspunkte "Snapshot 2", "Snapshot 2.1", "Snapshot 2.2" und "Aktueller Zustand".
Wenn Sie den Klon selbst konfigurieren möchten, ersetzen Sie "--auto-clone" wie folgt durch entsprechende Parameter:
virt-clone --connect qemu:///system -o "<Ubuntu Server>" -n "<Ubuntu Server Kopie>" -f "</var/lib/libvirt/images/ubuntuserver_kopie.qcow2>" -m <52:54:00:a3:fe:11>
Hinter "--connect" steht die URI, über die sich Libvirt mit dem passenden Hypervisor verbindet. Wenn Sie den Parameter weglassen, verwendet virt-clone wieder die Standardverbindung. Die Option "-n" legt den Namen des Klons fest und "-f" verpasst dem kopierten Festplattenimage den angegebenen Dateinamen. Letztgenannten müssen Sie wie im Beispiel samt Pfadangabe hinterlegen. Besitzt die zu klonende VM mehrere Festplattenimages, hängen Sie für jedes einen weiteren Parameter "-f" an. Wenn Sie noch "--pre-
serve-data" ergänzen, verwendet der Klon das Festplattenimage des Originals.
Auf einem Host mit Btrfs-Dateisystem können Sie zudem "--reflink" einsetzen. virt-clone nutzt dann die sogenannten Lightweight Copies des Dateisystems. Dabei verwendet der Klon zunächst das Festplattenimage des Originals. Erst geänderte Datenblöcke speichert Btrfs separat. Dieses Verfahren spart Platz, funktioniert derzeit allerdings nur, wenn die Festplatten-images das RAW-Format nutzen und auf dem gleichen Subvolume liegen.
Über den Parameter "-m" vergeben Sie, wie im obigen Beispiel gezeigt, eine eigene MAC-Adresse. Sind mehrere virtuelle Netzwerkadapter verbaut, hängen Sie für jeden von ihnen einen weiteren Parameter "-m" an. Ergänzen Sie noch die Option "--print-xml", erstellt virt-clone den Klon noch nicht, sondern gibt lediglich seine Konfiguration als XML-Datei aus. Auf diese Weise prüfen Sie vorab, ob die Einstellungen Ihren Vorstellungen entsprechen.
Dateiformat ändern
Sofern Sie auf einem System direkt mit KVM/QEMU arbeiten, greifen Sie zum Werkzeug "qemu-img", das auch gleich noch das Dateiformat des Festplatten-images ändern kann:
qemu-img convert -f qcow2 -O vmdk /var/images/ubuntuserver.qcow2 /var/images/ubuntuserver_kopie.vmdk
In diesem Beispiel überträgt qemu-img den Inhalt des Festplattenimages "ubuntuserver.qcow2" im Format "qcow2" in das neue Festplattenimage "ubuntuserver_kopie.vmdk", das VMDK als Dateiformat verwendet.
Fazit
Das Klonen einer virtuellen Maschine geht leicht von der Hand, in virt-manager und VirtualBox erfordert es nur wenige Mausklicks. Die Kommandozeilenwerkzeuge lassen sich in Shell-Skripte einbinden und erlauben so die Automatisierung des Klonvorgangs. Gegenüber den GUIs bieten sie außerdem zusätzliche Einstellungen. Administratoren sollten jedoch die Folgen des Klonens im Hinterkopf behalten: Neben Lizenzfragen könnte auch die Netzwerkkonfiguration des Gastsystems Probleme bereiten.
(jm)