Shrink an XFS partition

By | July 5, 2017

眾所周知,XFS 只可增大 (extend),不可縮細 (shrink)。

雖不可縮細,但其實可以用 write zero 方法,把空間寫 0,dump VM 可大大減少 disk image 的大小,所以其實影響不大。

write zero 有兩個方法,一是用 zerofree 另一是用 dd,zerofree 需要 remount 成 read-only 及 RHEL 系列沒有此 package,而 dd 雖慢但簡單

$ dd if=/dev/zero of=/tmp/zero bs=8M; rm /tmp/zero

如果真的想縮細 XFS 就唯有建立一隻新 disk,如 /dev/sdc,之後把 /dev/sdc1 mount 去 /mnt/sdc1,再用 xfsdump 和 xfsrestore

$ sudo -s
$ fdisk /dev/sdc
$ mkfs.xfs /dev/sdc1
$ mkdir /mnt/sdc1
$ mount -t xfs /dev/sdc1 /mnt/sdc1
$ cd /mnt/sdc1
$ xfsdump -l0 - /dev/sdc1 | xfsrestore -p60 - .

再用 blkid /dev/sdc1 讀取 UUID,把 /mnt/sdc1/etc/fstab 的 UUID 改掉及行一次 grub2-mkconfig 便可

$ vi /mnt/sdc1/etc/fstab
$ grub2-mkconfig -o /mnt/sdc1/boot/grub2/grub.cfg

完成後,查看 /mnt/sdc1/boot/grub2/grub.cfg,理論上 UUID 會換成 /dev/sda

如無意外,關機,把原有的 disk 拔掉,把 sdc 換成 sda 的位置便可

最後,如喜歡,重啟後再行 grub2-mkconfig

$ grub2-mkconfig -o /boot/grub2/grub.cfg

它會把 /dev/sda 變回 UUID