cómo cambiar el nombre de una VM usando libvirt + KVM

24

¿Cómo puedo cambiar el nombre de una VM en KVM + libvirt?

Me gustaría cambiar el nombre en el 'inventario', así como cambiar el nombre del almacenamiento, etc.

Arthur Ulfeldt
fuente
3
Después de hacer esta pregunta, la gente del proyecto libvirt agregó el comando 'virsh edit my-vm-name'.
Arthur Ulfeldt

Respuestas:

18

correr

virsh dumpxml name_of_vm > name_of_vm.xml

Defina el antiguo vm para evitar un error debido a un UUID duplicado.

virsh undefine name-of-vm

Edite el archivo xml y luego impórtelo.

virsh define name_of_vm.xml

Por supuesto, tendrá que detener e iniciar el vm para que los cambios surtan efecto.

virsh destroy name_of_vm
virsh start name_of_vm
mandamás
fuente
55
necesita agregar un paso: (antes de definir el vm con el nuevo nombre) "virsh undefine name-of-vm" de lo contrario se queja de UUID duplicado.
Arthur Ulfeldt
1
También tuve que cambiar el nombre del archivo hd.img y editar la línea en el archivo xml
Arthur Ulfeldt
El orden correcto está en la otra respuesta. No tiene que cambiar el nombre de img si no utiliza la máquina anterior.
Nux
1
Esta respuesta ahora está desactualizada. Vea mi respuesta a continuación. tldr; virsh ahora tiene domrename.
Reedstrm
13

virshimplementado domrenameen la versión 1.2.19: 02 de septiembre de 2015. Por lo tanto, la mejor práctica actual es solo:

 virsh domrename oldname newname

Como es de esperar, el dominio debe detenerse, pero tampoco puede tener instantáneas.

Reedstrm
fuente
+1: puede virsh edit newnamecambiar la ruta del archivo y mv oldname newnamecambiar el nombre del directorio si desea que todo coincida.
Pausado hasta nuevo aviso.
en otras palabras, también debe 1) cambiar el nombre de /var/lib/libvirt/images/oldname.qcow2 en /var/lib/libvirt/images/newname.qcow2; y 2) edite /etc/libvirt/qemu/newname.xml para configurar el archivo fuente correcto balise <source file = '/ var / lib / libvirt / images / newname.qcow2'
MaxiReglisse
pero solo si necesita que los nombres de archivo coincidan con los nombres de dominio (lo cual admito, es conveniente), esto evita un ciclo de destrucción / creación, aunque aún requiere una parada (y no instantáneas)
reedstrm
5

Para cambiar muchas máquinas puedes usar esto:

virsh shutdown old-name

Espera a que termine lo anterior y ejecuta:

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

Espera a que termine lo anterior y ejecuta:

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

Ejecute esto uno por uno para cada máquina. Puede usar este RegExp si tiene una lista que contiene 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
fuente
0

Lo hago un poco diferente y puede ser un método no recomendado (no estoy seguro).

virsh destroy old-vm virsh edit old-vm

En el cambio XML

  1. nombre de dominio old-vm a new-vm
  2. cambiar un char / dígito en UUID guardar y salir.

virsh list --all

1 apagado de vm antiguo

2 nuevas vm apagado

Ahora indefinir el viejo vm

virsh undefine old-vm

Arrendajo
fuente