In order for this to work you will need RHEV versions of qemu-kvm. The versions included in CentOS7 (my platform) don’t support the blockcopy command in virsh.
Start by dumping the xml for the domain to somewhere you can grab it again later:
[root@kvmhost ~]# virsh dumpxml guest1 > /var/tmp/guest1.xml
Make sure the domain is not persistent:
[root@kvmhost ~]# virsh undefine guest1 Domain guest1 has been undefined
The actual migration (you may wish to check that you’re not overwriting the target, highlighted in red):
[root@kvmhost ~]# virsh blockcopy guest1 /kvm/guest1.img /var/lib/libvirt/images/storagehost-NFS4/guest1.img --wait --verbose --pivot Block Copy: [100 %] Successfully pivoted
Redefine the domain, double check it:
[root@kvmhost ~]# virsh define /var/tmp/guest1.xml Domain guest1 defined from /var/tmp/guest1.xml
[root@kvmhost ~]# virsh dominfo guest1 Id: 9 Name: guest1 UUID: e440e5bd-6d71-4807-a276-11477b764751 OS Type: hvm State: running CPU(s): 1 CPU time: 438.6s Max memory: 3145728 KiB Used memory: 3145728 KiB Persistent: yes Autostart: disable Managed save: no Security model: none Security DOI: 0
Verify that the source file is no longer the disk in use and erase the file (if you want):
[root@kvmhost ~]# lsof | grep /kvm/guest1.img [root@kvmhost ~]# rm /kvm/guest1.img rm: remove regular file ‘/kvm/guest1.img’? y
Done