[libvirt] server side copy from one volume to another

Michal Privoznik mprivozn at redhat.com
Tue Apr 18 11:31:11 UTC 2017


On 04/18/2017 01:03 PM, Vasiliy Tolstov wrote:
> 2017-04-18 8:39 GMT+03:00 Michal Privoznik <mprivozn at redhat.com>:
>> s that right? Here I'm successfully cloning a volume across two storage pools:
>
>
> Yes, it works but....
> Source image:
> image: /var/lib/libvirt/images/sda/143177
> file format: qcow2
> virtual size: 5.0G (5368709120 bytes)
> disk size: 902M
> cluster_size: 65536
> Format specific information:
>     compat: 0.10
>     refcount bits: 16
>
> Dest image:
> image: /var/lib/libvirt/images/sda/test
> file format: qcow2
> virtual size: 5.0G (5368709120 bytes)
> disk size: 902M
> cluster_size: 65536
> Format specific information:
>     compat: 0.10
>     refcount bits: 16
>
>
> But
> -rw------- 1 root 908M Apr 18 13:59 143177
> -rw------- 1 root 902M Apr 18 13:59 test
>
> Why size is changed on destination image? In case of cp
> --spwarse=always size does not changed.
>

That's because libvirt does not use `cp` to copy the disk images. We use 
qemu-img for copying. And we do not guarantee that the disk structure 
does not change. We guarantee that the data stored on the disk doesn't 
change. Otherwise we wouldn't be able to convert disk images.

NB, with sparse files - it's not as straightforward either. Some 
filesystems may decide that the hole is not big enough so they do 
allocate it actually. XFS is a very good example of such behaviour. So 
the data/hole structure of a file may not line up with the structure of 
a copy. Although, the data as read from the files are the same.

Michal




More information about the libvir-list mailing list