how to rename a VM using libvirt+KVM
Solution 1:
run
virsh dumpxml name_of_vm > name_of_vm.xml
Undefine the old vm to prevent an error because of an duplicate UUID.
virsh undefine name-of-vm
Edit the xml file then import it.
virsh define name_of_vm.xml
Of course you will have to stop and start the vm for the changes to take effect
virsh destroy name_of_vm
virsh start name_of_vm
Solution 2:
virsh dumpxml myvm > foo.xml
<edit foo.xml, change the name, move storage>
virsh undefine myvm
virsh define foo.xml
Source: https://www.redhat.com/archives/libvirt-users/2010-October/msg00072.html
Solution 3:
virsh
implemented domrename
in release 1.2.19: Sep 02 2015. So the current best practice is just:
virsh domrename oldname newname
As you might expect, thedomain must be stopped, but also it cannot have any snapshots.
Solution 4:
To change many machines you can use this:
virsh shutdown old-name
Wait for above to finish and run:
virsh dumpxml old-name > old-name.xml
virsh undefine old-name
Wait for above to finish and run:
sed -i 's/<name>old-name<\/name>/<name>new-name<\/name>/g' old-name.xml
virsh define old-name.xml
Run this one-by-one for each machine. You can use this RegExp if you have a list containing 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