How to decrease the size of a KVM virtual machine disk image?
Solution 1
Thanks to those who posted, but your answers were way too vague to be of any help.
After hours of Googling, I finally found a guide(link redacted) providing step-by-step instructions on how to shrink my filesystem, logical volumes, and physical volumes. The trick that most guides miss is the need to actually delete the physical partitions, and recreate them with the correct size, because parted is unable to resize lvm partitions.
I then found this documentation on qemu-img, which explains how to shrink a raw-formatted virtual disk image by running:
sudo qemu-img resize /var/lib/libvirt/images/myvm.img 255G
Solution 2
What you need to do,
- Take a backup
- Shrink the file system(s) *don't do this on a live system, I recommend using a live cd.
- Create a new disk image of desired size.
- Run a live os, with the new and old images attached as (virtual) hard disks (not mounted)
- Create the new partition(s) the same size as the resized partitions on the old disk
- Use dd to mirror the data to the new partition.
- You'll possibly need to purge / regenerate grub(2) to boot successfully.
This can be accomplished through both GUI and CLI
Resources
- fdisk partitioning - http://linux.die.net/HOWTO/Partition/fdisk_partitioning.html
- dd man page - http://linux.die.net/man/1/dd
Tools
- gparted ( link omitted due to Spam, not enough rep )
Solution 3
This worked really well for me. It compresses and shrinks the 0 blocks in the disk image. The image will expand over time as it's over written to again.
qemu-img convert -c -O qcow2 vmdisk.qcow2 vmdisk-comp.qcow2
Related videos on Youtube
Cerin
Updated on September 18, 2022Comments
-
Cerin almost 2 years
How do you decrease or shrink the size of a KVM virtual machine disk?
I allocated a virtual disk of 500GB (stored at /var/lib/libvirt/images/vm1.img), and I'm finding that overkill, so now I'd like to free up some of that space for use with other virtual machines. There seems to be a lot answers on how to increase image storage, but not decrease it. I found the virt-resize tool, but it only seems to work with raw disk partitions, not disk images.
Edit: I'm using an LVM with an Ext4 formatted partition.
Edit: GParted screenshot showing my LVM parition layout. I need to do a lot more then just resize the filesystem. I know of no safe way to resize an LVM. And please don't tell me to use
pvresize
. Despite its name, it does not support resizing LVMs.I did try
sudo pvresize /dev/vda5
, but it just saysphysical volume "/dev/vda5" changed
but doesn't actually reduce the size.I tried start
parted
to manually set the partition size (very dangerous), but doingprint all
just gives me the error "/dev/sr0 unrecognised disk label".Edit: By following these instructions, I was able to successfully shrink both my logical and physical volumes (although I had to remember to activate and deactivate lvm before and after certain commands, which the instructions omit.
Now GParted is showing 250G of unallocated free space. How do I remove this from the KVM disk image and give it back to the underlying hypervisor?
-
Ansgar Wiechers over 11 yearsDo you actually need to downsize the virtual disk, or would compacting it suffice? You could do the latter with something like
qemu-img -O qcow2 vm1.img vm1-compact.qcow2
. -
Cerin over 11 years@AnsgarWiechers, Yes, I still need to use the disk, and I've allocated far more space than I'll ever need.
-
-
Michael Hampton over 11 yearsHe is trying to make the image smaller, not larger.
-
Cerin over 11 yearsThe hard part is "Shrink the filesystem". I'm using an LVM, which no tool I've found support resizing. Not even a GParted Live CD.
-
Farooq Knights over 11 yearsI think this covers it, I've not used it so please report good or bad tcpdump.com/kb/os/linux/lvm-resizing-guide/shrink.html
-
Ansgar Wiechers over 11 yearsThere are 2 main points to observe: 1) Do things in order (first shrink the filesystem, then shrink the partition, then shrink the disk). 2) The procedure/tools for resizing a filesystem depend heavily on the actual filesystem (which the OP chose not to reveal). The article @daxroc posted won't work for filesystems other than ext[234].
-
Cerin over 11 years@daxroc, I need to reduce both the logical and physical volumes. Your link only covers reducing the logical volume.
-
David Corsalini over 11 yearsagreed. backup, new disk, restore is safest and easiest
-
Farooq Knights over 11 years@Cerin You would still need to mirror the re-sized partitions to a new image to reclaim the free space. You can use dd to accomplish this.
-
Cerin over 11 years@daxroc, That's a bit complicated solution. See my post below about simply using
qemu-img resize
. -
Farooq Knights over 11 yearsYes and no, Once you have completed the task a few times it does get easier / mostly can be scripted. Will definitely try qemu-img (+1)
-
Louis Loudog Trottier over 6 yearsqemu-img is a great tools when it comes to working with disk images for kvm. 3 years later your link seems broken, here the manual page from die.net linux.die.net/man/1/qemu-img
-
oemb1905 about 5 yearsAnd if anyone wants this convenience, and is stuck with (does not want) a .qcow2 VM, convert it first
qemu-img convert -f qcow2 -O raw image.qcow2 image.img
and then you can run the above command. -
Community over 2 yearsYour answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.