How to merge two or more disk partitions on Centos 7

I’ve been working with centos 7 virtual machine provisioned via VMware’s vrealize suite. One thing I particulary dislike is how the storage disk gets partitioned into tiny partititions during the VM provisioning:

$ df -h
Filesystem                                            Size  Used Avail Use% Mounted on
devtmpfs                                              1.9G     0  1.9G   0% /dev
tmpfs                                                 1.9G     0  1.9G   0% /dev/shm
tmpfs                                                 1.9G  8.9M  1.9G   1% /run
tmpfs                                                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-root       6.0G   70M  6.0G   2% /
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-usr        6.0G  1.5G  4.6G  24% /usr
/dev/sda1                                            1014M  232M  783M  23% /boot
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-data        61G   34M   61G   1% /data
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-usr_local  6.0G   33M  6.0G   1% /usr/local
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-home        10G   33M   10G   1% /home
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-var        6.0G  414M  5.6G   7% /var
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-tmp        2.0G   33M  2.0G   2% /tmp
tmpfs                                                 379M     0  379M   0% /run/user/1001

Notice how var, data, home, tmp, usr, usr_local, and root have their own partitions. I prefer to have a few but large disk partitions. So, today I figured out how to merge two or more partitions into the root partition (thank you, @kmpaul for the help and documenting this!).

Step 1: Make sure you are logged in as root

Step 2: Backup data from the partitions you want to merge into the root partiton

$ rsync -a /home/ /home-old/
$ rsync -a /tmp/ /tmp-old/
$ rsync -a /var/ /var-old/

Step 3: Reboot the VM into an emergency mode

$ systemctl emergency

Step 4: Umount and remove logic volume for each of the partitions

$ umount /dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-data
$ umount /dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-home
$ umount /dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-var
$ umount /dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-tmp

Step 5: Copy the backed up data

$ rsync -a /home-old/ /home/
$ rsync -a /var-old/ /var/
$ rsync -a /tmp-old/ /tmp/

Step 6: Edit the /etc/fstab file by removing or commenting out the partitions we don’t need

$ vi /etc/fstab

Step 7: Extend the root partition to fill the remaining space

$ lvextend -l +100%FREE -r /dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-root

Step 9: Remove the backups

$ rm -rf /home-old/ /tmp-old/ /var-old/

Step 8: Reboot the system

$ reboot

Step 9: Login to the VM as a regular user or root

Let’s check that our / root partition size has increased:

$ df -h
Filesystem                                            Size  Used Avail Use% Mounted on
devtmpfs                                              1.9G     0  1.9G   0% /dev
tmpfs                                                 1.9G     0  1.9G   0% /dev/shm
tmpfs                                                 1.9G  8.9M  1.9G   1% /run
tmpfs                                                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-root        85G  474M   85G   1% /
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-usr        6.0G  1.5G  4.6G  24% /usr
/dev/sda1                                            1014M  232M  783M  23% /boot
/dev/mapper/centos_dhcp--zzz--zzz--zzz--zz-usr_local  6.0G   33M  6.0G   1% /usr/local
tmpfs                                                 379M     0  379M   0% /run/user/1001

Voilà! 🙌