fsck是通用调度工具,根据文件系统类型调用对应修复程序;xfs_repair是专用于xfs的底层修复工具,仅支持xfs且必须卸载后运行,二者均不可在挂载状态下修复。

fsck 和 xfs_repair 都是用来修复文件系统元数据损坏的工具,但它们定位不同、适用范围不同、行为逻辑也不同。选错工具不仅修不好问题,还可能报错失败甚至引发进一步风险。
核心定位差异
fsck 是一个通用外壳命令,本身不直接处理具体文件系统,而是根据设备类型自动调用后端专用工具:遇到 ext4 分区就调用 e2fsck,遇到 XFS 就调用 xfs_repair。它像一个“调度员”。
xfs_repair 则是专为 XFS 设计的底层修复程序,只认 XFS 格式,不兼容 ext 系列或其他类型。它没有调度逻辑,只做一件事:解析 XFS 元数据结构并重建一致性。
支持的文件系统类型
fsck 可用于多种格式,包括 ext2/ext3/ext4、vfat、btrfs(需对应后端)、XFS(此时实际执行的是 xfs_repair)等,前提是系统已安装对应工具包。
xfs_repair 仅支持 XFS,无法识别或处理 ext4、NTFS、FAT 等任何其他格式。对非 XFS 设备执行会直接报错:“Invalid argument” 或 “not an XFS filesystem”。
运行前提与安全性要求
两者都要求目标文件系统处于卸载状态(umount),否则有高风险写入冲突或数据损坏。
但关键区别在于:
• fsck(含 e2fsck)在某些场景下允许只读检查(-n)或挂载中轻量扫描(如 -c 检查坏块),但**绝不推荐挂载时修复**;
• xfs_repair **严格禁止挂载状态下运行**,哪怕只读检查(-n)也会拒绝执行,必须先 umount。
典型操作与风险提示
修复 ext4 分区示例:
• 卸载:sudo umount /dev/sdb1
• 安全检查(不修改):sudo fsck -n -t ext4 /dev/sdb1
• 自动修复:sudo fsck -y -t ext4 /dev/sdb1
修复 XFS 分区示例:
• 卸载:sudo umount /dev/sdb1
• 检查(只读):sudo xfs_repair -n /dev/sdb1
• 强制修复(日志已损坏时):sudo xfs_repair -L /dev/sdb1
⚠️ 注意:-L 会清空日志,丢失未提交事务,仅在 xfs_repair 提示“log has uncommitted transactions”且无法正常回放时使用。











