Come creare un duplicato di una VM KVM / libvirt / virt-manager?


13

Sono un po 'perso con virt-manager / libvirt / KVM.

Ho una KVM VM funzionante (Windows XP) che funziona bene.

La VM è supportata da un file di circa 4 GB (un .img ).

Ora voglio fare qualcosa di molto semplice: voglio duplicare la mia VM.

Ho pensato "OK, nessun problema, copiamo il file da 4 GB e copiamo il file XML" .

Ma poi le FAQ di libvirt indicano tutte le lettere maiuscole: "NON DOVREI CURA DOVE È STATO MEMORIZZATO L'XML"

Domande frequenti su libvirt

Va bene, non mi dovrebbe importare. Ma come posso duplicare la mia macchina virtuale?

Voglio creare una nuova macchina virtuale che è una copia di quella macchina virtuale.

Risposte:


4

virshti permetterà di modificare, esportare e importare la definizione XML per i tuoi server. Vorrei utilizzare virt-cloneper generare un file di immagine clonato ed esportare l'XML. Per sicurezza, rimuoverei la configurazione del clone dal server originale.


42

Il più conveniente è semplicemente:

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

Che farà una copia di this-vm, nominata that-vme si occupa della duplicazione dei dispositivi di archiviazione. Niente di nuovo qui tranne i dettagli.

Più precisamente, ciò che la FAQ sta dicendo è che le descrizioni del dominio XML non sono direttamente modificabili, è necessario passare attraverso libvirt. Per completare i passaggi eseguiti dal virt-clonecomando, è possibile:

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"

Questo funziona anche per la copia su una VM su un altro host: usa sftp invece di cp, (possibile) cambia il percorso dell'immagine prima di 'definire' la nuova vm e sftp anche that-vm.xml sull'altro host.
Andreas Florath,

Grazie per questo, mi hai risparmiato un sacco di tempo. Il problema che ho riscontrato è la clonazione e la creazione di nuovi, in quanto se creassi un nuovo nodo, le versioni del pacchetto sarebbero fuori sincrono con gli altri nodi che utilizzavano un mirror locale.
Mike Purcell,

Non virt-clonegestire crittografia completa del disco in modo corretto? Significa, mi chiederà il mio decrypt pw prima di fare la sua cosa?
un programmatore

Penso che sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"dovrebbe leggere sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"o almeno sul mio derivato debian sed si lamenta di un trailing mancante /. Grazie anche per le informazioni, il mio virsh-clone non funzionava affatto.
9

3

Oltre a "virt-clone" puoi duplicare la VM in questo modo:

  1. Assicurarsi che la VM esistente (da duplicare) sia chiusa.
  2. eseguire un "sudo virsh dumpxml <domid>" della VM esistente e salvare il file xml di output.
  3. Modifica il tag <name> sotto il tag <domain>.
  4. Utilizzare "uuidgen" per generare un nuovo ID univoco e utilizzarlo per modificare il tag <uuid> esistente.
  5. Crea una copia delle immagini virtuali qcow esistenti utilizzate dalla VM (di solito memorizzate in / var / lib / libvirt / images, ma per essere sicuri leggi il tuo file XML per la posizione esatta). Il comando è "sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2" e compila il nuovo file yyyy.qcow2 nel file XML.
  6. Inizia il nuovo vm: sudo virsh define new.xml
  7. Avvia il nuovo domid: sudo virsh start <new_domid>



0

Apparentemente virt-clone è la strada da percorrere.

Ho provato a duplicare l'XML ma non sarebbe apparso sotto virt-manager.

Mi chiedo ancora come posso trasferire un XML + .img su un nuovo sistema che diceva ...


0

Il seguente comando ha funzionato per me (Devo chiudere VSA / Vm prima di eseguire il comando)

# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone

1
A parte i pseudo nomi di VM, questo è identico al comando della risposta di tre anni, ma privo delle informazioni supplementari da quella risposta.
G-Man dice 'Reinstate Monica' il

0

virt-clone --auto-clone non sembra funzionare bene con LVM. Mi aspettavo che creasse un'istantanea e la usassi, ma invece copia tutti i dati.

Meglio fare il dumpxml / definire route; e ricordati di montare il filesystem di root del clone e modificare gli indirizzi IP e il nome host in modo appropriato prima di avviare l'originale e il clone.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.