
Running Out of Space? A Guide to Safely Extending Your KVM Virtual Machine Disk
One of the most common challenges in managing virtual environments is a virtual machine (VM) running out of disk space. Whether it’s due to growing application data, system logs, or user files, a full disk can bring critical services to a halt. Fortunately, with KVM (Kernel-based Virtual Machine), increasing a VM’s disk size is a straightforward process if you follow the correct steps.
This guide will walk you through the entire process, from resizing the virtual disk file on the host system to making that new space available inside your guest operating system.
Before You Begin: The Golden Rule of Data Management
Before making any changes to disk structures, the single most important step is to create a complete backup of your virtual machine. While the process outlined here is generally safe, unexpected issues can occur. A reliable backup is your safety net, ensuring you can restore your VM to its previous state if anything goes wrong.
You should also shut down the virtual machine before proceeding. While online resizing is sometimes possible, performing these operations on an offline VM is significantly safer and prevents potential data corruption.
Step 1: Resizing the Virtual Disk on the KVM Host
The first phase of the operation happens on the KVM host server—the physical machine where your VM lives. Here, you will increase the maximum size of the virtual disk file (e.g., a .qcow2 or .img file).
The primary tool for this is qemu-img. You’ll need to know the full path to your VM’s disk image.
To add a specific amount of space, use the + syntax. For example, to add 20 gigabytes to a disk, you would run:
qemu-img resize /path/to/your/vm-disk.qcow2 +20G
This command instructs QEMU to increase the virtual disk’s maximum capacity by 20GB. The operation is usually instantaneous for formats like qcow2 because it only modifies the disk’s metadata, not the actual file size on the host’s filesystem (which will grow as the guest writes data).
If you manage your VMs with libvirt, you can also use the virsh command, which is often a more integrated approach. The equivalent command would be:
virsh blockresize your_vm_domain --path /path/to/your/vm-disk.qcow2 --size NEW_TOTAL_SIZE
Make sure to replace NEW_TOTAL_SIZE with the final desired size, for example, 80G.
After this step, the virtual disk container is larger, but the operating system inside the VM is not yet aware of the new space.
Step 2: Resizing the Partition and Filesystem Inside the Guest VM
Now that the virtual hard drive has been expanded, you need to boot up your VM and configure the guest operating system to recognize and use the additional space.
1. Start Your Virtual Machine
Power on the VM and log in with administrative or root privileges.
2. Identify the Disk and Partition
First, you need to verify that the kernel sees the larger disk. You can use tools like lsblk or fdisk -l to inspect your block devices.
lsblk
You should see that the disk (e.g., vda or sda) now reports its new, larger size, but the partition on it (e.g., vda1) is still the original, smaller size.
3. Extend the Partition
The next step is to extend the partition to fill the newly available unallocated space. The growpart utility is the simplest and safest tool for this task. It is available in the cloud-utils-growpart package on most Linux distributions.
The command syntax is growpart <device> <partition_number>. For example, to extend the first partition on the disk vda, you would run:
growpart /dev/vda 1
This command will automatically resize the specified partition to fill all available contiguous space on the disk without requiring manual partition table editing.
4. Resize the Filesystem
Finally, you must resize the filesystem on the partition to make the new space usable for storing files. The command depends on the type of filesystem you are using.
For ext2, ext3, or ext4 filesystems: Use the
resize2fscommand.resize2fs /dev/vda1For XFS filesystems: Use the
xfs_growfscommand. Note that this command requires the mount point of the filesystem, not the device path.xfs_growfs /(Replace
/with the correct mount point if it’s not the root filesystem.)
5. Verify the Results
Once the filesystem has been resized, you can confirm the operation was successful using the df -h command.
df -h
The output should now show the new, larger size for your partition, and the extra space will be immediately available for use.
What About LVM (Logical Volume Management)?
If your guest VM uses LVM, the process involves a few extra steps after extending the partition with growpart.
- Resize the Physical Volume: Tell LVM to scan for the new space on the physical disk with
pvresize.
bash
pvresize /dev/vda2 # Assuming vda2 is your LVM physical volume
- Extend the Logical Volume: Use
lvextendto add the new space to the specific logical volume you want to grow. You can add all available free space.
bash
lvextend -l +100%FREE /dev/mapper/your_volume_group-your_logical_volume
- Resize the Filesystem: Finally, resize the filesystem on the logical volume, just as described in the previous section (
resize2fsorxfs_growfs).
By following these carefully outlined steps, you can confidently and safely expand your KVM virtual machine’s storage, ensuring your applications and services continue to run without interruption.
Source: https://kifarunix.com/easy-way-to-extend-kvm-virtual-machine-disk-size/


