我有一个 XFS 文件系统,文件系统错误影响了一些非关键文件。我希望修复它;公司希望在出现这些错误的情况下继续运营。 不修复出现“结构需要清理”错误的 XFS 文件系统有哪些已知风险?
公司希望避免可能需要的漫长维护期。我一直坚信文件系统损坏是不能容忍的。除了我自己的 FUD 之外,公司还会问我修复它的理由。
需要什么样的答案
我已经有了自己的观点;我还需要更多。
答案应该有证据支持(轶事也可以,但必须有第一手记录。我们不需要“有人告诉我”的答案)。 专家任何意见都可以,比如来自 XFS FAQ 的答案,或者来自熟悉 XFS 内部结构的开发人员的答案)。
请不要发表外行意见。我正在寻找证据、可靠的轶事和XFS 专家观点。
否定的回答(例如“在类似情况下,我跑了一年,没有遇到严重问题”)是可以的。
文件系统详细信息。
文件系统为5.4T,已使用3.9T(72%)。
共有 46.6M 个文件。
错误详情
有 55 个损坏的目录会导致ls
和等应用程序find
报告“结构需要清理”,如此 XFS 常见问题解答条目:
问:我看到应用程序返回错误 990 或“结构需要清理”,这是什么问题?
错误 990 代表 EFSCORRUPTED,这通常意味着 XFS 检测到文件系统元数据问题并关闭了文件系统以防止进一步损坏。此外,自 2006 年 6 月左右以来,我们从 EFSCORRUPTED/990 转换为使用 EUCLEAN,“结构需要清理”。不幸的是,原因可能几乎是任何东西 - 文件系统、虚拟内存管理器、卷管理器、设备驱动程序或硬件。当这种情况最初发生时,应该有一个详细的控制台消息。这些消息包含重要信息,提示开发人员最早检测到问题的时间点。它的存在是为了保护您的数据。您可以使用 xfs_repair 来解决问题(卸载文件系统)。
记录的syslog
所有 XFS 错误如下所示:
XFS (sdb): Metadata corruption detected at xfs_inode_buf_verify+0x6d/0xe0 [xfs], block 0x50
XFS (sdb): Unmount and run xfs_repair
XFS (sdb): First 64 bytes of corrupted metadata buffer:
ffff88073fa79000: 49 4e 41 ff 02 01 00 00 00 00 01 f6 00 00 01 f7 INA.............
ffff88073fa79010: 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 ed ................
ffff88073fa79020: 59 1b af d2 09 62 5c 17 4f e8 f8 73 00 00 00 00 Y....b\.O..s....
ffff88073fa79030: 57 e0 73 b2 27 23 63 cd 00 00 00 00 00 00 00 2f W.s.'#c......../
XFS (sdb): metadata I/O error: block 0x50 ("xfs_trans_read_buf_map") error 117 numblks 16
XFS (sdb): xfs_imap_to_bp: xfs_trans_read_buf() returned error 117.
这些错误重复多次但仅针对两个块。
答案1
文件系统应该真正脱机并进行检查/修复,至少有两个很好的理由:
- 目录上的元数据错误基本上会使它们不受您的控制。您无法控制
ls
它们,也无法在其中创建/删除文件。 - 元数据错误可能会触发 XFS 故障安全机制 - 文件系统关闭。如果发生这种情况,您的客户将要采取未安排停机时间,可能在最差任何时候都不要错过。最好将停机时间安排在安静的时间(即夜间)。
一些建议:
- 在运行完整版本之前
xfs_repair
,您可以使用转储所有文件系统元数据xfs_metadump
,然后对其运行“虚拟”版本xfs_repair
。这将使您能够观察xfs_repair
文件系统将做什么 - 是当然在尝试修复之前要有有效且最新的备份
- 如果你真的真的,真的无法关闭文件系统和如果有问题的目录中包含的文件不重要或不太重要,您可以尝试删除目录本身。这将有效地“断开”有问题的元数据区域。请务必了解这只是一个(糟糕的)解决方法;此外,如果删除失败,XFS 可能会关闭整个文件系统,迫使您进行计划外的停机。
答案2
您应该修复您的文件系统,因为它可能表明存储阵列或硬件存在潜在问题。
留出停机或维护的时间...或争取更好的冗余。
此时我将检查硬件的健康状况。
假设你正在使用企业 Linux 操作系统(而不是 Arch Linux),有一个创造性的解决方案可用。您可以使用当前版本的任何Linux HotCopy 实用程序/驱动程序是并为您的文件系统创建块级快照。使用以下命令挂载该文件系统:
mount -t xfs -o nouuid,norecovery /dev/hcp1 /some-mountpoint
从那里,您可以运行xfsrepair
快照来了解问题的严重性、问题列表并进行时间测试。
完成后卸载并销毁快照。