Skip to main content
⚡ Calmops

Linux LVM (Logical Volume Manager): Complete Guide

Table of Contents

Introduction

The Linux Logical Volume Manager (LVM) is a powerful storage management system that provides a higher-level abstraction over physical storage devices. It allows system administrators to manage disk storage more flexibly than traditional partition-based approaches, enabling dynamic resizing, snapshots, and advanced storage configurations.

Whether you’re managing a single Linux server or an enterprise storage infrastructure, understanding LVM is essential for modern system administration. This comprehensive guide will take you from basic concepts to advanced LVM operations.

Understanding LVM Concepts

Traditional Disk Management vs. LVM

In traditional disk management, the workflow follows a rigid path:

Physical Disk → Partition → Format → Mount

This approach has significant limitations:

  • Partitions have fixed sizes that cannot be easily changed
  • Resizing requires complex operations and often downtime
  • Adding new storage requires new partitions
  • Moving data between disks is difficult

LVM introduces an abstraction layer that solves these problems:

Physical Disk → PV (Physical Volume) → VG (Volume Group) → LV (Logical Volume) → Format → Mount

This flexible architecture allows for dynamic storage management without the limitations of traditional partitioning.

Core LVM Components

Physical Volumes (PV)

A Physical Volume is the base storage device in LVM. It can be:

  • An entire physical disk
  • A disk partition
  • A RAID array
  • A network storage device
  • A device mapper target

Each Physical Volume is divided into Physical Extents (PE), which are the fundamental allocation units in LVM. By default, each PE is 4 MB in size, though this can be configured during PV creation.

When you initialize a device as a PV, LVM writes a header to the device that identifies it as part of an LVM setup and tracks its extent allocation.

Volume Groups (VG)

A Volume Group is a collection of one or more Physical Volumes. Think of it as a unified storage pool that combines the capacity of multiple physical devices.

Volume Groups provide several key benefits:

  • Capacity Aggregation: Combine multiple small disks into one large pool
  • Physical Isolation: Keep different types of storage separate
  • Flexibility: Add or remove storage without disrupting logical volumes
  • Performance: Distribute I/O across multiple physical devices

Each Volume Group has a name that must be unique on the system and is used when creating Logical Volumes.

Logical Volumes (LV)

A Logical Volume is the final usable volume that can be formatted and mounted like a traditional partition. It is carved from the storage pool provided by a Volume Group.

Logical Volumes offer significant advantages over traditional partitions:

  • Dynamic Resizing: Grow or shrink without unmounting (in most cases)
  • Snapshots: Create point-in-time copies for backups
  • Thin Provisioning: Allocate storage on demand
  • Mirroring: Provide redundancy for critical data
  • Striping: Distribute I/O across multiple devices for performance

Physical Extents (PE) and Logical Extents (LE)

Physical Extents are the fixed-size chunks that Physical Volumes are divided into. By default, PE size is 4 MB.

Logical Extents correspond to Physical Extents in a Volume Group. When you create a Logical Volume, you’re essentially allocating a specific number of Logical Extents from the VG’s pool.

The relationship between PE and LE depends on the volume type:

  • Linear volumes: LE maps to one PE
  • Mirrored volumes: LE maps to multiple PEs (one per mirror)
  • Striped volumes: LE maps to multiple PEs (distributed across stripes)

Getting Started with LVM

Prerequisites

Before creating LVM volumes, ensure you have:

  • Linux system with LVM packages installed
  • Additional unpartitioned disk(s) or unused partitions
  • Root or sudo access
  • Understanding of your storage requirements

On most modern Linux distributions, LVM is included by default. Install if needed:

# Debian/Ubuntu
sudo apt-get install lvm2

# RHEL/CentOS/Fedora
sudo dnf install lvm2

# Arch Linux
sudo pacman -S lvm2

Creating Physical Volumes

The first step in setting up LVM is to initialize Physical Volumes. This can be entire disks or specific partitions.

Initializing a Whole Disk

sudo pvcreate /dev/sdb

This command writes LVM metadata to the disk, marking it as a Physical Volume.

Initializing a Partition

If using a partition rather than a whole disk:

sudo pvcreate /dev/sdb1

Note: The partition must have an appropriate partition type (Linux LVM, type 8E in fdisk).

