XFS 文件系统故障修复案例
XFS 是一种高性能的日志文件系统,但在异常断电、硬件故障或操作失误时也可能损坏。以下是常见的 XFS 故障修复案例 及对应的解决方案。
案例 1:XFS 文件系统无法挂载(Superblock 损坏)
故障现象
mount: /dev/mapper/centos-root: can't read superblock或
bad primary superblock - bad magic number可能原因
- 超级块(Superblock)损坏(通常由于磁盘损坏或突然断电导致)。
- 文件系统元数据不一致。
修复方法
1. 使用备份超级块恢复
XFS 在格式化时会生成多个超级块备份,可以使用 xfs_repair -b 指定备份超级块修复:
xfs_repair -b 512 /dev/sdX # 512 是常见备份位置,可用 `xfs_db` 查找或使用 xfs_db 查找备份超级块:
xfs_db -c "sb 0" -c "p" /dev/sdX # 查看超级块
xfs_db -c "sb 1" -c "p" /dev/sdX # 查看备份超级块2. 强制修复(-L 选项)
如果超级块严重损坏,可以尝试强制修复:
xfs_repair -L /dev/sdX⚠️** 注意**:-L 会清空日志,可能导致部分数据丢失。
案例 2:XFS 文件系统日志(Journal)损坏
故障现象
XFS (sdX): log mount/recovery failed: error -5
XFS (sdX): log mount failed或
xfs_repair: cannot read log (error 117)可能原因
- 日志(Journal)损坏,导致文件系统无法恢复一致性状态。
- 可能是由于突然断电或存储设备故障。
修复方法
1. 清空日志(-L 选项)
xfs_repair -L /dev/sdX2. 重建日志
如果 xfs_repair -L 后仍无法挂载,可以尝试重建日志:
xfs_metadump /dev/sdX /tmp/xfs_metadump # 备份元数据(可选)
xfs_admin -z /dev/sdX # 重置日志(危险!会丢失未提交的数据)
mkfs.xfs -f /dev/sdX # 最后手段:重新格式化(数据会丢失)案例 3:XFS 文件系统元数据损坏(Metadata Corruption)
故障现象
XFS (sdX): Metadata corruption detected at xfs_agi_read_verify+0x5b/0x100 [xfs]
XFS (sdX): Unmount and run xfs_repair或
xfs_repair: bad inode magic number 0x12345678可能原因
- 元数据(如 inode、目录结构)损坏。
- 可能是由于磁盘坏块或软件 Bug。
修复方法
1. 使用 xfs_repair 修复
xfs_repair -v /dev/sdX如果失败,尝试 -L:
xfs_repair -v -L /dev/sdX2. 使用 xfs_db 手动修复
如果关键 inode 损坏,可以尝试手动修复:
xfs_db /dev/sdX
> inode <inode_number>
> write
> quit案例 4:XFS 文件系统只读(Read-only Filesystem)
故障现象
XFS (sdX): Filesystem has been set read-only或
mount: /dev/sdX is write-protected, mounting read-only可能原因
- 文件系统检测到错误,自动进入只读模式(防止进一步损坏)。
- 可能是磁盘 I/O 错误或硬件故障。
修复方法
1. 重新挂载为读写模式
mount -o remount,rw /dev/sdX /mnt2. 检查磁盘错误
smartctl -a /dev/sdX # 检查磁盘健康状态
badblocks -v /dev/sdX # 检查坏块3. 修复文件系统
umount /dev/sdX
xfs_repair -v /dev/sdX
mount /dev/sdX /mnt案例 5:XFS 文件系统空间异常(df 和 du 不一致)
故障现象
df -h # 显示磁盘已满
du -sh / # 但实际文件占用空间较小可能原因
- 可能是某些进程占用了已删除的文件(
lsof | grep deleted)。 - 可能是 XFS 的
free inode计数错误。
修复方法
1. 查找并清理被删除但仍占用的文件
lsof | grep deleted # 查看哪些进程占用已删除文件
kill -9 <PID> # 结束相关进程2. 重建 inode 计数
xfs_fsr /dev/sdX # 整理碎片(可能帮助恢复空间)
xfs_repair -v /dev/sdX # 修复 inode 计数总结:XFS 常见修复方法
| 故障类型 | 修复方法 |
|---|---|
| 超级块损坏 | xfs_repair -b <backup_sb> |
| 日志损坏 | xfs_repair -L |
| 元数据损坏 | xfs_repair 或 xfs_db 手动修复 |
| 文件系统只读 | mount -o remount,rw + xfs_repair |
| 空间异常 | `lsof |
⚠️** 重要建议:**
- 修复前先备份数据(如
xfsdump或dd)。 - 避免强制断电,XFS 对日志依赖较强。
- 定期检查磁盘健康(
smartctl、badblocks)。