Wie erstelle ich ein Duplikat einer KVM / libvirt / virt-manager VM?

12

Ich bin ein bisschen mit virt-manager / libvirt / KVM verloren.

Ich habe eine funktionierende KVM-VM (Windows XP), die gut funktioniert.

Die VM wird durch eine 4-GB-Datei (eine .img- Datei ) gesichert .

Jetzt möchte ich etwas ganz Einfaches tun: Ich möchte meine VM duplizieren.

Ich dachte "OK, kein Problem, lass uns die 4GB-Datei kopieren und die XML- Datei kopieren" .

Aber dann heißt es in der libvirt-FAQ in Großbuchstaben: "SIE SOLLTEN NICHT SORGEN, WO DAS XML GESPEICHERT WIRD"

libvirt FAQ

OK gut, es sollte mich nicht interessieren. Aber wie dupliziere ich dann meine VM?

Ich möchte eine neue VM erstellen, die eine Kopie dieser VM ist.

SyntaxT3rr0r
quelle

Antworten:

3

virshDamit können Sie die XML-Definition für Ihre Server bearbeiten, exportieren und importieren. Ich würde verwenden virt-clone, um eine geklonte Bilddatei zu generieren und das XML zu exportieren. Aus Sicherheitsgründen würde ich die Klonkonfiguration vom ursprünglichen Server entfernen.

BillThor
quelle
41

Das bequemste ist einfach:

# virt-clone --connect=qemu://example.com/system -o this-vm -n that-vm --auto-clone

Dieser erstellt eine Kopie von this-vm, benennt diese that-vmund kümmert sich um das Duplizieren von Speichergeräten. Hier gibt es nichts Neues außer Details.

Mehr zu dem Punkt, zu sagen ist , was die FAQ , dass die XML - Domain Beschreibungen nicht direkt bearbeitet werden kann , müssen Sie gehen durch libvirt. Um die vom virt-cloneBefehl ausgeführten Schritte abzuschließen , können Sie:

source_vm=vm_name
new_vm=new_vm_name

# You cannot "clone" a running vm, stop it.  suspend and destroy
# are also valid options for less graceful cloning
virsh shutdown "$source_vm"

# copy the storage.
cp /var/lib/libvirt/images/{"$source_vm","$new_vm"}.img

# dump the xml for the original
virsh dumpxml "$source_vm" > "/tmp/$new_vm.xml"

# hardware addresses need to be removed, libvirt will assign
# new addresses automatically
sed -i /uuid/d "/tmp/$new_vm.xml"
sed -i '/mac address/d' "/tmp/$new_vm.xml"

# and actually rename the vm: (this also updates the storage path)
sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"

# finally, create the new vm
virsh define "/tmp/$new_vm.xml"
virsh start "$source_vm"
virsh start "$new_vm"
SingleNegationElimination
quelle
Dies funktioniert auch für das Kopieren über eine VM auf einen anderen Host: Verwenden Sie sftp anstelle von cp, (möglicherweise) ändern Sie den Image-Pfad, bevor Sie die neue VM und sftp auch die Datei that-vm.xml für den anderen Host definieren.
Andreas Florath
Vielen Dank dafür, hat mir viel Zeit gespart. Das Problem, das ich hatte, ist das Klonen und nicht das Erstellen eines neuen Knotens. Wenn ich einen neuen Knoten erstelle, stimmen die Paketversionen nicht mit den anderen Knoten überein, die einen lokalen Spiegel verwendeten.
Mike Purcell
Wird virt-clonedie vollständige Festplattenverschlüsselung korrekt verarbeitet? Bedeutet das, wird es mich nach meinem entschlüsselten PW fragen, bevor es seine Sache macht?
ein Kodierer
Ich denke das sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"sollte gelesen werden sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"oder zumindest auf mein debian-Derivat sed klagt ein fehlendes Trailing /. Danke auch für die Info, mein Virsh-Clone hat einfach überhaupt nicht funktioniert.
Nummer 9
2

Anders als "virt-clone" können Sie die VM folgendermaßen duplizieren:

  1. Stellen Sie sicher, dass die vorhandene (zu duplizierende) VM heruntergefahren ist.
  2. Führen Sie einen "sudo virsh dumpxml <domid>" der vorhandenen VM aus und speichern Sie die Ausgabe-XML-Datei.
  3. Ändern Sie das <name> -Tag unter dem <domain> -Tag.
  4. Verwenden Sie "uuidgen", um eine neue eindeutige ID zu generieren, und verwenden Sie diese, um das vorhandene <uuid> -Tag zu ändern.
  5. Erstellen Sie eine Kopie der vorhandenen virtuellen qcow-Images, die von der VM verwendet werden (normalerweise in / var / lib / libvirt / images gespeichert, lesen Sie jedoch einfach Ihre XML-Datei, um den genauen Speicherort zu ermitteln). Der Befehl lautet "sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2" und füllt die neue Datei yyyy.qcow2 in der XML-Datei aus.
  6. Starten Sie die neue Datei vm: sudo virsh define new.xml
  7. Starten Sie die neue Domid: sudo virsh start <new_domid>


Peter Teoh
quelle
0

Anscheinend ist virt-clone der richtige Weg.

Ich habe versucht, das XML zu duplizieren, aber es wird nicht unter virt-manager angezeigt.

Ich frage mich immer noch, wie ich eine XML + .img auf ein neues System übertragen kann, das sagte ...

SyntaxT3rr0r
quelle
0

Der folgende Befehl hat bei mir funktioniert (muss VSA / Vm herunterfahren, bevor der Befehl ausgeführt wird)

# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone
Vishu
quelle
1
Abgesehen von den Pseudo-VM-Namen ist dies identisch mit dem Befehl aus der drei Jahre alten Antwort - es fehlen jedoch die zusätzlichen Informationen aus dieser Antwort.
G-Man sagt, dass Monica am
0

virt-clone --auto-clone scheint mit LVM nicht gut zu funktionieren. Ich hatte erwartet, dass es einen Schnappschuss erstellt und diesen verwendet, aber stattdessen werden alle Daten kopiert.

Besser die dumpxml / define Route; und denken Sie daran, das Root-Dateisystem des Klons bereitzustellen und IP-Adressen und Hostnamen entsprechend zu ändern, bevor Sie das Original und den Klon starten.

Wombat
quelle