mkfs.xfs 格式化前必须确认设备路径正确且目标未挂载,否则会不可逆清空整盘;应使用 lsblk 或 findmnt 验证,格式化命令需指定完整分区路径并慎用 -f 和 -k 选项。

mkfs.xfs 格式化前必须确认设备路径
直接对错设备运行 mkfs.xfs 会清空整块盘,且不可逆。常见错误是把 /dev/sda 误写成 /dev/sda1,或者没卸载就格式化——mkfs.xfs 不检查挂载状态,强行执行会破坏正在使用的文件系统。
- 先用
lsblk或findmnt确认目标分区未挂载,例如:findmnt /dev/nvme0n1p2返回空才安全 - 格式化命令必须指定完整分区路径,如
mkfs.xfs -f /dev/sdb1;-f是强制覆盖,但别依赖它来“绕过确认” - SSD 上建议加
-K跳过零填充(省时间),但首次使用新盘时,跳过可能掩盖硬件缺陷
xfs_info 查看实际挂载参数和布局
xfs_info 比 mount 输出更准确,尤其当挂载选项被内核默认值覆盖时。比如你明明指定了 noatime,但 mount 不显示,xfs_info /mnt/data 却能告诉你真实生效的 attr2,inode64,noatime。
-
xfs_info必须对已挂载路径运行,不能对设备文件(如/dev/sdc1)用 - 关注
data段的agcount(分配组数量):太小(如默认 4)在大容量盘上会导致单点锁争用,可用-d agcount=32格式化时调整 -
log段的bsize影响元数据写入延迟,SSD 上可设为65536(64KB),但需配合-l size=128m避免日志太小
df -T 和 xfs_db 区分“空间用尽”的真正原因
df -h 显示 100% 已用,不等于真的没空间——XFS 的 inode 耗尽、实时扩展区(realtime extent)满、或项目配额(project quota)超限,都会导致写入失败,但 df 不体现这些。
- 先跑
df -i看 inode 使用率;再用xfs_info /mount/point查imaxpct(inode 预分配比例),默认 25%,大文件少小文件多的场景容易提前耗尽 - 怀疑实时区问题?
xfs_db -r -c "freesp -r" /dev/sdd1查实时区空闲空间(仅当启用 realtime device 时有效) - 项目配额需手动启用:
xfs_quota -x -c 'report -p' /mnt/data,否则df完全不反映限制
umount 后 xfs_repair 不要跳过预检
xfs_repair 默认只读检查,加 -y 才自动修复。但很多人直接 xfs_repair -y /dev/sde2,结果因设备忙或只读挂载失败,反而掩盖了根本问题——比如分区还在 LVM 逻辑卷里,或被某个容器进程隐式占用。
- 运行前必做:
lsof +D /mount/path和dmsetup ls,确认无残留引用 - 只读检查阶段(不加
-y)会明确报出错误类型,如SB_AGI_CORRUPT(AGI 超级块损坏)或SB_CNT_CORRUPT,不同错误修复策略完全不同 - 若提示
cannot open /dev/sde2: Device or resource busy,不是加-f就能解决,得先查cat /proc/mounts | grep sde2
barrier 的老旧 RAID 卡、ext4 迁移后残留的 journal 设置、或者 xfs_growfs 扩容时底层 LVM 没同步更新 PV 大小。这些地方不会报错,但会在某次断电后暴露。










