Am 02.10.2020 um 00:57 hat Nir Soffer geschrieben:
After sparsifying disk:
storage:
$ qemu-img check /var/tmp/download.qcow2
No errors were found on the image.
170/163840 = 0.10% allocated, 0.59% fragmented, 0.00% compressed clusters
Image end offset: 11927552
$ ls -lhs /home/target/2/00
2.1G -rw-r--r--. 1 root root 100G Oct 2 01:14 /home/target/2/00
host:
# qemu-img check
/dev/27f2b637-ffb1-48f9-8f68-63ed227392b9/42cf66df-43ad-4cfa-ab57-a943516155d1
No errors were found on the image.
170/163840 = 0.10% allocated, 0.59% fragmented, 0.00% compressed clusters
Image end offset: 4822138880
Allocation decreased from 50% to 0.1%, but image end offset
decreased only from 5381423104 to 4822138880 (-10.5%).
I don't know if this is a behavior change in virt-sparsify or qemu or
it was always like that.
We had an old and unused sparsifyVolume API in vdsm before 4.4. This
did not use --in-place and was very complicated because of this. But I
think it would work in this case, since qemu-img convert will drop the
unallocated areas.
For example after downloading the sparsified disk, we get:
$ qemu-img check download.qcow2
No errors were found on the image.
170/163840 = 0.10% allocated, 0.59% fragmented, 0.00% compressed clusters
Image end offset: 11927552
Kevin, is this the expected behavior or a bug in qemu?
The disk I tested is a single qcow2 image without the backing file, so
theoretically qemu can deallocate all the discarded clusters.
This is expected. Discard just frees the cluster whereever it is stored,
but it doesn't compact the image, i.e. move data at higher offsets to
lower offsets (which would be a rather expensive operation).
If your storage supports thin provisioning/hole punching (the most
common case of this is sparse files on a filesystem), then you can use
the freed space for something else. If it doesn't, it's just marked free
on the qcow2 level and future writes to the image will allocate the
freed space first instead of growing the image, but you won't be able to
use it for things outside of the image.
In contrast, 'qemu-img convert' starts with an empty file and only
writes what needs to be written, so it will result in a compacted image
file that doesn't have holes and is as short as it can be.
Kevin