Traditional disk partitions are rigid — once you set a size, changing it is painful. LVM (Logical Volume Manager) adds a flexible abstraction layer: pool multiple disks together, carve logical volumes of any size, resize them live, and take snapshots. It's how production servers manage storage without downtime.
A disk or partition marked for LVM use. LVM writes metadata to the disk to claim it. Any block device works: /dev/sda, /dev/sdb1, even RAID arrays or loop devices.
Volume Group (VG)
One or more PVs pooled together into a single storage pool. The VG is divided into fixed-size "physical extents" (PE, default 4MB each). Think of it as one big virtual disk.
Logical Volume (LV)
A slice of the VG that looks like a regular partition to the OS. Create a filesystem on it, mount it, resize it — all without caring which physical disk the data lives on.
How do you grow a partition that's running out of space?
With LVM, you extend the logical volume then resize the filesystem — usually without unmounting. No data migration, no reinstall, no downtime for reads. Just two commands.
# Extend a logical volume by 50GB
lvextend -L +50G /dev/vg_data/lv_home
# Resize the filesystem to use new space (ext4):
resize2fs /dev/vg_data/lv_home
# resize2fs: 1.46.5
# old: 26214400 blocks new: 39321600 blocks
# Or do both in one command:
lvextend -L +50G -r /dev/vg_data/lv_home
# -r = resize filesystem automatically
# For XFS (XFS can only grow, not shrink):
xfs_growfs /mountpoint
# Shrink a volume (must unmount first, ext4 only):
umount /home
e2fsck -f /dev/vg_data/lv_home # check filesystem first
resize2fs /dev/vg_data/lv_home 80G # shrink fs to 80GB
lvreduce -L 80G /dev/vg_data/lv_home # then shrink LV
Adding a New Disk to an Existing VG
# New disk arrived: /dev/sdd
pvcreate /dev/sdd
vgextend vg_data /dev/sdd
# Now the VG has more free space — extend LVs as needed
vgs
# VG #PV #LV SSize SFree
# vg_data 3 2 3.00t 1.00t ← new disk added free space
# Optionally: move data off an old disk (pvmove)
pvmove /dev/sdb /dev/sdd # migrate all data from sdb to sdd
# Then you can remove sdb from the VG:
vgreduce vg_data /dev/sdb
pvremove /dev/sdb
LVM Snapshots
What is an LVM snapshot and how does it work?
A snapshot is an instant, space-efficient copy of an LV at a point in time. It doesn't copy data immediately — it uses copy-on-write: only when the original LV changes does the old data get saved to the snapshot. Snapshots let you back up a live database or test risky changes with an instant rollback option.
# Create a snapshot (needs free space in VG for changed blocks)
lvcreate -s -L 10G -n lv_home_snap /dev/vg_data/lv_home
# -s = snapshot, -L = max COW storage, -n = name
# Mount and use snapshot (read-only or read-write)
mount -o ro /dev/vg_data/lv_home_snap /mnt/snapshot
# Use case: backup while original is live
tar czf /backup/home.tar.gz /mnt/snapshot
umount /mnt/snapshot
# Restore from snapshot:
lvconvert --merge /dev/vg_data/lv_home_snap
# Merges snapshot back into origin on next activation
# Remove snapshot when done:
lvremove /dev/vg_data/lv_home_snap
Thin Provisioning
Thin provisioning lets you create logical volumes larger than the physical space available, banking on the assumption that not all space will be used at once. Common in cloud environments and VMs. If actual usage exceeds real space, you get out-of-space errors — so monitor usage carefully.
# Create a thin pool (real storage: 100GB)
lvcreate -L 100G --thinpool tp_main vg_data
# Create thin volumes that "promise" more than the pool
lvcreate -V 500G --thin -n lv_vm1 vg_data/tp_main
lvcreate -V 500G --thin -n lv_vm2 vg_data/tp_main
# Total promised: 1TB, actual pool: 100GB — works if not all used
# Monitor thin pool usage (critical!):
lvs -a vg_data
# Data%: 45.00 ← 45% of pool used, add more space if near 100%
Frequently Asked Questions
What will I learn here?
This page covers the core concepts and techniques you need to understand the topic and progress confidently to the next lesson.
How should I use this page?
Start with the overview, then follow the section links to deepen your understanding. Use the table of contents on the right to jump to specific sections.
What should I read next?
Use the navigation below to continue to the next lesson or explore related topics.