lvm resize logical volume

From https://pingtool.org/online-resize-lvm-partitions-shrink-home-extend-root/

Online resize LVM partitions – shrink home / extend root

By default, most Linux Installers create separate /home partition, occupying most of the drive space.

When server is used mostly for system services, you may transfer free space from /home partition to /root.

Before adjustment we have 98% filled root partition and 141GB free space on /home, which we would like to use:

[root@oracle ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_oracle-lv_root

                       50G   1G   50G  98% /

tmpfs                 630M     0  630M   0% /dev/shm

/dev/cciss/c0d0p1     477M  106M  346M  24% /boot

/dev/mapper/vg_oracle-lv_home

                      149G   60M  141G   1% /home

1. First step is to unmount /home partition

umount /home

System may refuse to unmount /home if you have users logged on to the box or services running from /home. After logging off / stopping services command should succeed.

2. Shrink old /home partition to 20GB, (system will force you to check filesystem for errors by running e2fsck)

e2fsck -f /dev/mapper/vg_oracle-lv_home

resize2fs /dev/mapper/vg_oracle-lv_home 20G

3. Reduce the LVM to 20G

lvreduce -L 20G /dev/mapper/vg_oracle-lv_home

4. Extend /root LVM to new size, utilizing 100% of free space on disk

lvextend -l +100%FREE /dev/mapper/vg_oracle-lv_root

5. Grow /root (ext3/4) partition to new LVM size

resize2fs /dev/mapper/vg_oracle-lv_root

6. Mount /home

mount /home

Result

[root@oracle ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_oracle-lv_root

                      178G   50G  128G  28% /

tmpfs                 630M     0  630M   0% /dev/shm

/dev/cciss/c0d0p1     477M  106M  346M  24% /boot

/dev/mapper/vg_oracle-lv_home

                       20G   45M   19G   1% /home

After these simple steps we have 72% of free disk space of root partition.

TL;DR

Resizing /home partition (/dev/mapper/vg_oracle-lv_home) to 20GB and transfering remaining space to /root (/dev/mapper/vg_oracle-lv_root):

umount /home

e2fsck -f /dev/mapper/vg_oracle-lv_home

resize2fs /dev/mapper/vg_oracle-lv_home 20G

lvreduce -L 20G /dev/mapper/vg_oracle-lv_home

lvextend -l +100%FREE /dev/mapper/vg_oracle-lv_root

resize2fs /dev/mapper/vg_oracle-lv_root

mount /home