Viewing Physical Volumes

# Brief summary
pvs

# Detailed information
pvdisplay

# Physical volumes with details
sudo pvdisplay -a

Creating Volume Groups

With Physical Volumes created, the next step is to combine them into a Volume Group.

Basic Volume Group Creation

sudo vgcreate vg_data /dev/sdb /dev/sdc

This creates a Volume Group named “vg_data” using both disks.

Volume Group Creation with Specific PE Size

sudo vgcreate -s 8M vg_data /dev/sdb /dev/sdc

This creates a VG with 8 MB Physical Extents (useful for large storage).

Adding PVs to Existing VG

sudo vgextend vg_data /dev/sdd

This adds /dev/sdd to the existing vg_data Volume Group.

Viewing Volume Groups

# Brief summary
vgs

# Detailed information
vgdisplay

# Volume groups with physical volumes
sudo vgdisplay -v

Creating Logical Volumes

Now you can create Logical Volumes from the Volume Group’s storage pool.

Basic Logical Volume Creation

sudo lvcreate -n lv_backup -L 100G vg_data

This creates:

  • Name: lv_backup
  • Size: 100 GB
  • Volume Group: vg_data

Using All Available Space

sudo lvcreate -n lv_storage -l 100%VG vg_data

Or use all free space:

sudo lvcreate -n lv_storage -l +100%FREE vg_data

Creating with Specific Number of Extents

sudo lvcreate -n lv_data -l 25600 vg_data

This creates an LV using 25,600 extents (100 GB if using 4 MB extents).

Formatting and Mounting Logical Volumes

Creating Filesystem

sudo mkfs.ext4 /dev/vg_data/lv_backup

Or for XFS:

sudo mkfs.xfs /dev/vg_data/lv_backup

Mounting

# Temporary mount
sudo mount /dev/vg_data/lv_backup /mnt/backup

# Permanent mount (add to /etc/fstab)
echo '/dev/vg_data/lv_backup /mnt/backup ext4 defaults 0 2' | sudo tee -a /etc/fstab

LVM Operations: Growing and Shrinking

Extending Logical Volumes

One of LVM’s most powerful features is the ability to extend logical volumes online.

Extending an LV

# Add 50 GB to the logical volume
sudo lvextend -L +50G /dev/vg_data/lv_backup

Or set to specific size:

sudo lvextend -L 200G /dev/vg_data/lv_backup

Extending with All Available Space

sudo lvextend -l +100%FREE /dev/vg_data/lv_backup

Extending and Resizing Filesystem Together

Modern LVM and filesystem tools can handle both operations:

# For ext4
sudo resize2fs /dev/vg_data/lv_backup

# For xfs
sudo xfs_growfs /mnt/backup

Alternatively, use the -r flag (available on newer systems):

sudo lvextend -r -L +50G /dev/vg_data/lv_backup

Extending Volume Groups

When a Volume Group runs out of space, add more Physical Volumes:

# Create new PV
sudo pvcreate /dev/sde

# Add to VG
sudo vgextend vg_data /dev/sde

Now you can extend Logical Volumes using the newly available space.

Shrinking Logical Volumes

Warning: Shrinking logical volumes is risky and must be done carefully. Always back up data before shrinking.

Steps to Shrink an LV

  1. Unmount the filesystem:
sudo umount /mnt/backup
  1. Check filesystem:
sudo e2fsck -f /dev/vg_data/lv_backup
  1. Shrink filesystem:
sudo resize2fs /dev/vg_data/lv_backup 50G
  1. Shrink Logical Volume:
sudo lvreduce -L 50G /dev/vg_data/lv_backup
  1. Remount:
sudo mount /dev/vg_data/lv_backup /mnt/backup

Reducing Volume Groups

Remove a Physical Volume from a Volume Group:

  1. Move data off the PV:
sudo pvmove /dev/sdc
  1. Remove from VG:
sudo vgreduce vg_data /dev/sdc
  1. Remove PV:
sudo pvremove /dev/sdc

LVM Snapshots

LVM snapshots provide point-in-time copies of logical volumes, useful for backups and testing.

Creating Snapshots

sudo lvcreate -s -n lv_backup_snap -L 20G /dev/vg_data/lv_backup

