Live migration to another volume at the same host

Paul van der Vlis paul at vandervlis.nl
Thu Jun 11 23:11:00 UTC 2020


Op 11-06-2020 om 19:09 schreef Daniel P. Berrangé:
> On Thu, Jun 11, 2020 at 05:45:46PM +0200, Paul van der Vlis wrote:
>> Hello,
>>
>> I am looking for a way to migrate a VM live to another location.
>>
>> The qcow2 images are now on /data , but I want to move some of them to a
>> volume mounted on /data2 what's faster.
>>
>> Is this possible without downtime?
> 
> Yes, you don't need to use live migration for this even.
> 
> The "blockcopy" command can be used to copy contents of a VMs current
> disk into a new file. If you use the "--pivot" arg, then QEMU will
> switch to using the new file too.

Thank you for this information!

> eg something like this:
> 
>   $ virsh blockcopy rhel8x86_64 --transient-job --pivot \
>         --path /var/lib/libvirt/images/orig.img \
> 	--dest /var/lib/libvirt/images/new.img 

Hmm, I think I use an older version (3.0) what does not have the
"--transient-job" option. What I did now is this:

virsh dumpxml kvm25 > /home/paul/kvm25.xml
virsh undefine kvm25
virsh blockcopy kvm25 --pivot --verbose --format=qcow2 \
        --path /data/kvm25.qcow2 \
	--dest /data2/kvm25.qcow2
virsh dumpxml kvm25 > /home/paul/kvm25.xml2
virsh define /home/paul/kvm25.xml2

This all looks nice. The only thing I did not like is that the username
and group of /data/kvm25.qcow2 is still "libvirt-qemu". Normally this
changes to "root" when the image is not in use. But not in this case.

What I found interesting is that the destination file is a bit smaller
then the original file. Maybe it does some clean-up?

root at kvms12:/data# ls -l /data/kvm25.qcow2
-rw-r--r-- 1 libvirt-qemu libvirt-qemu 11531190272 jun 12 00:41
/data/kvm25.qcow2
root at kvms12:/data# ls -l /data2/kvm25.qcow2
-rw------- 1 libvirt-qemu libvirt-qemu 11277369344 jun 12 01:05
/data2/kvm25.qcow2

root at kvms12:/home/paul# diff /home/paul/kvm25.xml /home/paul/kvm25.xml2
34c34
<       <source file='/data/kvm25.qcow2'/>
---
>       <source file='/data2/kvm25.qcow2'/>

> If the file doesn't already exist, libvirt will create it. Having
> said that I'm not sure if it preserves format. So might need to
> pre-create files if you're using qcow2. Test it on a throw-away
> guest disk first ...

I've used "--format=qcow2" and I think that does the trick ;-)
I did not create an image on the destination.

With regards,
Paul van der Vlis

-- 
Paul van der Vlis Linux systeembeheer Groningen
https://www.vandervlis.nl/





More information about the libvirt-users mailing list