RHEL / CentOS : How to shrink LVM volume

Unlike increasing the LVM volume size, to shrink the volume we need to umount the filesystem. Shrinking LVM volume can not be done online.

Before shrinking the volume make sure you have taken the backup of the mount point. Shrinking volume has a chance of data corruption. Example given in this post applies to both RHEL 6 and 7

1. In the example for this post we have a volume /dev/data_vg/lv_data01 mounted on the mount point /data01 :

# df -hP | grep data01
/dev/mapper/data_vg-lv_data01  976M  2.6M  907M   1% /data01
# lvs
  LV         VG      Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  root       centos  -wi-ao----  17.51g
  swap       centos  -wi-ao----   2.00g
  lv_data01  data_vg -wi-ao----   1.00g

2. Before shrinking the volume, umount the mount point and run fsck on it.

# umount /data01
# e2fsck -f /dev/data_vg/lv_data01
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/data_vg/lv_data01: 11/65536 files (0.0% non-contiguous), 12955/262144 blocks

3. Shrink the file system to the desired size. In our case we will reduce the volume from 1G to 800MB.

# lvreduce -r -L 500M /dev/data_vg/lv_data01
fsck from util-linux 2.23.2
/dev/mapper/data_vg-lv_data01: clean, 11/65536 files, 12955/262144 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/data_vg-lv_data01 to 128000 (4k) blocks.
The filesystem on /dev/mapper/data_vg-lv_data01 is now 128000 blocks long.

  Reducing logical volume lv_data01 to 500.00 MiB
  Logical volume lv_data01 successfully resized

4. Mount the filesystem again and verify the new size.

# mount -t ext4 /dev/data_vg/lv_data01 /data01
# df -hP | grep data01
/dev/mapper/data_vg-lv_data01  460M  1.6M  424M   1% /data01
# lvs
  LV         VG      Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  root       centos  -wi-ao----  17.51g
  swap       centos  -wi-ao----   2.00g
  lv_data01  data_vg -wi-ao---- 500.00m
Related Post