Reducing LVM disk size is possible using lvreduce on the fly without a reboot. Make sure that data is backed up for the disk to be resized so that FREE space can be reused. LVM (Logical Volume Management) is very efficient when it comes to mounting/partitioning disks in Linux. You need to be ROOT to carry out this process.
In this scenario we would be reducing /dev/mapper/VolGroup01-lvtest mounted at /mnt/lvdisk from 100GB to 50GB.
[root@viz-jump ~]# df -h | grep /mnt/lvdisk /dev/mapper/VolGroup01-lvtest 99G 60M 94G 1% /mnt/lvdisk
First check whether the target partition is in use otherwise it might give you "device busy" errors.
Run this command
# [root@viz-jump ~]# lsof | grep /mnt/lvdisk
If any processes running on the partition, kill or shutdown the service or process. In our case it was Postgres and had to shutdown the service.
# service postgresql stop
NOTE: Please Backup your data to be on a safe side as this process will UNMOUNT the partition and resize it.
Now proceed with reducing the size of the LVM disk
# lvreduce -r -L 50G /dev/mapper/VolGroup01-lvtest
[root@viz-jump ~]# lvreduce -r -L 50G /dev/mapper/VolGroup01-lvtest Do you want to unmount "/mnt/lvdisk"? [Y|n] y fsck from util-linux-ng 2.17.2 /dev/mapper/VolGroup01-lvtest: 11/6553600 files (0.0% non-contiguous), 459349/26213376 blocks resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/VolGroup01-lvtest to 13107200 (4k) blocks. The filesystem on /dev/mapper/VolGroup01-lvtest is now 13107200 blocks long. Size of logical volume VolGroup01/lvtest changed from 100.00 GiB (25599 extents) to 50.00 GiB (12800 extents). Logical volume lvtest successfully resized
NOTE:As you can see above it shows 100 GB is now reduced to 50GB.
Now verify the size by running "df -h"
root@viz-jump ~]# df -h | grep /mnt/lvdisk 50G 52M 47G 1% /mnt/lvdisk
Now if you check the Volume Group size i.e. VolGroup01, it will show you that 50% is allocated and remaining is FREE.
[root@viz-jump ~]# vgdisplay VolGroup01 | grep PE PE Size 4.00 MiB Total PE 25599 Alloc PE / Size 12800 / 50.00 GiB Free PE / Size 12799 / 50.00 GiB
Next step would be to reuse the FREE space and mount it and make it persistent across reboot. First create a Logical Volume
# lvcreate -n dbbackupLV -l +100%FREE VolGroup01
[root@viz-jump ~]# lvcreate -n testLV -l +100%FREE VolGroup01 Logical volume "testLV" created
Now format the partition to ext4. You can make your choice on the filesystem.
# mkfs.ext4 /dev/mapper/VolGroup01-testLV
[root@viz-jump ~]# mkfs.ext4 /dev/mapper/VolGroup01-testLV mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 3276800 inodes, 13106176 blocks 655308 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 400 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 32 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Now create a directory so that you can mount the new partition
# mkdir /mnt/lvdisk01
And then add a entry in fstab to make the mount persistent across reboot.
1st find the UUID of the logical Volume created.
# blkid | grep testLV
[root@viz-jump mnt]# blkid | grep testLV /dev/mapper/VolGroup01-testLV: UUID="d3347cbe-b0a0-4388-b191-796984d3e85d" TYPE="ext4"
Copy the UUID = d3347cbe-b0a0-4388-b191-796984d3e85d
# vi /etc/fstab
# Add this line for the new partition UUID=d3347cbe-b0a0-4388-b191-796984d3e85d /mnt/lvdisk01 ext4 defaults 1 2
Now either of the mount commands will work
# mount -a (mounts all partitions given in /etc/fstab)
# mount /mnt/lvdisk01 (To mount a specifc partition)
That should be it and now ready to use the new space. To verify run "df -h"
[root@viz-jump mnt]# df -h | grep /mnt 50G 52M 47G 1% /mnt/lvdisk 50G 52M 47G 1% /mnt/lvdisk01
If you encounter any errors during the process, let us know via Contact Us and will try our best to help.