Comment créer une dupe de VM KVM / libvirt / virt-manager?

13

Je suis un peu perdu avec virt-manager / libvirt / KVM.

J'ai une machine virtuelle KVM fonctionnelle (Windows XP) qui fonctionne bien.

La machine virtuelle est sauvegardée par un fichier de 4 Go environ (un .img ).

Maintenant, je veux faire quelque chose de très simple: je veux dupliquer ma machine virtuelle.

J'ai pensé "OK, pas de problème, copions le fichier 4 Go et copions le fichier XML" .

Mais alors la FAQ libvirt indique en majuscules: "vous NE DEVEZ PAS VOUS INQUIETER OERE LE XML EST STOCKÉ"

FAQ libvirt

D'accord, je m'en fiche. Mais alors comment dupliquer ma VM?

Je veux créer une nouvelle machine virtuelle qui est une copie de cette machine virtuelle.

SyntaxeT3rr0r
la source

Réponses:

4

virshvous permettra de modifier, d'exporter et d'importer la définition XML de vos serveurs. J'utiliserais virt-clonepour générer un fichier image cloné et exporter le XML. Pour être sûr, je supprimerais la configuration du clone du serveur d'origine.

BillThor
la source
42

Le plus pratique est tout simplement:

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

Qui fera une copie de this-vm, nommé that-vm, et s'occupe de la duplication des périphériques de stockage. Rien de nouveau ici, sauf les détails.

Plus précisément, ce que dit la FAQ, c'est que les descriptions de domaine XML ne sont pas directement modifiables, vous devez passer par libvirt. Pour terminer les étapes de la virt-clonecommande, vous pouvez:

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
la source
Cela fonctionne également pour la copie sur une machine virtuelle vers un autre hôte: utilisez sftp au lieu de cp, (possible) modifiez le chemin de l'image avant de `` définir '' le nouveau vm et sftp également celui-vm.xml vers l'autre hôte.
Andreas Florath
Merci pour cela, ça m'a fait gagner beaucoup de temps. Le problème que j'ai rencontré est le clonage par rapport à la création d'un nouveau, en ce sens que si je crée un nouveau nœud, les versions du package ne seront pas synchronisées avec les autres nœuds qui utilisent un miroir local.
Mike Purcell
Gère-t-il virt-clonecorrectement le chiffrement complet du disque? Cela signifie-t-il qu'il me demandera de décrypter mon pw avant de faire son truc?
un codeur
Je pense que cela sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"devrait lire sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"ou au moins sur mon dérivé debian sed se plaint d'un manquant /. Merci aussi pour l'info, mon virsh-clone ne fonctionnait tout simplement pas.
numéro9
3

Autre que "virt-clone", vous pouvez dupliquer la machine virtuelle de cette façon:

  1. Assurez-vous que la machine virtuelle existante (à dupliquer) est arrêtée.
  2. faire un "sudo virsh dumpxml <domid>" de la machine virtuelle existante et enregistrer le fichier xml de sortie.
  3. Modifiez la balise <name> sous la balise <domain>.
  4. Utilisez "uuidgen" pour générer un nouvel ID unique et utilisez-le pour modifier la balise <uuid> existante.
  5. Faites une copie des images virtuelles qcow existantes utilisées par la machine virtuelle (généralement stockées dans / var / lib / libvirt / images, mais pour être sûr, lisez simplement votre fichier XML pour l'emplacement exact). La commande est "sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2" et remplissez le nouveau fichier yyyy.qcow2 dans un fichier XML.
  6. Démarrez le nouveau vm: sudo virsh define new.xml
  7. Démarrez le nouveau domid: sudo virsh start <new_domid>


Peter Teoh
la source
0

Apparemment, virt-clone est la voie à suivre.

J'ai essayé de dupliquer le XML mais il n'apparaîtrait pas sous virt-manager.

Je me demande encore comment transférer un XML + .img vers un nouveau système qui disait ...

SyntaxeT3rr0r
la source
0

La commande suivante a fonctionné pour moi (je dois arrêter VSA / Vm avant d'exécuter la commande)

# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone
vishu
la source
1
Mis à part les noms de pseudo VM, cela est identique à la commande de la réponse de trois ans - mais il manque les informations supplémentaires de cette réponse.
G-Man dit `` Réintègre Monica '' le
0

virt-clone --auto-clone ne semble pas bien jouer avec LVM. Je m'attendais à ce qu'il crée un instantané et l'utilise, mais à la place, il copie toutes les données.

Mieux vaut faire la route dumpxml / define; et n'oubliez pas de monter le système de fichiers racine du clone et de modifier les adresses IP et le nom d'hôte de manière appropriée avant de démarrer l'original et le clone.

Wombat
la source