XFS 检查/修复失败

XFS 检查/修复失败

我在 EC2 实例上有一个 mysql 数据库服务器,该服务器有 3 个驱动器,组成一个 Raid 0 阵列。今天早上,服务器崩溃了,在检查日志后,我注意到一个“结构需要清理”错误(即系统错误代码 117)。我尝试在受影响的驱动器上运行 xfs_check,但返回的结果如下:

xfs_repair: /dev/md0 contains a mounted filesystem

fatal error -- couldn't initialize XFS library

我安装了所有必要的工具/包,因此我检查了系统日志并返回了以下内容:

Filesystem "md0": XFS internal error xfs_da_do_buf(2) at line 2112 of file /build/buildd/linux-ec2-2.6.32/fs/xfs/xfs_da_btree.c.  Caller 0xffffffff81261bb5

尝试 xfs_repair 后,我仍然看到与上面相同的输出和相同的系统日志条目。

由于问题只出现在一个数据库目录中,有没有办法修复上述问题,或者让 mysql 忽略数据库目录以继续运行(即手动删除数据库,同时保持 lib 目录完好无损)。任何建议都会有所帮助。

答案1

卸载当前已安装的所有内容。xfs_repair 有时对此有点挑剔。如果无法卸载该分区,请运行 lsof /mountedpartition 查看是什么仍使该分区保持打开状态。

根据其关闭方式,您可能需要执行 -L 来清除日志,并且无论您的偏好如何,请在 xfs_repair 上使用 -P - xfs_repair 通常会运行并卡住并停留在那里,-P 允许它继续。

如果您想检查进度,可以从另一个终端会话中,strace -p(xfs_repair 的 pid),您可以查看它是否仍在执行某项操作。

我不知道您正在运行哪个版本的 xfsprogs/xfsdump,但是,看看是否有适合您操作系统的升级 - 有一些较新的升级(最近 8 个月)可以解决一些奇怪的缓冲区溢出问题。XFS Tools 目前为 3.1.5。

在修复过程中,您将无法非常轻松地选择性地删除目录 - 不过,该错误消息表明您将看到一些数据丢失,或者,您将在 /lost+found 中找到文件。根据结构的严重程度,您可能会发现数据丢失很少。如果您真的想深入了解,您可以故意遍历元结构并清除某些位,但我认为您可能会发现这非常复杂。

或者,mkfs 并从备份中恢复。

重新读取后,发现文件系统已挂载,您可以关闭 mysql,将一个损坏的数据库目录移出 mysql 目录,然后重新启动 mysql。文件系统应该会在某个时候被清理,但是,如果唯一的问题是该目录,并且您能够挂载该文件系统,那么您应该能够写入/移动该目录。

相关内容