we are using kvm/qemu with qcow2-images for our virtual machines.

qcow2 has this nice feature where the image file only allocates the actually needed space by the virtual-machine. but how do i shrink back the image file, if the virtual machine's allocated space gets smaller?

example:

1.) i create a new image with qcow2 format, size 100GB

2.) i use this image to install ubuntu. installation needs about 10 gb, the image-file grows up to about 10GB. nothing unexpected so far.

3.) i fill up the image with about 40 GB of additional data. the image-file grows up to 50GB. i am ok with that :-)

4.) this is where it gets strange: i delete all of the 40GB data on the image, but the image-size still eats up 50GB.

question: how do i free up that 40GB of data and shrink the image to the only needed 10 GB?

thanks in advance, berni

link|improve this question

feedback

1 Answer

up vote 2 down vote accepted

The image will not shrink automatically, since when you delete files, you don't actually delete data (this is why undelete works). Qemu has a facility to shrink qcow2 images back, but what the utility does is really deduplicate the zeroes from the disk, leaving all other information intact. So the idea would be to:

  1. Zero-fill the drive (dd if=/dev/zero of=/some/file until you run out of space)
  2. delete /some/file
  3. shut down the VM
  4. cd to where the images for the VM are kept and run qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. change the VM settings to use the new deduplicated_image.qcow2, test the VM is working, and remove the old image

This, afaik, will only work with qcow2 images, I haven't tested other formats.

link|improve this answer
ah, ok. this was very helpful - thank you! – bmaeser Nov 10 '11 at 18:09
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.