LVM Volume Resizing: Complete Guide
Overview
Logical Volume Management (LVM) is a device mapper framework that provides logical volume management for the Linux kernel. One of the key advantages of LVM is the ability to dynamically resize logical volumes without unmounting filesystems or rebooting the system. This guide covers the complete process of resizing LVM volumes, including both expansion and reduction operations.
LVM Architecture
LVM operates on three main components:
| Component | Description | Purpose | |-----------|-------------|---------| | Physical Volume (PV) | Physical storage devices | Raw storage layer | | Volume Group (VG) | Collection of Physical Volumes | Storage pool | | Logical Volume (LV) | Virtual partitions from Volume Group | User-accessible volumes |
Storage Hierarchy
`
Physical Disks → Physical Volumes → Volume Groups → Logical Volumes → Filesystems
`
Prerequisites and Preparation
Before resizing LVM volumes, several prerequisites must be met:
System Requirements
- Root or sudo privileges - LVM2 utilities installed - Backup of important data - Understanding of current storage layout
Essential Commands for Assessment
`bash
Display physical volumes
pvdisplayShow volume groups
vgdisplayList logical volumes
lvdisplayShow disk space usage
df -hDisplay block devices
lsblk`Information Gathering
Before any resize operation, collect comprehensive information about your storage setup:
`bash
Detailed PV information
pvs -vDetailed VG information with free space
vgs -vDetailed LV information
lvs -vFilesystem information
blkid`Expanding LVM Volumes
Expanding LVM volumes is generally safer than shrinking them and can often be performed online without unmounting filesystems.
Step 1: Assess Available Space
First, determine if there's available space in the volume group:
`bash
Check free space in volume group
vgdisplay volume_group_name | grep "Free"Alternative command
vgs volume_group_name`Step 2: Extend Logical Volume
If sufficient free space exists in the volume group:
`bash
Extend by specific size
lvextend -L +10G /dev/volume_group_name/logical_volume_nameExtend by percentage of free space
lvextend -l +100%FREE /dev/volume_group_name/logical_volume_nameExtend to specific total size
lvextend -L 50G /dev/volume_group_name/logical_volume_name`Command Options Explanation
| Option | Description | Example | |--------|-------------|---------| | -L | Specify size in bytes, KB, MB, GB, TB | -L +5G | | -l | Specify size in logical extents | -l +100%FREE | | -r | Automatically resize filesystem | -r | | -t | Test mode (dry run) | -t |
Step 3: Resize Filesystem
After extending the logical volume, resize the filesystem:
#### For ext2/ext3/ext4 filesystems:
`bash
Online resize (filesystem mounted)
resize2fs /dev/volume_group_name/logical_volume_nameOffline resize (filesystem unmounted)
umount /mount/point resize2fs /dev/volume_group_name/logical_volume_name mount /dev/volume_group_name/logical_volume_name /mount/point`#### For XFS filesystems:
`bash
XFS can only be resized online (while mounted)
xfs_growfs /mount/point`#### For other filesystems:
| Filesystem | Command | Online/Offline | |------------|---------|----------------| | Btrfs | btrfs filesystem resize max /mount/point | Online | | ReiserFS | resize_reiserfs /dev/device | Offline | | JFS | mount -o remount,resize /mount/point | Online |
Complete Expansion Example
`bash
1. Check current status
df -h /home lvs2. Extend logical volume by 10GB
lvextend -L +10G /dev/vg01/home_lv3. Resize ext4 filesystem
resize2fs /dev/vg01/home_lv4. Verify changes
df -h /home lvs`Adding Physical Storage
When the volume group lacks sufficient free space, add new physical storage:
Step 1: Prepare New Disk
`bash
Identify new disk
lsblkCreate physical volume
pvcreate /dev/sdbVerify physical volume creation
pvdisplay /dev/sdb`Step 2: Extend Volume Group
`bash
Add physical volume to existing volume group
vgextend volume_group_name /dev/sdbVerify volume group extension
vgdisplay volume_group_name`Step 3: Extend Logical Volume and Filesystem
`bash
Extend logical volume
lvextend -L +20G /dev/volume_group_name/logical_volume_nameResize filesystem
resize2fs /dev/volume_group_name/logical_volume_name`Shrinking LVM Volumes
WARNING: Shrinking volumes is risky and can result in data loss. Always backup data before proceeding.
Prerequisites for Shrinking
- Filesystem must support shrinking - Sufficient free space within filesystem - Filesystem consistency check - Complete backup of data
Step 1: Filesystem Check and Repair
`bash
Unmount filesystem
umount /mount/pointCheck filesystem integrity
e2fsck -f /dev/volume_group_name/logical_volume_name`Step 2: Shrink Filesystem
`bash
Shrink ext2/ext3/ext4 filesystem
resize2fs /dev/volume_group_name/logical_volume_name 30G`Note: XFS filesystems cannot be shrunk. ReiserFS and other filesystems have specific requirements.
Step 3: Shrink Logical Volume
`bash
Reduce logical volume size
lvreduce -L 30G /dev/volume_group_name/logical_volume_nameAlternative: reduce by specific amount
lvreduce -L -10G /dev/volume_group_name/logical_volume_name`Step 4: Verify and Mount
`bash
Check filesystem after shrinking
e2fsck -f /dev/volume_group_name/logical_volume_nameMount filesystem
mount /dev/volume_group_name/logical_volume_name /mount/pointVerify operation
df -h /mount/point`Advanced Resize Operations
Online Resize with Single Command
Modern LVM versions support combined operations:
`bash
Extend LV and resize filesystem in one command
lvextend -r -L +5G /dev/vg01/data_lvExtend using all available free space
lvextend -r -l +100%FREE /dev/vg01/data_lv`Percentage-Based Resizing
`bash
Extend to use 50% of volume group
lvextend -l 50%VG /dev/vg01/data_lvExtend using 25% of free space
lvextend -l +25%FREE /dev/vg01/data_lvExtend to use 75% of physical volume
lvextend -l 75%PV /dev/vg01/data_lv`Resize Multiple Volumes
`bash
Extend multiple logical volumes
for lv in lv01 lv02 lv03; do lvextend -L +2G /dev/vg01/$lv resize2fs /dev/vg01/$lv done`Monitoring and Verification
Pre-Resize Verification
`bash
Create comprehensive system snapshot
pvs > /tmp/pvs_before.txt vgs > /tmp/vgs_before.txt lvs > /tmp/lvs_before.txt df -h > /tmp/df_before.txt`Post-Resize Verification
`bash
Verify logical volume changes
lvs /dev/volume_group_name/logical_volume_nameCheck filesystem size
df -h /mount/pointVerify filesystem integrity
fsck -n /dev/volume_group_name/logical_volume_name`Continuous Monitoring
`bash
Monitor volume group space
watch vgsMonitor filesystem usage
watch df -hCheck for any LVM errors
dmesg | grep -i lvm`Troubleshooting Common Issues
Issue 1: Insufficient Space in Volume Group
Problem: Cannot extend logical volume due to lack of free space
Solution:
`bash
Check available space
vgs volume_group_nameAdd new physical volume if needed
pvcreate /dev/sdc vgextend volume_group_name /dev/sdc`Issue 2: Filesystem Corruption During Resize
Problem: Filesystem becomes corrupted during resize operation
Solution:
`bash
Attempt filesystem repair
umount /mount/point e2fsck -f /dev/volume_group_name/logical_volume_nameIf repair fails, restore from backup
Restore backup data to volume
`Issue 3: LVM Commands Hanging
Problem: LVM commands appear to hang or freeze
Solution:
`bash
Check for device mapper issues
dmsetup infoRestart LVM services
systemctl restart lvm2-monitorClear device mapper cache
dmsetup remove_all`Issue 4: Inconsistent Filesystem Size
Problem: Filesystem size doesn't match logical volume size
Solution:
`bash
Check actual sizes
lvs /dev/vg01/data_lv df -h /mount/pointResize filesystem to match LV
resize2fs /dev/vg01/data_lv`Best Practices and Safety Guidelines
Pre-Operation Checklist
| Task | Command | Purpose | |------|---------|---------| | Backup data | rsync, tar, or backup solution | Data protection | | Check filesystem | fsck -n | Verify integrity | | Document current state | pvs, vgs, lvs, df | Reference point | | Test in lab environment | Same commands | Risk mitigation | | Plan rollback strategy | Backup restoration plan | Recovery preparation |
Safety Measures
1. Always backup critical data before resizing 2. Test resize operations in non-production environments 3. Verify filesystem integrity before and after operations 4. Monitor system resources during resize operations 5. Document all changes for future reference
Performance Considerations
`bash
Monitor I/O during resize
iostat -x 1Check system load
uptimeMonitor memory usage
free -hWatch for swap usage
swapon -s`Automation and Scripting
Automated Resize Script Example
`bash
#!/bin/bash
LVM resize automation script
VG_NAME="vg01" LV_NAME="data_lv" MOUNT_POINT="/data" EXTEND_SIZE="+10G"
Pre-checks
echo "Performing pre-resize checks..." if ! mountpoint -q "$MOUNT_POINT"; then echo "Error: Mount point not found" exit 1 fiBackup current state
pvs > "/tmp/lvm_state_$(date +%Y%m%d_%H%M%S).txt" vgs >> "/tmp/lvm_state_$(date +%Y%m%d_%H%M%S).txt" lvs >> "/tmp/lvm_state_$(date +%Y%m%d_%H%M%S).txt"Extend logical volume and filesystem
echo "Extending logical volume..." if lvextend -r -L "$EXTEND_SIZE" "/dev/$VG_NAME/$LV_NAME"; then echo "Resize completed successfully" df -h "$MOUNT_POINT" else echo "Resize failed" exit 1 fi`Monitoring Script
`bash
#!/bin/bash
LVM space monitoring script
THRESHOLD=90
for vg in $(vgs --noheadings -o vg_name); do
usage=$(vgs --noheadings -o vg_free_percent "$vg" | tr -d ' %')
used=$((100 - usage))
if [ "$used" -gt "$THRESHOLD" ]; then
echo "WARNING: Volume group $vg is ${used}% full"
fi
done
`
Recovery Procedures
Emergency Recovery Steps
If a resize operation fails catastrophically:
1. Do not panic or make hasty decisions 2. Document the current state 3. Attempt filesystem repair 4. Restore from backup if necessary
Recovery Commands
`bash
Emergency filesystem check
e2fsck -y /dev/volume_group_name/logical_volume_nameForce filesystem repair
e2fsck -f -y /dev/volume_group_name/logical_volume_nameLVM metadata backup restoration
vgcfgrestore volume_group_namePhysical volume recovery
pvck /dev/device_name`Conclusion
LVM volume resizing is a powerful feature that provides flexibility in storage management. While expansion operations are generally safe and can be performed online, shrinking operations require careful planning and should always be preceded by complete backups. Understanding the relationship between physical volumes, volume groups, logical volumes, and filesystems is crucial for successful resize operations.
Regular monitoring, proper documentation, and adherence to best practices ensure that LVM resize operations can be performed safely and effectively. Always test procedures in non-production environments before applying them to critical systems, and maintain current backups of all important data.
The ability to dynamically resize storage without downtime makes LVM an essential tool for modern Linux system administration, providing the flexibility needed to adapt to changing storage requirements in both physical and virtual environments.