Stellen Sie vor dem Klonen sicher, dass die Vorlage alle notwendigen Komponenten für zukünftige Klone enthält. Wenn Sie das Betriebssystem gerade erst installiert haben, überlegen Sie, ob es sinnvoll ist, zusätzliche Pakete wie mc, nano und traceroute zu installieren, das Netzwerk zu konfigurieren, den Hostnamen festzulegen, die SSH-Motd einzurichten, iptables zu konfigurieren usw. Überprüfen Sie die Netzwerkverbindung und installieren Sie die neuesten Updates. Vielleicht möchten Sie auch httpd und einen Mailserver einrichten. Stellen Sie sicher, dass das Original für den Klonen vertrauenswürdig ist und stabil läuft. Bereit? Los geht’s!
Schauen wir uns die Liste der virtuellen Maschinen an:
# virsh list --all Id Name State ---------------------------------------------------- 4 vm1 running
Wir erstellen eine Kopie von vm1 und nennen sie vm2.
Zuerst stoppen wir das Original:
# virsh suspend vm1
oder fahren es herunter:
# virsh shutdown vm1
Im Folgenden stellen wir zwei Varianten vor:
1. Variante: Das Dienstprogramm virt-clone:
# virt-clone -o vm1 -n vm2 -f /data/vms/vm2.img --connect=qemu:///system WARNING Setting the graphics device port to autoport, in order to avoid conflicting. Allocating 'vm2.img' | 20 GB 00:00:06
Clone 'vm2' created successfully.
Da wir den Befehl als root ausgeführt haben, hat virt-clone die Festplatte vm1.img mit dem Namen vm2.img und dem Besitzer root:root erstellt, anstatt qemu:qemu. Dies hat keinen Einfluss auf die Geschwindigkeit. Wichtig ist, dass die Festplatte erstellt wurde:
# ls -al /data/vms/ total 3104656 drwxr-xr-x. 2 root root 4096 Apr 27 06:17 . drwxr-xr-x. 5 root root 4096 Apr 19 17:45 .. -rw-r--r--. 1 qemu qemu 21478375424 Apr 27 06:17 vm1.img -rw-r--r--. 1 root root 1587609600 Apr 27 06:17 vm2.img
Beim Starten von vm2 können Sie folgende Meldung sehen:
# virsh start vm2 error: Failed to start domain vm2 error: internal error: process exited while connecting to monitor: 2016-04-27T10:19:21.991952Z qemu-kvm: -chardev socket,id=charchannel0, path=/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0,server,nowait: Failed to bind socket: Permission denied 2016-04-27T10:19:21.992122Z qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0, server,nowait: chardev: opening backend "socket" failed
Achten Sie auf domain-vm1 im Fehlertext. Korrigieren Sie dies (suchen Sie nach domain-vm1 und ersetzen Sie es durch domain-vm2):
# virsh edit vm2 Domain vm2 XML configuration edited.
# virsh start vm2
Domain vm2 started
2. Variante (manuell)
Da vm2 bereits existiert, erstellen wir vm3 und vergleichen die Ergebnisse.
Wir fahren das Original herunter:
# virsh shutdown vm1
Kopieren Sie die Festplatte:
# cp /data/vms/{vm1,vm3}.img
Erstellen Sie einen XML-Dump von vm1:
# virsh dumpxml vm1 > /tmp/vm3-template.xml
Löschen Sie die UUID des Originals, libvirt fügt neue Werte hinzu:
# sed -i /uuid/d /tmp/vm3-template.xml # sed -i '/mac address/d' /tmp/vm3-template.xml
Benennen Sie die Namen von alt auf neu um:
# sed -i s/vm1/vm3/ /tmp/vm3-template.xml
Erstellen Sie die neue vm3:
# virsh define /tmp/vm3-template.xml # virsh start vm1 # virsh start vm3
Diese Variante habe ich hier gefunden: http://unix.stackexchange.com/questions/8351/
Analyse der Ergebnisse
Der Unterschied, den ich gesehen habe, ist, dass im ersten Fall die Größe der Festplatte vm2 stark von der Größe von vm3 abwich:
# ls -al --block-size=M /data/vms/ total 4550M drwxr-xr-x. 2 root root 1M Apr 27 06:44 . drwxr-xr-x. 5 root root 1M Apr 19 17:45 .. -rw-r--r--. 1 qemu qemu 20484M Apr 27 07:00 vm1.img -rw-r--r--. 1 qemu qemu 1515M Apr 27 07:00 vm2.img -rw-r--r--. 1 qemu qemu 20484M Apr 27 06:59 vm3.img
Offensichtlich kopiert virt-clone beim Erstellen eines Clons nur den tatsächlich von der virtuellen Maschine belegten Speicherplatz. Die Größe von vm2.img ist nur geringfügig größer als die Ausgabe von „df -h“, die in vm1, vm2 oder vm3 ausgeführt wurde (da ich zwischen den Klonvorgängen nichts an den Gastsystemen geändert habe, hat sich ihre Größe im Vergleich zum „Eltern“-System vm1 nicht verändert).
Im Allgemeinen sollten Sie, wenn Sie zum ersten Mal auf ein Problem stoßen, versuchen, die Änderungen nach jedem Schritt zu analysieren. Haben Sie „sed -i /uuid/d /tmp/vm3-template.xml“ ausgeführt? Schauen Sie nach. Vergleichen Sie es mit dem Original. Haben Sie dann vm2 geklont? Schauen Sie zur Sicherheit in das Verzeichnis, in dem Ihre Gast-Datenträger gespeichert sind. Haben Sie ein neues Netzwerk erstellt? Erkundigen Sie sich, ob die Netzwerkkonfigurationsdatei in /etc/libvirt/qemu/networks erstellt wurde. Und so weiter.
Wo immer Sie etwas sehen, versuchen Sie, alles Unbekannte vor der Ausführung in der Konsole zu überprüfen. Haben Sie in diesem Artikel ein Beispiel für den Befehl virt-clone gesehen? Nehmen Sie sich die Mühe, im Internet zu suchen, wer sonst noch so etwas vorschlägt, und lesen Sie die Manpage.
Versuchen Sie, alle Ihre Aktionen zu dokumentieren, aufzuschreiben und zu kommentieren. Dann erhalten Sie Ihr eigenes How-To, das Sie verwenden können, wenn Sie in einem Jahr weitere Gastsysteme erstellen müssen. Wenn Sie keine virtuellen Maschinen regelmäßig erstellen, ist es normal, dass Sie die Syntax vergessen. Die History kann gelöscht oder mit so vielen verschiedenen Befehlen gefüllt sein, die zudem noch Tippfehler enthalten, dass Sie sich erneut neu einarbeiten müssen.
# virsh list --all Id Name State ---------------------------------------------------- 7 vm2 running 9 vm1 running 10 vm3 running
