Logical Volume Manager (LVM) is an advanced storage management feature that offers more flexibility than traditional disk partitioning. A key advantage of LVM is the ability to easily resize logical volumes, which was difficult with traditional partitions.
I personally use LVM to partition my /
and /home
into two separate logical volumes.
Key Concepts
There are 3 concepts that LVM manages, organized in a hierarchy:
- Physical volumes: lowest-level of building block
- Volume groups: are collections of physical volumes. This abstraction is useful if we have multiple disks and we want to combine them into a single group
- Logical volumes: created from volume groups, analogous to partitions
Physical Volumes
A physical volume can either be a raw disk or a disk partition. All commands that manage physical volumes start with the letters pv
.
Create Physical Volumes
sudo pvcreate /dev/sda1
Listing Physical Volumes
We have several different commands with varying levels of verbosity: pvscan
, pvs
, and pvdisplay
Remove a Physical Volume
sudo pvremove /dev/sda1
Volume Groups
Volume group commands start with vg
.
Create Volume Group
sudo vgcreate vg /dev/sda1 /dev/sda2
Listing Volume Groups
vgdisplay
, vgscan
and vgs
Add Additional Physical Volumes to a Volume Group
Syntax:
vgextend <volume_group> <physical_volume1> <physical_volume2> ....
Example:
sudo vgextend vg /dev/sda3
Note that if /dev/sda3
is not a physical volume, vgextend
will automatically make it one.
Remove Physical Volumes from a Volume Group
sudo vgreduce vg /dev/sda1 /dev/sda2
Removing a Volume Group
sudo vgremove vg
Logical Volumes
All logical volume commands start with lv
Create Logical Volumes
Syntax:
sudo lvcreate -L <size> -n <lvname> <vgname>
Example:
sudo lvcreate -L 5GB -n lv1 vg
We can also create a logical volumes that use all the space in the volume group with the following syntax:
sudo lvcreate -l 100%FREE -n <lvname> <vgname>
Operations on Logical Volumes
After creating logical volumes, we need to give them filesystems. For example:
sudo mkfs.ext4 /dev/vg/lv1
We can also mount it:
sudo mount -t ext4 /dev/vg/lv1 /mnt
Resizing a Logical Volume
There are lvextend
and lvreduce
commands to increase or decrease the size of a logical volume. And there is also a lvresize
that can accomplish both:
sudo lvresize -L -2GB vg/lv1
Removing a Logical Volume
Finally, we can remove a logical volume with lvremove
:
sudo lvremove vg/lv1