This patch adds the reduction of the image file for qcow2. As a result, this allows us to reduce the virtual image size and free up space on the disk without copying the image. Image can be fragmented and reduction is done by punching holes in the image file.
# ./qemu-img create -f qcow2 -o size=4G image.qcow2 Formatting 'image.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16 # ./qemu-io -c "write -P 0x22 0 1G" image.qcow2 wrote 1073741824/1073741824 bytes at offset 0 1 GiB, 1 ops; 0:00:02.59 (395.180 MiB/sec and 0.3859 ops/sec) # ./qemu-img resize image.qcow2 128M Image resized. # qemu-img info image.qcow2 image: image.qcow2 file format: qcow2 virtual size: 128M (134217728 bytes) disk size: 128M cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false # du -h image.qcow2 129M image.qcow2 Pavel Butsykin (2): qcow2: add reduce image support qemu-iotests: add reducing image test in 025 block/qcow2-cache.c | 8 +++++ block/qcow2-cluster.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ block/qcow2-refcount.c | 65 ++++++++++++++++++++++++++++++++++++ block/qcow2.c | 40 ++++++++++++++++------ block/qcow2.h | 4 +++ qapi/block-core.json | 4 ++- tests/qemu-iotests/025 | 19 +++++++++-- tests/qemu-iotests/025.out | 12 ++++++- 8 files changed, 221 insertions(+), 14 deletions(-) -- 2.11.0