CentOS 7 – Xfs Shrink & Expand

Home » CentOS » CentOS 7 – Xfs Shrink & Expand
CentOS 8 Comments

I’m having some difficulty finding a method to shrink my /home to expand my /.  They both correspond to LVMs.  It is my understanding that one cannot shrink a xfs filesystem.  One must back it up (xfsdump), remove
(lvremove) redefine it and then restore it back (xfsrestore).

Okay, I’m running into a problem where /home  needs to be “unused”.  If tried going in to “maintance mode”, but I ran into a problem with the mount command (after issuing a ‘chroot /sysroot’).  I then tried using SystemRescueCD to boot to, but it wouldn’t mount my 32TB RAID USB drive
(something about too big).

Any thoughts or suggestions?

-Frank

8 thoughts on - CentOS 7 – Xfs Shrink & Expand

  • Frank,

    If I was you, I would boot the SystemRescueCD, mount your /home partition. Then rsync the data to someplace else – another system on your network? If your root partition is also xfs, then mount/rsync that data as well. Then remove, expand or recreate your LVM based volumes, mkfs and rsync the data back. I’m assuming you have a /boot partition that is not LVM based so no need to reinstall grub. Then reboot. 

    Side note: my solution doesn’t require you to set up a chroot, just mount the partition in order to back up the data on the filesystem. I
    like Gentoo’s LVM documentation[0] Hope this helps.

    [0] https://wiki.gentoo.org/wiki/LVM#Usage

  • Hi,

    What is the problem if you boot directly into maintenance mode? Then it should be possible to backup home to a remote destination, unmount /home, remove the home LV, expand /, recreate home and mount it, restore from backup and you’re done. No need to use any SystemRescueCD or other tool.

    Regards, Simon

  • Yeah, I tried that but ran into a problem.  It came up fine in single-user/maintenance mode.   The mount command shows all of the mounted file systems, but after I ‘chroot /sysroot’, the mount failed
    (with some problem with mtab, sorry don’t have the exact error message).  So I couldn’t mount my 32TB RAID (where the xfsdump file was).

  • Hi,

    I think you misunderstood what I meant. You appear to have booted into rescue mode, but that’s not what I meant. What I meant is good old single user mode. The state you’ll get with “telinit 1” or with “s” or “1” as a kernel boot option.

    For what you want to do not a single reboot is required.

    Regards, Simon

  • I’ll try that…I was using instructions I found on the internet for single-user/maintenance mode.   From the grub screen you enter ‘e’ and modify the linux16 line…etc.

    Okay, I’ll try that next.

    Thanks Simon!

  • Correct, XFS filesystems cannot be shrunk (reduced) dynamically, like ext2/3/4 can, only grown. You need to create another, smaller filesystem (XFS too usually) then copy the existing content which can be done with tools like xfsdump & xfsrestore (iff both are XFS), rsync, pax
    (spax), or tar, typically while the system is in single user mode so that no changes can occur (and be lost). Which exact steps depend, as usual. If there’s nothing on that USB drive you want then you can expand the VG onto it (gdisk, pvcreate then vgextend), make a new, smaller LV (lvcreate) and filesystem (mkfs), copy the content, remove the old LV (lvremove), then move the new LV off the USB array onto your normal storage (pvmove) then remove the USB array from the VG
    (vgreduce), at which point you should be able to grow (lvextend) your root.

    /mark