I use LVM to manage virtual disks on my Xen hypervisor. It’s mostly “set it and forget it”, but occasionally, the virtual disks get close to filling up. (Monitoring this with Nagios gives me plenty of warning!) When I’d rather not go through the filesystems and choose what to delete, or when I’ve already done that and they’re still too full, it’s really convenient to be able to just extend the disk. For this reason, I try to keep at least 1 TB of space unallocated on my hypervisor’s main LVM volume group.
Procedure
Let’s say I want to extend a 500 GB LV,
which shows up as /dev/xvda5
on a virtual machine called guest
. This LV
is called storage
on a hypervisor called host
, and storage
lives on a
VG called hard-disk
. I want to extend
storage
’s size to 750 GB.
First, I check that there’s enough free space on the VG (at least 250 GB, in this case):
host$ sudo vgdisplay hard-disk
--- Volume group ---
VG Name hard-disk
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 5
Open LV 5
Max PV 0
Cur PV 1
Act PV 1
VG Size 2.73 TiB
PE Size 4.00 MiB
Total PE 715396
Alloc PE / Size 460800 / 1.76 TiB
Free PE / Size 254596 / 994.52 GiB
For safety, I shut down guest
. (If guest
were running FreeBSD rather than
Debian, I would have used the -p
flag rather than -h
.)
guest$ sudo shutdown -h now
Once guest
has been shut down, I extend storage
’s LV size:
host$ sudo lvextend -L750G /dev/hard-disk/storage
The LV storage
is just a block device. The filesystem on top of it (ext4)
needs to be resized as well. But before that, I need to check the filesystem
for errors:
host$ sudo e2fsck -f /dev/hard-disk/storage
Now I can extend the filesystem to cover the entire LV. If I skipped this step,
the filesystem size wouldn’t be any different after starting guest
back up again,
despite the LV being larger.
host$ sudo resize2fs /dev/hard-disk/storage
Finally, I start up guest
, which involves this in my case:
host$ sudo xm create /etc/xen/guest.cfg
Once guest
is up, I can verify that storage
and the filesystem were extended
with df -h /dev/xvda5
. On host
, I can verify that the LV was extended with
sudo lvdisplay /dev/hard-disk/storage
.