On Wed, 11/04 16:37, Richard W.M. Jones wrote: > > This doesn't work (I tested both qemu 2.3 and qemu from git). Should it? > > (1) Create a non-sparse guest image: > > $ virt-builder fedora-22 > $ mv fedora-22.img fedora-22.img.sparse > $ cp --sparse=never fedora-22.img.sparse fedora-22.img > $ du -sh fedora-22.img > 6.1G fedora-22.img > > (2) Add a snapshot on top: > > $ qemu-img create -f qcow2 -o compat=1.1 -b fedora-22.img overlay.qcow2 > $ du -sh fedora-22.img overlay.qcow2 > 6.1G fedora-22.img > 196K overlay.qcow2 > > (3) Sparsify the overlay: > > $ virt-sparsify --in-place overlay.qcow2 > $ du -sh fedora-22.img overlay.qcow2 > 6.1G fedora-22.img > 3.2M overlay.qcow2 > > (4) Commit to the backing file: > > $ qemu-img commit overlay.qcow2 > Image committed. > $ du -sh fedora-22.img overlay.qcow2 > 6.1G fedora-22.img <------ > 260K overlay.qcow2 > > Notice that the backing file (fedora-22.img) doesn't get any smaller. > > I'm expecting the backing file to shrink to around 800 MB, which is > does if you run virt-sparsify directly on the backing file. >
I don't think this the purpose of "qemu-img commit". Committing "new" data in overlay.qcow2 has little to do with discarding backing image's fragments where there are only explict zeroes. However you can try qemu-img convert fedora-22.img fedora-22.img.1 as the last step, which I think will yield a sparse image. I don't think we have an in-place sparsifier now. Fam