必须先卸载XFS设备,否则xfs_repair报错;-n为只读扫描,无参数才写入修复;主SB损坏需用-o bbs=指定备份位置;-L仅清日志,不恢复数据。

必须先卸载,否则xfs_repair直接报错
运行 xfs_repair 前,目标设备绝对不能处于挂载状态。它会拒绝执行并输出类似 device is busy 或 filesystem is mounted 的错误。这不是可选项,是硬性限制。
- 用
df -hT或lsblk -f确认分区是否挂载、类型是否为xfs - 若已挂载,优先执行
sudo umount /dev/sdXY(如/dev/sdb1) - 提示
device is busy时,用lsof +D /mount/point或fuser -vm /mount/point查进程;必要时fuser -km /mount/point强制终止 - 实在无法卸载,可尝试只读重挂再卸载:
sudo mount -o remount,ro /dev/sdXY /mnt→sudo umount /mnt
xfs_repair -n 和默认无参数的区别很关键
xfs_repair -n 是“只读扫描”,不修改任何数据,仅报告问题和拟执行的操作;而直接运行 xfs_repair /dev/sdXY 会真正写入修复——但默认仍以只读方式打开设备,除非检测到损坏才开始写入元数据。
-
-n是安全前置步骤:速度快、无风险,能提前看到是否要重建 AG、重置日志、丢弃 inode 等高危动作 - 无参数运行后若无输出,说明文件系统一致,无需修复;若有输出(如
phase 5: checking free space counts后跟修复行为),说明已执行写入 - 不要跳过
-n直接上手修,尤其对根分区或生产数据盘
遇到 superblock not found 或 SB corruption 怎么办
主超级块损坏会导致 xfs_repair 无法识别文件系统,报错如 AG 0: SB not found 或 cannot read superblock。这不是日志问题,而是底层结构丢失,需手动指定备份超级块位置。
- XFS 在固定偏移处存有多个备份超级块,常见地址有
65536、262144、1048576(单位:扇区,通常 512 字节/扇区) - 先用
xfs_db -c "sb 0" -c p /dev/sdXY看主 SB 是否可读;若失败,尝试xfs_repair -o bbs=65536 /dev/sdXY - 若不确定备份位置,可用
mkfs.xfs -n /dev/sdXY(加-n表示不实际格式化)输出所有已知备份 SB 地址 - 注意:
-o bbs=...不等价于-L,它不丢日志,只是换一个入口点启动修复流程
-L 参数不是“强力修复开关”,而是数据清除指令
xfs_repair -L /dev/sdXY 的本质是强制清空日志(log zeroing),相当于跳过崩溃恢复阶段,把未提交的事务全部丢弃。它解决的是日志自身损坏导致修复卡死的问题,不是“修得更彻底”。
- 使用后,最近一次
sync之后、尚未刷盘的元数据变更(如新建/删除文件、目录重命名)大概率丢失 - 仅在
xfs_repair报log has invalid tail或反复卡在 log replay 阶段时考虑 - 修复后务必立刻验证:
xfs_repair -n /dev/sdXY确认无新错误,再mount -o ro /dev/sdXY /mnt检查能否读取关键目录和文件 - 若设备本身存在坏道或 SMART 告警(
smartctl -a /dev/sdX显示Reallocated_Sector_Ct或Current_Pending_Sector非零),-L可能让问题更快恶化
xfsdump 或快照,而不是指望 xfs_repair 起死回生。

















