How to Shrink LVM Volume in Linux

Written by: Bobbin Zachariah   |   Last updated: July 1, 2022

Shrink LVM volume is one option to increase the capacity of the logical volume manager. This always involves risk if the logical volume contains a filesystem.

In this tutorial, we learn how to safely shrink lvm volume in Linux.

How to Shrink an LVM Volume

To reduce the size of a logical volume, first unmount the file system. You can then use the lvreduce command to shrink the volume. After shrinking the volume, remount the file system.

In our example, the logical volume named /dev/vg-01/lv_stripe has 1Gb size. We want to reduce the LV size to 800MB. Note down the following points before proceeding with the shrinking of filesystem.

  • Make sure the current disk usage of the filesystem is less than the size to which you are going to reduce the logical volume.
  • Always take a backup of filesystem data before doing any size change in LVM as a simple mistake in command can cause filesystem corruption and hence loss of data.

In order to reduce the LV size to 800MB, we need to follow the below steps.

  • Unmount the filesystem (if its root volume which requires booting into a Live CD to complete the work)
  • Use fsck command to check the filesystem before resizing it.
  • Resize the filesystem to 800MB before reducing the LV size
  • Reduce the size of the logical Volume 800MB.
  • Mount the filesystem

Now, we can go through steps to shrink LVM an volume in Linux.

1. Unmounting filesystem

In the example below, we have a logical volume /dev/vg-01/lv_stripe mounted on the mount point./mnt/lv_stripe We can check if the volume is mounted with df -hP command

# df -hP 
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/centos-root        18G  5.2G   13G  30% /
devtmpfs                      897M     0  897M   0% /dev
tmpfs                         912M  156K  912M   1% /dev/shm
tmpfs                         912M  9.0M  903M   1% /run
tmpfs                         912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                     497M  189M  309M  38% /boot
tmpfs                         183M   24K  183M   1% /run/user/1000
/dev/mapper/vg--01-lv_stripe 1008M   55M  902M   6% /mnt/lv_stripe

You can see in the last line, the logical volume is mounted. Before running fsck on the filesystem, it should be unmounted. You can unmount the filesystem /mnt/lv_stripe as follows.

# umount /mnt/lv_stripe

Check with the df command

# df -hP 
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/centos-root        18G  5.2G   13G  30% /
devtmpfs                      897M     0  897M   0% /dev
tmpfs                         912M  156K  912M   1% /dev/shm
tmpfs                         912M  9.0M  903M   1% /run
tmpfs                         912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                     497M  189M  309M  38% /boot
tmpfs                         183M   24K  183M   1% /run/user/1000

2. Performing filesystem check

Before proceeding with reducing filesystem, fsck command should be done in order to avoid inconsistency of filesystem data. We will force checking even if the file system seems clean with -f option. This can be done as follows.

# e2fsck -f /dev/vg-01/lv_stripe 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg-01/lv_stripe: 14/65536 files (7.1% non-contiguous), 18146/262144 blocks

This operation must pass in every 5 steps of the filesystem check if not there might be some issue with your filesystem.

Note: fsck.ext4 is now recommended for new versions of Ubuntu as it uses ext4 filesystem by default.

3. Shrink the Logical Volume

Use lvreduce command to reduce the size of logical volume. You can pass -r or --resizefs option to attempt to reduce the filesystem before shrinking the volume which is safer.

XFS or GFS2 filesystems doesnt support lvreduce.

This will reduce the logical volume size to 800MB

lvreduce -r -L 800M /dev/vg-01/lv_stripe

We can check the new size of the logical volume

# lvdisplay /dev/vg-01/lv_stripe 
 --- Logical volume ---
 LV Path /dev/vg-01/lv_stripe
 LV Name lv_stripe
 VG Name vg-01
 LV UUID moX8R0-ME2Q-UFHd-HLIP-rmij-SmTm-3Zupem
 LV Write Access read/write
 LV Creation host, time centos7-srv, 2017-05-01 16:02:21 +0100
 LV Status available
 # open 0
 LV Size 800.00 MiB
 Current LE 200
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 8192
 Block device 253:3

You can see the LV Size 800.00 Mib line indicates the new size.

Mount the filesystem and check it using the command df -Ph command

# mount /dev/vg-01/lv_stripe /mnt/lv_stripe/
# df -Ph
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/centos-root        18G  5.2G   13G  30% /
devtmpfs                      897M     0  897M   0% /dev
tmpfs                         912M  156K  912M   1% /dev/shm
tmpfs                         912M  9.0M  903M   1% /run
tmpfs                         912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                     497M  189M  309M  38% /boot
tmpfs                         183M   20K  183M   1% /run/user/1000
/dev/mapper/vg--01-lv_linear  9.7G  3.2M  9.2G   1% /mnt/lv_linear
/dev/mapper/vg--01-lv_mirror  992M  2.8M  938M   1% /mnt/lv_mirror
/dev/mapper/vg--01-lv_stripe  786M   55M  692M   8% /mnt/lv_stripe

Conclusion

In this guide, we learned how to shrink LVM volume in Linux.

Thanks for reading, please leave your feedback and suggestion in the below comment section.

About The Author

Bobbin Zachariah

Bobbin Zachariah

Bobbin Zachariah is an experienced Linux engineer who has been supporting infrastructure for many companies. He specializes in Shell scripting, AWS Cloud, JavaScript, and Nodejs. He has qualified Master’s degree in computer science. He holds Red Hat Certified Engineer (RHCE) certification and RedHat Enable Sysadmin.

SHARE

Comments

Please add comments below to provide the author your ideas, appreciation and feedback.

Leave a Reply

Leave a Comment