How to shrink /home and add more space on CentOS7
Solution 1:
As others have pointed out, XFS filesystem cannot be shrunk.
So your best bet is to backup /home, remove and recreate its volume in a smaller size and give the rest to your /root volume just as Koen van der Rijt outlined in his post.
• backup the contents of /home
tar -czvf /root/home.tgz -C /home .
• test the backup
tar -tvf /root/home.tgz
• unmount home
umount /dev/mapper/centos-home
• remove the home logical volume
lvremove /dev/mapper/centos-home
• recreate a new 400GB logical volume for /home, format and mount it
lvcreate -L 400GB -n home centos
mkfs.xfs /dev/centos/home
mount /dev/mapper/centos-home
• extend your /root volume with ALL of the remaining space and resize (-r) the file system while doing so
lvextend -r -l +100%FREE /dev/mapper/centos-root
• restore your backup
tar -xzvf /root/home.tgz -C /home
• check /etc/fstab for any mapping of /home volume. IF it is using UUID you should update the UUID portion. (Since we created a new volume, UUID has changed)
That's it.
Hope this helps.
Kindly add this to sync the changes:
dracut --regenerate-all --force
Solution 2:
An addition to Ari's answer as I was unable to ssh using public key authentication after following his instructions.
With selinux enabled you may get this message in /var/log/messages (with debug enabled in sshd_config) because /home was recreated:
SELinux is preventing /usr/sbin/sshd from read access on the file authorized_keys
Fix it by:
restorecon -R -v /home
Solution 3:
You can't shrink an XFS filesystem.
You can only grow them with xfs_growfs
.
See: https://access.redhat.com/solutions/540013
and
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/xfsgrow.html
It is currently not possible to reduce the size of a partition or logical volume with the xfs filesystem. As a possible workaround in some environments, thin provisioned LVM volumes can be considered as an additional layer below the XFS filesystem.
Find out what's taking so much space under /
and split it out as its own filesystem.