How to work with LVM

LVM (Logical Volume Manager) is a special Linux OS subsystem that provides additional options for managing partitions on hard disks. It adds a layer of abstraction between your physical storage devices and the file systems, making storage management flexible and dynamic.

Key concepts

  • PV (Physical Volume): a physical disk or partition initialized for use by LVM.
  • VG (Volume Group): a pool of storage made up of one or more PVs.
  • LV (Logical Volume): a virtual partition carved out of a VG, which is what you format and mount.

Installation

# Debian/Ubuntu
sudo apt-get install lvm2

# CentOS/RHEL
sudo yum install lvm2

Creating an LVM setup

Step 1: Initialize physical volumes

sudo pvcreate /dev/sdb /dev/sdc

Verify:

sudo pvdisplay

Step 2: Create a volume group

sudo vgcreate my_vg /dev/sdb /dev/sdc

Verify:

sudo vgdisplay

Step 3: Create a logical volume

Create a 10 GB logical volume:

sudo lvcreate -L 10G -n my_lv my_vg

Or use all remaining free space:

sudo lvcreate -l 100%FREE -n my_lv my_vg

Verify:

sudo lvdisplay

Step 4: Format and mount

sudo mkfs.ext4 /dev/my_vg/my_lv
sudo mkdir /mnt/mydata
sudo mount /dev/my_vg/my_lv /mnt/mydata

Add to /etc/fstab for automatic mounting at boot:

/dev/my_vg/my_lv  /mnt/mydata  ext4  defaults  0  2

Extending a logical volume

Extend the logical volume by 5 GB and resize the filesystem:

sudo lvextend -L +5G /dev/my_vg/my_lv
sudo resize2fs /dev/my_vg/my_lv

Reducing a logical volume

Warning: always back up data before shrinking. Unmount first.

sudo umount /mnt/mydata
sudo e2fsck -f /dev/my_vg/my_lv
sudo resize2fs /dev/my_vg/my_lv 8G
sudo lvreduce -L 8G /dev/my_vg/my_lv
sudo mount /dev/my_vg/my_lv /mnt/mydata

Adding a new disk to an existing volume group

sudo pvcreate /dev/sdd
sudo vgextend my_vg /dev/sdd

Removing an LVM setup

sudo umount /mnt/mydata
sudo lvremove /dev/my_vg/my_lv
sudo vgremove my_vg
sudo pvremove /dev/sdb /dev/sdc

On this page