A virtual machine's disk may have to be resized, typically due to lack of space. This page explains how to do so.
Please ensure that the virtual machine using the virtual disk to be resized is turned off
Let's assume that you wish to increase the size of the virtual machine called guest.
# virsh list --all
Id Name State
----------------------------------------------------
1 guest running
# virsh shutdown guest
# virsh list --all
Id Name State
----------------------------------------------------
1 guest shut off
It is now safe to proceed to the next step
It is advisable to make a backup first.
# cd /var/lib/libvirt/images
# cp guest.img backup_guest.img
In-place expansion is not supported. A new disk of the desired size has to be created, and then swap with the former disk.
# cd /var/lib/libvirt/images
guest_20G.img# qemu-img create -f raw guest_20G.img 20G
guest.img, which is ext4-based# virt-filesystems -a guest.img -l -h
Name Type VFS Label Size Parent
/dev/vda1 filesystem vfat EFI 1.3G -
/dev/vda2 filesystem ext4 boot 3.6G -
/dev/vda3 filesystem ext4 root 10G -
# virt-filesystems -a bazzite-desktop.img -l -h
Name Type VFS Label Size Parent
/dev/sda1 filesystem vfat - 599M -
/dev/sda2 filesystem ext4 bazzite_xboot 1.9G -
/dev/sda3 filesystem btrfs bazzite 37G -
btrfsvol:/dev/sda3/root filesystem btrfs bazzite - -
btrfsvol:/dev/sda3/home filesystem btrfs bazzite - -
btrfsvol:/dev/sda3/var filesystem btrfs bazzite - -
Thanks to the label on the ext4-based based image, one can tell that the root partition is /dev/vda3. This is the one that will need to be expanded. For the btrfs example, the root partition /dev/sda3as shown by btrfsvol:/dev/sda3/root
This command is capable of expanding different kinds of filesystems, including
ext4andbtrfs
The command takes the new empty disk as last argument.
Data could be erased if you mix argument!
# virt-resize --expand /dev/vda3 guest.img guest_20G.img
[ 0.0] Examining guest_20G.img
**********
Summary of changes:
/dev/vda1: This partition will be left alone.
/dev/vda2: This partition will be left alone.
/dev/vda3: This partition will be resized from 10G to 20G. The
filesystem ext4 on /dev/vda3 will be expanded using the ‘resize2fs’
method.
**********
[ 2.1] Setting up initial partition table on guest_20G.img
[ 12.9] Copying /dev/vda1
[ 13.1] Copying /dev/vda2
[ 13.4] Copying /dev/vda3
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 38.3] Expanding /dev/vda3 using the ‘resize2fs’ method
Resize operation completed with no errors. Before deleting the old disk,
carefully check that the resized disk boots and works correctly.
Now that the new disk has been created, it can be used in the virtual machine.
# virsh edit guest
Locate the source line for the existing disk guest.img:
[...]
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
<source file='/var/lib/libvirt/images/guest.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</disk>
[...]
Edit the said line so that it points to the new disk guest-20G.img:
[...]
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
<source file='/var/lib/libvirt/images/guest-20G.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</disk>
[...]
Start the virtual machine and ensure that it is working properly. If it does, the former disk could be removed.
As per the software description : "qemu-img allows you to create, convert and modify images offline. It can handle all image formats supported by QEMU."
On Fedora-related distributions, virt-resize is provided by the guestfs-tools package :
# dnf install guestfs-tools