The Linux Logical Volume Manager (LVM) provides a relatively easy way to combine block devices into a pool of storage that you can allocate storage out of. In LVM terminology, there are three main concepts:
When you use LVM to manage your storage, you will typically do something similar to this when new storage requests are made:
With this approach you can end up with free space in one or more physical volumes or one or more volume groups depending on how you provisioned the storage. To see how much free space your physical volumes have you can run the pvs utility without any arguments:
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a-- 8.51g 0
/dev/sdb DataVG lvm2 a-- 18.00g 18.00g
/dev/sdc DataVG lvm2 a-- 18.00g 184.00m
The “PFree” column shows the free space for each physical volume in the system. To see how much free space your volume groups have you can run the vgs utility without any arguments:
$ vgs
VG #PV #LV #SN Attr VSize VFree
DataVG 2 1 0 wz--n- 35.99g 18.18g
VolGroup 1 2 0 wz--n- 8.51g 0
In the vgs output the “VFree” column shows the amount of free space in each volume group. LVM is nice, but I’m definitely a ZFS fan when it comes to storage management. I’m hopeful that Oracle will come around and port ZFS to Linux, since it would benefit a lot of users and hopefully help to repair some of the broken relations between Oracle and the opensource community. I may be too much of an optimist though.