LVM Explained: Logical Volume Management for Linux Admins

Why LVM Exists

Traditional partitions are fixed in size. LVM adds an abstraction layer: pool physical disks into a volume group, carve it into logical volumes, resize them online — no data migration required.

Physical Volumes (PVs)   →   /dev/sdb, /dev/sdc
         ↓
Volume Group (VG)        →   vg_data (combined pool)
         ↓
Logical Volumes (LVs)    →   lv_app, lv_logs, lv_backup
         ↓
File Systems             →   ext4 / xfs mounted at /app, /var/log, /backup

---

Creating an LVM Setup

# 1. Initialize physical volumes
pvcreate /dev/sdb /dev/sdc

# 2. Create a volume group
vgcreate vg_data /dev/sdb /dev/sdc

# 3. Create logical volumes
lvcreate -L 20G -n lv_app vg_data
lvcreate -L 30G -n lv_logs vg_data
lvcreate -l 100%FREE -n lv_backup vg_data

# 4. Create file systems and mount
mkfs.ext4 /dev/vg_data/lv_app
mount /dev/vg_data/lv_app /app
echo '/dev/vg_data/lv_app  /app  ext4  defaults  0 2' >> /etc/fstab

---

Extending a Logical Volume

# Check available space
vgdisplay vg_data | grep "Free"

# Extend LV + resize filesystem in one step (ext4)
lvextend -L +10G -r /dev/vg_data/lv_app

# For XFS (must resize separately)
lvextend -L +10G /dev/vg_data/lv_app
xfs_growfs /app

---

Adding a New Disk

pvcreate /dev/sdd
vgextend vg_data /dev/sdd

---

Shrinking (ext4 only — XFS cannot shrink)

umount /app
e2fsck -f /dev/vg_data/lv_app
resize2fs /dev/vg_data/lv_app 15G   # shrink filesystem FIRST
lvreduce -L 15G /dev/vg_data/lv_app  # then reduce LV
mount /dev/vg_data/lv_app /app

---

Snapshots

lvcreate -L 5G -s -n lv_app_snap /dev/vg_data/lv_app
mount -o ro /dev/vg_data/lv_app_snap /mnt/snapshot
tar -czf /backup/app.tar.gz /mnt/snapshot
umount /mnt/snapshot && lvremove /dev/vg_data/lv_app_snap

---

Quick Reference

pvs / vgs / lvs          # compact listing
pvdisplay / vgdisplay / lvdisplay  # detailed info

Practice in the ShellGenius Linux Labs — disk management challenges cover real partition and LVM scenarios used in RHCSA exams.