This creates:

  • Snapshot of: lv_backup
  • Name: lv_backup_snap
  • Size: 20 GB

Mounting Snapshots

sudo mkdir /mnt/snapshot
sudo mount -o ro /dev/vg_data/lv_backup_snap /mnt/snapshot

The -o ro (read-only) mount option protects the snapshot.

Removing Snapshots

sudo lvremove /dev/vg_data/lv_backup_snap

Snapshot Use Cases

  • Backups: Create snapshot, backup from it, then remove snapshot
  • Testing: Test changes on a snapshot without affecting production
  • Recovery: Restore from corrupted state
  • Software Updates: Snapshot before updates for easy rollback

Advanced LVM Features

LVM Thin Provisioning

Thin provisioning allows over-allocation of storage, meaning you can create logical volumes larger than available physical storage.

Creating Thin Pool

sudo lvcreate --thinpool vg_data/thin_pool -L 500G

Creating Thin Volume

sudo lvcreate -V 1T --thin -n lv_thin vg_data/thin_pool

This creates a 1 TB logical volume from a 500 GB pool.

LVM Mirroring

Provide redundancy with mirrored logical volumes:

sudo lvcreate -m 1 -n lv_mirror -L 100G vg_data

This creates a mirrored volume with one mirror (total 2 copies of data).

LVM Striping

Improve I/O performance by striping across multiple PVs:

sudo lvcreate -i 3 -I 64 -n lv_striped -L 100G vg_data
  • -i 3: Stripe across 3 PVs
  • -I 64: 64 KB stripe size

Removing LVM Components

Removing a Logical Volume

# Unmount first
sudo umount /mnt/backup

# Remove LV
sudo lvremove /dev/vg_data/lv_backup

Removing a Volume Group

# Remove all LVs first
sudo vgremove vg_data

Removing a Physical Volume

# Remove from VG first
sudo pvremove /dev/sdb

Monitoring LVM

Viewing LVM Status

# Physical volumes
pvs
pvdisplay

# Volume groups
vgs
vgdisplay

# Logical volumes
lvs
lvdisplay

Monitoring Space Usage

# Detailed LV information
sudo lvs -a -o +devices

# VG space remaining
sudo vgdisplay vg_data

Troubleshooting LVM Issues

Common Problems and Solutions

“Insufficient free space”

  • Add more Physical Volumes to the VG
  • Remove unneeded Logical Volumes
  • Extend the VG using available disks

“Failed to find logical volume”

  • Check if LV exists: lvs -a
  • Verify VG is active: vgchange -ay
  • Check system logs for errors

“Metadata problems”

  • Use vgck to verify VG metadata
  • Use pvck to check PV headers
  • Backup and restore metadata if needed

Recovery Commands

# Activate Volume Group
sudo vgchange -ay vg_data

# Deactivate Volume Group
sudo vgchange -an vg_data

# Scan for LVM devices
sudo lvmdiskscan

LVM Best Practices

  1. Plan Your Layout: Define PVs, VGs, and LVs based on your requirements
  2. Use Appropriate PE Size: Larger PEs work better for large storage
  3. Monitor Space: Set up alerts for VG space usage
  4. Regular Backups: Use snapshots for point-in-time backups
  5. Document Configuration: Keep records of your LVM setup
  6. Test Changes: Always test resizing operations in non-production first
  7. Use Mirrors for Critical Data: Protect important data with mirroring

LVM and /etc/fstab

When using LVM in /etc/fstab, use the device path:

/dev/mapper/vg_data-lv_backup    /mnt/backup    ext4    defaults    0 2

Or use the UUID:

# Get UUID
sudo blkid /dev/vg_data/lv_backup

# Use in fstab
UUID=xxxx-xxxx-xxxx    /mnt/backup    ext4    defaults    0 2

Conclusion

The Linux Logical Volume Manager is an essential tool for modern system administration. Its flexibility in managing storage makes it invaluable for servers of all sizes, from small development machines to large enterprise storage systems.

By mastering LVM concepts and operations—Physical Volumes, Volume Groups, and Logical Volumes—you can create dynamic, flexible storage configurations that adapt to changing requirements. Remember to follow best practices, monitor your storage, and always maintain backups before making significant changes.

References

Comments