Is it possible to re-shrink the .qcow2 image files?

Over the course of many system upgrades, logging, etc. the image files have grown substantially. I have deleted as much of such files as I can to drop their sizes back down to about 5 gigs, but their usage on disk still stands at about twice that amount. I am guessing that they must have “grown” to accommodate the data needed, but is there a way I can shrink them back?

yes. for your whonix images, you can use a tool called zerofree free to work, since the disks are ext4 partitions. it’s a little bit involved. but this is how i’ve gotten the best results:

  1. install the package “zerofree” in the virtual machine you want to shrink.
  2. erase what you need in the vm, run apt-get purge, apt-get autoremove, apt-get clean, etc. as needed.
  3. reboot your virtual machine in recovery mode.
  4. at the command prompt, type “systemctl stop systemd-journald.socket && systemctl stop systemd-journald.service && mount -o remount,ro / && zerofree -v /dev/vda1 && shutdown now”
  5. when the vm shuts down, open a terminal on your host.
  6. switch to root. type “sudo -s”
  7. type “cd /var/lib/libvirt/images”
  8. create a back up of the disk you want to shrink. type “mv YourVirtualMachineDisk.qcow2 YourVirtualMachineDisk.qcow2.backup”
  9. shrink the disk. type “qemu-img convert -o qcow2 -p YourVirtualMachineDisk.qcow2.backup YourVirtualMachineDisk.qcow2”
  10. boot up the vm and see if it is working. if it is, you can delete the backup of the qcow file.

there are ways you can get more creative with this using thin provisioned images that are based on a static qcow2 backing file. that’s the method i prefer. but, the above is a basic method for getting a shrunken qcow2 disk file.

1 Like

Would you like to add this to the Kicksecure wiki?

That’s a real long standing thing asked every now and then that is missing in the wiki.

https://phabricator.whonix.org/T64

Where does this belong on both wikis?

only 1 wiki might be sufficient, new wiki page:

1 Like

Added and credited. Thanks @tempest for sharing.

1 Like

this is actually much simpler now in KVM. zerofree runs and the other commands are no longer required. it basically just requires one to set the “discard” flag on a mount option for the disk in question and then set “discard mode” to “unmap” in virt-manager. for example:

  1. in /etc/fstab, set the following for root:
    “/dev/disk/by-uuid/XXXXXX-blah-blah-YourdiskUUID / auto defaults,errors=remount-ro,discard 0 1”

  2. in the “virt-manager” program, click on the virtual machine in question, open the virtual machine in question, click on the lightbulb icon to get to its settings, click on the storage disk in question and go to the “advanced options.” then, next to “discard mode,” choose “unmap.”

the disk will no longer balloon. unused diskspace will get released naturally, or can be forced with the “sudo fstrim -av” command.

1 Like

was the part of the command in recovery mode actually supposed to be zerofree -v /dev/vda3? when i ran the command in the wiki, which specified vda1, it just said that zerofree could not open the filesystem. i went ahead and continued with the instructions anyway, and my disk was still able to be shrunk, and it boots fine. the weird part is, the space doesnt actually seem to be restored on my harddrive. running df -h in my Whonix guest actually shows the large partition to be vda3, and even stranger is that the ‘used’ space is 8.7 GB, while the qcow2 image now says it’s 5.5 GB. I think I should have used tempest’s latest instructions directly above this post, but i didnt see it until after i completed the wiki instructions.

Let us know if Tempest’s instructions have the desired effect on your VM and please add it to our wiki so the next user could apply a working solution instead of it being lost in the forums threads