Correct way to move kvm vm
Solution 1:
- copy the VM's disks from
/var/lib/libvirt/images
on src host to the same dir on destination host - on the source host run
virsh dumpxml VMNAME > domxml.xml
and copy this xml to the destination host - on the destination host run
virsh define domxml.xml
start the VM.
- If the disk location differs, you need to edit the xml's devices/disk node to point to the image on the destination host
-
If the VM is attached to custom defined networks, you'll need to either edit them out of the xml on the destination host or redefine them as well
- On source machine
virsh net-dumpxml NETNAME > netxml.xml
- copy netxml.xml to target machine
- On target machine
virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME
)
- On source machine
Solution 2:
Since I can't comment yet, I have to post this addendum to dyasny's answer this way.
If the VM has snapshots that you want to preserve, you should dump the snapshot xml-files on the source with virsh snapshot-dumpxml $dom $name > file.xml
for each snapshot in the snapshot list of the VM virsh snapshot-list --name $dom
.
Then on the destination use virsh snapshot-create --redefine $dom file.xml
to finish migrating the snapshots.
If you also care about which snapshot is the current one, then additionally do on the source:virsh snapshot-current --name $dom
and on the destination:virsh snapshot-current $dom $name
Then you can use virsh snapshot-delete --metadata $dom $name
for each snapshot to delete the xml files on the source, or you could just delete them from /var/lib/libvirt/qemu/snapshots/$guestname
Sources:
libvirt-users mailing list
http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/
Solution 3:
Yes, just copying the XML file and the virtual disk images is sufficient, but this obviously precludes a "live" migration. The VM must be shut off during this procedure.
Once copied to the destination, libvirtd
must be reloaded or restarted to recognize the new XML file.