Linux 中如何将 xfs 文件系统在线扩容

作者:袖梨 2026-08-29

xfs_growfs可在线扩容XFS文件系统,前提必须全部满足:文件系统为XFS、底层设备已扩容并被内核识别、文件系统当前已挂载;命令仅认挂载点路径,如sudo xfs_growfs /data,无需卸载或重启。

Linux 中对 XFS 文件系统在线扩容,核心就是用 xfs_growfs 命令——它专为已挂载的 XFS 设计,全程无需卸载、不中断服务、不重启系统。但成功扩容的前提不是命令本身,而是三项条件必须全部满足且顺序正确。

确认三个硬性前提

缺一不可,漏掉任一个都会报错或无效:

  1. 文件系统类型确实是 XFS:运行 df -T /mount/pointxfs_info /mount/point,输出中必须明确出现 type xfsmeta-data= 开头的 XFS 特征信息
  2. 底层设备已完成扩容并被内核识别:用 lsblk 查目标设备(如 /dev/mapper/vg0-lv_data/dev/sdb1)的 SIZE 是否已变大;若用 LVM,需先执行 lvextend -L +5G /dev/vg0/lv_data;若为云盘,控制台扩容后要执行 echo 1 > /sys/class/block/sdb/device/rescan
  3. 该文件系统当前必须已挂载:运行 mount | grep /mount/point,确保有对应挂载条目;xfs_growfs 不支持对未挂载设备操作

执行扩容命令

命令只认挂载点路径,不认设备路径,语法极简:

  1. 扩展 /data 挂载点:sudo xfs_growfs /data
  2. 扩展根文件系统:sudo xfs_growfs /
  3. 如果日志存于独立设备(如 /dev/sdc2),必须显式指定:sudo xfs_growfs -l /dev/sdc2 /data
  4. 默认即扩展至设备最大可用空间,无需加 -d 参数;如需指定目标大小(例如扩到 100G),用 xfs_growfs -D 100G /data(需确保底层设备空间足够)

验证是否真正生效

不能只看 df -h,要交叉验证:

  1. 运行 df -h /mount/point:观察 Avail 值是否增大、Use% 是否下降
  2. 运行 xfs_info /mount/point:重点看 data 行中的 blocks= 数值,扩容后应明显变大(比如从 blocks=2621440 变为 blocks=5242880
  3. 快速 I/O 测试:touch /mount/point/.grow_test && rm /mount/point/.grow_test,确认无报错、写入正常

常见报错与直击根源的解法

报错本质是某项前提断裂,不是命令写错了:

  1. “device is mounted read-only”:检查 mount | grep /mount/point 是否含 ro,执行 sudo mount -o remount,rw /mount/point 后重试
  2. “cannot grow filesystem with external log”:说明日志不在主设备上,必须用 -l /dev/xxx 显式指定日志设备
  3. “AG size is too small”:根本原因是 lsblk 显示设备 SIZE 没变,回退检查扩容操作是否完成并刷新内核识别
  4. “no such file or directory” 或 “not a mounted XFS filesystem”:路径输错,或该路径压根没挂载,用 findmnt /mount/point 确认真实挂载关系

相关文章

精彩推荐