xfs 文件系统下的 shrink LV size (LVM 缩容)

LVM 缩容本来是一件很容易的事情, 但是如果在 xfs 文件系统下, 就麻烦一些.

今天有个测试环境, 系统是 Centos 7 和 xfs 文件系统,
因为一些原因需要对某个 LV 进行缩容, 从 341GB 减小到 60GB , 记录一下.

进入 rescue mode

开机, 在 grub 菜单, 按 e 进入编辑, 在 linux16 那一行追加 systemd.unit=rescue.target, 按 Ctrl + X 执行启动.

信息

# df -hT | grep home
/dev/mapper/cl-home 341G 2.8G 339G 1% /home
# lvdisplay
--- Logical volume ---
LV Path /dev/cl/home
LV Name home
VG Name cl
LV Size <341.12 GiB

备份 xfs 文件系统

xfsdump -l 0 -f /cl-home.image /dev/cl/home

移除 LV

umount /dev/cl/home
lvremove /dev/cl/home

创建新的 60G 的 LV

lvcreate -L 60G -n home cl

然后 vgs 可以看到 VG 回收的 VFree 空间,
lvdisplay 可以看到新的 LV 信息.

为 LV 创建文件系统

mkfs.xfs /dev/cl/home

挂载到 /home 目录

mount /dev/cl/home /home

restore 旧分区数据到新的 LV

xfsrestore -f /cl-home.image /home

reboot

ls -al /home
reboot

一切正常. (GRUB menu 不用改, e 模式的修改会自动恢复)

确认没问题之后, 可以删除 /cl-home.img 文件.