Skip to content

Instantly share code, notes, and snippets.

@joseluisq
Last active October 8, 2024 14:41
Show Gist options
  • Save joseluisq/2fcf26ff1b9c59fe998b4fbfcc388342 to your computer and use it in GitHub Desktop.
Save joseluisq/2fcf26ff1b9c59fe998b4fbfcc388342 to your computer and use it in GitHub Desktop.
How to resize a qcow2 disk image on Linux

How to resize a qcow2 disk image on Linux

This example takes olddisk.qcow2 and resizes it into newdisk.qcow2, extending one of the guest's partitions to fill the extra space.

1. qcow2 format

1.1. Verify the filesystems of olddisk.qcow2

virt-filesystems --long -h --all -a olddisk.qcow2
# Name       Type        VFS   Label            MBR  Size  Parent
# /dev/sda1  filesystem  ntfs  System Reserved  -    50M   -
# /dev/sda2  filesystem  ntfs  -                -    39G   -
# /dev/sda3  filesystem  ntfs  -                -    513M  -
# /dev/sda1  partition   -     -                07   50M   /dev/sda
# /dev/sda2  partition   -     -                07   39G   /dev/sda
# /dev/sda3  partition   -     -                27   513M  /dev/sda
# /dev/sda   device      -     -                -    60G   -

Tip: On ArchLinux the virt-filesystems tool is under the libguestfs package. So just try a sudo pacman -Sy libguestfs

1.2. Create a newdisk.qcow2 disk image with the new size (E.g 50GB)

qemu-img create -f qcow2 -o preallocation=metadata newdisk.qcow2 50G

1.3. Perform the resizing from old disk image to newdisk.qcow2

Note: "/dev/sda2" is a partition inside the olddisk.qcow2 file which we want to resize.

virt-resize --expand /dev/sda2 olddisk newdisk.qcow2

Done! Enjoy your new space!

2. Raw format (optional alternative)

If you want to create a raw disk instead of a qcow2 try following steps.

2.1. Extend the size of olddisk.qcow2 to the specified size (E.g +10GB)

Note: This will create a new image newdisk.qcow2 with the given size.

truncate -r olddisk.qcow2 newdisk.qcow2
truncate -s +10G newdisk.qcow2

2.2. Apply resizing

Note: "/dev/sda2" is a partition inside the olddisk.qcow2 file which we want to resize.

virt-resize --expand /dev/sda2 olddisk.qcow2 newdisk.qcow2

2.3. Quick inspection of new disk image

qemu-img info newdisk.qcow2
# image: newdisk.qcow2
# file format: raw
# virtual size: 50 GiB (53693907968 bytes)
# disk size: 36 GiB

2.4. Verify that the filesystems have grown as expected

virt-filesystems --long -h --all -a newdisk.qcow2
# Name       Type        VFS   Label            MBR  Size  Parent
# /dev/sda1  filesystem  ntfs  System Reserved  -    50M   -
# /dev/sda2  filesystem  ntfs  -                -    49G   -
# /dev/sda3  filesystem  ntfs  -                -    513M  -
# /dev/sda1  partition   -     -                07   50M   /dev/sda
# /dev/sda2  partition   -     -                07   49G   /dev/sda
# /dev/sda3  partition   -     -                27   513M  /dev/sda
# /dev/sda   device      -     -                -    50G   -

For more details and examples please take a look at the official documentation: https://libguestfs.org/virt-resize.1.html

@tek-aevl
Copy link

tek-aevl commented Jul 8, 2022

sudo: virt-filesystems: command not found

@gabrielsond
Copy link

sudo: virt-filesystems: command not found

On Arch, https://aur.archlinux.org/packages/guestfs-tools includes virt-filesystems

@tek-aevl
Copy link

Thanks

@sgzerolc
Copy link

Magic!

@Ruivalim
Copy link

Ruivalim commented Nov 23, 2022

If anyone has problems with the Ubuntu cloud images, that the boot breaks after resize, this post helped me: https://serverfault.com/questions/976792/how-to-fix-partition-table-after-virt-resize-rearranges-it-kvm

@brunurd
Copy link

brunurd commented Jan 17, 2023

there's a error in 1.3. topic, the olddisk should be olddisk.qcow2:

virt-resize --expand /dev/sda2 olddisk.qcow2 newdisk.qcow2

@enoy19
Copy link

enoy19 commented Apr 28, 2023

sudo: virt-filesystems: command not found

For Fedora:

sudo dnf install guestfs-tools

You might find it using: dnf whatprovides virt-filesystems

@easycodesnipper
Copy link

Update with latest revision with LVM extend support. refer to https://gist.github.com/easycodesnipper/0ad61414431e5c34807181feb7e2757b

@isumix
Copy link

isumix commented Dec 17, 2023

Tip: On ArchLinux the virt-filesystems tool is under the libguestfs package. So just try a sudo pacman -Sy libguestfs

As mentioned by @gabrielsond, the guestfs-tools package should be installed, NOT libguestfs, please correct.

@futpib
Copy link

futpib commented Feb 11, 2024

Why not just do this?

cp macOS.qcow2 macOS-backup.qcow2
qemu-img resize macOS.qcow2 +100G

@vpatel95
Copy link

vpatel95 commented Sep 18, 2024

In case anyone is updating cloud-img, and run into grub rescue Try following

Identify the partition using virt-filesystems and install grub on that new partition. /dev/sda is just and example

virt-customize -a newdisk.qcow2 --run-command 'grub-install /dev/sda'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment