This example takes olddisk.qcow2
and resizes it into newdisk.qcow2
,
extending one of the guest's partitions to fill the extra space.
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 guestfs-tools
package.
So just try a sudo pacman -Sy guestfs-tools
qemu-img create -f qcow2 -o preallocation=metadata newdisk.qcow2 50G
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
Done! Enjoy your new space!
If you want to create a raw disk instead of a qcow2 try following steps.
Note: This will create a new image newdisk.qcow2
with the given size.
truncate -r olddisk.qcow2 newdisk.qcow2
truncate -s +10G newdisk.qcow2
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
qemu-img info newdisk.qcow2
# image: newdisk.qcow2
# file format: raw
# virtual size: 50 GiB (53693907968 bytes)
# disk size: 36 GiB
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
@futpib
qemu-img
doesn't actually resize the partitions, it just resizes the "container". So really, when resizing partitions, runningqemu-img
is just preparation for runningvirt-resize
. That does resize the partitions, but cannot resize in-place.So there's no point in resizing your original image, because you're going to have to give
virt-resize
a separate "from" image (container size doesn't matter) and "to" image (container needs to be the new, larger size) to work with.So you might as well create a new, empty "to" image at the correct new size, then
virt-resize
from your (unchanged) old image to the (larger) new one, rather than resizing your source image (with or without a backup). Even if youqemu-resize
the source image, you still need a new destination image of the same size before runningvirt-resize
.