必须先卸载目标分区再运行xfs_repair,否则失败;用-n预检无误后再修复;主超级块损坏时可用-o bbs=指定备份位置恢复;仅日志损坏且无未提交数据时才用-L清空日志。

必须先卸载目标分区,再运行 xfs_repair,否则命令直接失败;修复前用 -n 预检问题,确认无误后再执行实际修复;主超级块损坏时可指定备份位置尝试恢复,仅在日志自身损坏且无重要未提交数据时才考虑 -L 清空日志。
确认状态并安全卸载
运行 df -hT 或 lsblk -f 查看目标设备(如 /dev/sdb1 或 /dev/mapper/centos-root)是否挂载、文件系统类型是否为 xfs。若已挂载,执行:
- sudo umount /dev/sdXY(替换为实际设备名)
- 若提示 “device is busy”,用 lsof +D /mount/point 或 fuser -vm /mount/point 查占用进程;必要时用 fuser -km /mount/point 强制释放
- 实在无法卸载,可先只读重挂:sudo mount -o remount,ro /dev/sdXY /mnt,再 umount /mnt
用 -n 预扫描,看清再动手
xfs_repair -n /dev/sdXY 是零风险前置步骤,不修改任何数据,只报告拟执行的操作:
- 输出为空 → 文件系统一致,无需修复
- 出现 “would reset superblock”、“rebuild AGI”、“discard inode” 等提示 → 存在真实损坏,需评估风险再决定是否继续
- 看到 phase 4 或 phase 5 的修复动作 → 可预判影响范围,避免盲目操作
主超级块损坏的应对方法
报错如 AG 0: SB not found 或 cannot read superblock,说明主超级块不可读。XFS 在固定扇区位置存有多个备份:
- 先试常见备份偏移:xfs_repair -o bbs=65536 /dev/sdXY(单位:扇区,512 字节/扇区)
- 其他常用位置还有 262144、1048576;不确定时,运行 mkfs.xfs -n /dev/sdXY(加 -n 不格式化),它会列出所有已知备份超级块地址
- -o bbs= 仅更换扫描起点,不丢日志、不改元数据,比 -L 安全得多
-L 参数不是“强力修复”,而是高风险清空日志
xfs_repair -L /dev/sdXY 的本质是强制清空日志(log zeroing),跳过崩溃恢复阶段:
- 仅在常规修复反复失败、且明确报 “log has invalid tail” 或卡在 “log replay” 阶段时使用
- 执行后,最后一次 sync 之后的所有元数据变更(新建/删除/重命名文件等)大概率丢失
- 不是默认选项,更不能用于日常维护;若系统启用了 reflink 或 project quota,相关元数据可能失效
修复后务必验证再挂载
修复完成不等于万事大吉,必须验证一致性并测试可用性:
- 再次运行 xfs_repair -n /dev/sdXY,确认无错误报告
- 尝试只读挂载:sudo mount -o ro /dev/sdXY /mnt,检查能否列出目录、读取关键文件
- 一切正常后,再以读写方式挂载;挂载后运行 xfs_info /mnt 查看参数是否完整
- 若发现大量文件缺失或目录为空,应立即停止写入,优先从备份恢复


















