xfs文件系统xfs_repair修复文件系统

xfs_repair 修复 XFS 文件系统的典型例子**,并解释背后的逻辑。


15fb0ee76eb86c5a76aa1e2e45945159.png

常见场景 & 示例

1. 基础修复

当 XFS 文件系统出现问题(比如系统日志报 Metadata corruption),先卸载再修复:

1
2
umount /dev/sdb1
xfs_repair /dev/sdb1

⚠️:如果是根路径需进入live进行修复

输出示例:

Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
Phase 3 - for each AG...
Phase 4 - check for duplicate blocks...
Phase 5 - rebuild AG headers and trees...
Phase 6 - check inode connectivity...
Phase 7 - verify and correct link counts...
done

表示修复完成。


2. 强制清理日志(风险操作)

如果日志损坏严重,普通修复失败,可以加 -L 参数清空日志:

1
xfs_repair -L /dev/sdb1

⚠️ 风险:清空 journal,可能导致部分最近写入的数据丢失。

日志里会提示:

Clearing log and moving on.

3. root 分区修复

如果根分区 / 损坏,需要用 救援模式 或 LiveCD:

1
2
# 在救援模式下挂载磁盘
xfs_repair /dev/mapper/centos-root

修复后再重启。


4. 指定备用 superblock 修复

有时 superblock 损坏,可以用 -n 找出可用 superblock,然后再指定:

1
2
xfs_repair -n /dev/sdb1     # 只检查,不修复
xfs_repair -o sb=12345 /dev/sdb1 # 使用指定的 superblock 修复

5. 不卸载情况下的应对

⚠️ XFS 不允许挂载状态下直接修复。
如果你执行:

1
xfs_repair /dev/sdb1

会报:

Filesystem has valuable metadata changes in a log which needs to be replayed
Mount the filesystem to replay the log, and unmount before re-running xfs_repair

解决方法:先挂载 → 卸载 → 再跑 xfs_repair


注意事项

  1. 一定要卸载分区,root 分区要进救援模式。
  2. -L 慎用,除非确认日志无法恢复。
  3. 先备份再修复,尤其是生产环境。
  4. 如果多次修复失败,说明磁盘可能有物理坏块,需要 smartctl 检查硬盘健康。