comment renommer une machine virtuelle à l'aide de libvirt + KVM

24

Comment renommer une VM sur KVM + libvirt?

Je voudrais qu'il change le nom dans l'inventaire ainsi que le nom du stockage, etc.

Arthur Ulfeldt
la source
3
après avoir posé cette question, les gens du projet libvirt ont ajouté la commande «virsh edit my-vm-name».
Arthur Ulfeldt

Réponses:

18

courir

virsh dumpxml name_of_vm > name_of_vm.xml

Annulez la définition de l'ancien VM pour éviter une erreur en raison d'un UUID en double.

virsh undefine name-of-vm

Modifiez le fichier xml puis importez-le.

virsh define name_of_vm.xml

Bien sûr, vous devrez arrêter et démarrer le VM pour que les modifications prennent effet

virsh destroy name_of_vm
virsh start name_of_vm
topdog
la source
5
besoin d'ajouter une étape: (avant de définir le vm avec le nouveau nom) "virsh undefine name-of-vm" sinon il se plaint de dupliquer l'UUID.
Arthur Ulfeldt
1
j'ai également dû renommer le fichier hd.img et modifier la ligne dans le fichier xml
Arthur Ulfeldt
L'ordre correct est dans l'autre réponse. Vous n'avez pas à renommer img si vous n'utilisez pas l'ancienne machine.
Nux
1
Cette réponse est désormais obsolète. Voir ma réponse ci-dessous. tldr; virsh a maintenant un nom de domaine.
reedstrm
13

virshimplémenté domrenamedans la version 1.2.19: 02 septembre 2015. La meilleure pratique actuelle est donc simplement:

 virsh domrename oldname newname

Comme vous pouvez vous y attendre, le domaine doit être arrêté, mais il ne peut pas non plus avoir de clichés.

reedstrm
la source
+1 - vous pouvez virsh edit newnameet changer le chemin du fichier et mv oldname newnamerenommer le répertoire si vous voulez que tout corresponde.
pause jusqu'à nouvel ordre.
en d'autres termes, vous devez également 1) renommer /var/lib/libvirt/images/oldname.qcow2 dans /var/lib/libvirt/images/newname.qcow2; et 2) éditez /etc/libvirt/qemu/newname.xml pour définir le fichier source correct balise <source file = '/ var / lib / libvirt / images / newname.qcow2'
MaxiReglisse
mais seulement si vous avez besoin que les noms de fichiers correspondent aux noms de domaine (ce qui, je l'avoue, est pratique) - cela évite un cycle de destruction / création, mais nécessite toujours un arrêt (et pas d'instantanés)
reedstrm
5

Pour changer de nombreuses machines, vous pouvez utiliser ceci:

virsh shutdown old-name

Attendez ci-dessus pour terminer et exécuter:

virsh dumpxml old-name > old-name.xml
virsh undefine old-name

Attendez ci-dessus pour terminer et exécuter:

sed -i 's/<name>old-name<\/name>/<name>new-name<\/name>/g' old-name.xml
virsh define old-name.xml

Exécutez-le un par un pour chaque machine. Vous pouvez utiliser ce RegExp si vous avez une liste contenant old-name new-name:

([^\r\n]+?)[ \t]+([^\r\n]+)
virsh shutdown $1\n#WAIT!\nvirsh dumpxml $1 > $1.xml\nvirsh undefine $1\n\#WAIT!\nsed -i 's/<name>$1<\\/name>/<name>$2<\\/name>/g' $1.xml\nvirsh define $1.xml\n
Nux
la source
0

Je le fais un peu différemment et peut être une méthode non recommandée (pas sûr).

virsh destroy old-vm virsh edit old-vm

Dans le changement XML

  1. nom de domaine ancien-vm à nouveau-vm
  2. changer un caractère / chiffre dans la sauvegarde et la sortie de l'UUID.

virsh list --all

1 arrêt old-vm

2 nouveaux vm d'arrêt

Maintenant, définissez l'ancien vm

virsh undefine old-vm

Geai
la source