XFS文件系统在线扩容需满足三个前提:必须为XFS类型、底层设备已扩容并被内核识别、文件系统已挂载;命令为xfs_growfs <挂载点>,验证需交叉比对df -h与xfs_info输出。

直接用 xfs_growfs 命令即可完成 XFS 文件系统在线扩容,全程无需卸载、不重启、不影响业务运行。关键不是命令本身多复杂,而是三个前提必须全部满足且顺序正确。
确认三项硬性前提是否到位
缺一不可,漏掉任一环节都会导致命令失败:
-
文件系统类型必须是 XFS:运行
df -T /mount/point或xfs_info /mount/point,输出中需明确含type xfs或meta-data=字样 -
底层设备已完成扩容并被内核识别:用
lsblk查目标设备(如/dev/sdb1或/dev/mapper/vg0-lv_data)的 SIZE 是否已变大;若为 LVM,需先执行lvextend -L +5G /dev/vg0/lv_data;若为云盘,控制台扩容后需执行echo 1 > /sys/class/block/sdb/device/rescan -
该文件系统当前必须已挂载:运行
mount | grep /mount/point,确保有对应挂载条目;xfs_growfs不支持对未挂载设备操作
执行扩容命令(只认挂载点)
命令格式统一为 xfs_growfs <挂载点路径>,不是设备路径:
- 扩展
/data分区:sudo xfs_growfs /data - 扩展根文件系统:
sudo xfs_growfs / - 日志存于独立设备(如
/dev/sdc2)时,必须显式指定:sudo xfs_growfs -l /dev/sdc2 /data - 默认即扩展至设备最大可用空间,无需加
-d参数;如需扩到指定大小(如 100G),可用xfs_growfs -D 100G /data(前提是底层设备空间足够)
验证扩容是否真实生效
不能只看 df -h,要交叉比对:
- 运行
df -h /mount/point:观察Avail值是否增大、Use%是否下降 - 运行
xfs_info /mount/point:重点检查data行中的blocks=数值,扩容后应明显变大(例如从2621440变为5242880) - 快速写入测试:
touch /mount/point/.grow_test && rm /mount/point/.grow_test,确认 I/O 正常无报错
常见报错及对应解法
报错本质都是前置条件断裂,不是命令写错了:
-
device is mounted read-only:检查mount | grep /mount/point是否含ro,执行sudo mount -o remount,rw /mount/point后重试 -
cannot grow filesystem with external log:说明日志不在主设备上,必须加-l /dev/xxx指定日志设备 -
AG size is too small:根本原因是lsblk显示设备大小没变,回退检查扩容操作是否真正完成并刷新内核识别 -
no such file or directory或not a mounted XFS filesystem:路径输错,或该路径未挂载,用findmnt /mount/point确认真实挂载关系


















