ZFS永久错误指示什么?


18

permanent errors今天在我的zpool上报道了几个。

  pool: seagate3tb
 state: ONLINE
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
   see: http://zfsonlinux.org/msg/ZFS-8000-8A
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        seagate3tb  ONLINE       0     0    28
          sda       ONLINE       0     0    56

errors: Permanent errors have been detected in the following files:

        /mnt/seagate3tb/Install.iso
        /mnt/seagate3tb/some-other-file1.txt
        /mnt/seagate3tb/some-other-file2.txt

编辑:我确定这些CKSUM值是否正确。我正在编辑数据,并且可能错误地处理了这些数据。它们可能是0。不幸的是,我在笔记中找不到结论性的答案,并且现在已解决了错误,因此我不确定,但是其他所有信息都是准确的/反映了zpool报告的内容。

/mnt/seagate3tb/Install.iso 是报告为永久错误的一个示例文件。

这是我感到困惑的地方。如果将“永久错误” Install.iso与另一个文件系统上相同文件的备份进行比较,它们看起来是相同的。

shasum "/mnt/seagate3tb/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/seagate3tb/Install.iso
shasum "/mnt/backup/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/backup/Install.iso
cmp /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso
diff /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso

这些文件似乎是相同的。此外,该文件可以正常运行。如果我在应用程序中使用它,它的行为就像我期望的那样。

文档所述

数据损坏错误始终是致命的。

但是根据我的基本文件验证,我不确定我是否了解的定义fatal

状态:一台或多台设备发生错误,导致数据损坏。应用程序可能会受到影响。

行动:如果可能的话,还原相关文件。否则,从备份还原整个池。

也许我丢失了一些东西,但是据我所知,该文件似乎还不错,尽管从ZFS推荐了,但确实需要任何还原,也没有显示任何损坏。

我见过的其他文章了同样的错误,但我还没有找到一个回答我的问题。

文件的永久错误是什么?文件中是否存在一些我不太容易发现的较低级别的问题?如果是这样,为什么a不能将其检测shasum为文件中的差异?

从外行的角度来看,我看不出任何迹象表明此文件有任何错误。


你有快照吗?
ewwhite'9

3
既然没有其他人说过,请问我可以欢迎您参加ServerFault吗?在我看来,这是一个很好的第一个问题,我希望它能继续提供有益的答案。希望您决定坚持使用SF,并继续做出贡献。
MadHatter

谢谢@MadHatter!我感谢您的热情欢迎,并且一定会继续关注SF。我已经将其添加到我的SE社区的简要列表中。
Will Haley

Answers:


22

的措词zpool status有点误导。永久错误(在此情况下)表示发生了I / O错误,并已将该I / O错误记录到该池的SPA(存储池分配器)错误日志中。但这并不一定意味着有不可恢复的数据损坏。

您应该做的是zpool scrub在池上运行。清理完成后,SPA错误日志将被轮换,并且不再显示清理之前的错误。如果清理未检测到错误,zpool status则将不再显示任何“永久”错误。

关于文档,就是说以这种方式仅记录“致命错误”。致命错误是ZFS无法自动纠正的I / O错误,因此作为失败的I / O暴露给应用程序。相反,如果立即成功重试了I / O或冗余设备满足了逻辑I / O,则不会将其视为致命错误,因此不会记录为数据损坏错误。

致命错误并不一定意味着永久性数据丢失,而只是意味着在将其传播到应用程序之前无法修复。例如,电缆松动或控制器损坏可能会导致暂时的致命错误,ZFS将其描述为“永久性”。这是否确实是一个问题,取决于I / O的性质以及应用程序是否能够从I / O错误中恢复。

编辑:完全同意@bahamat,您应该尽快投资于冗余。


SPA错误日志将其报告为“永久”确实确实有些误导。在zpool scrub做了你的建议正是@汤姆-肖,和你的解释非常有意义。清理后,我不再在此阵列上看到任何“永久性错误”。在读取失败的情况下,我没有想到致命错误。我认为这一定是您建议的读取中的临时I / O错误。我也完全同意冗余的需求。
Will Haley

汤姆,有一段时间没见到你了。欢迎回来。
the-wabbit's

7

永久错误表示文件中存在校验和错误,并且副本不足以修复。这意味着至少有一个读取由于I / O错误而返回了损坏的数据。如果任何人收到了读取的内容,然后将其写回到同一磁盘文件中,那么您现在将出现不可恢复的数据损坏。

查看您的池配置,看来您没有冗余。这是非常危险的。你没有得到任何的ZFS的自我修复的好处,但能够告诉你什么时候出现了数据损坏。通常,ZFS会自动且无声地纠正损坏的读取,但您不能这样做。zpool clear由于两个驱动器的CKSUM计数相同0,因此您似乎已经在运行。

不幸的是,没有副本,实际上没有办法知道。


2
是否不仅zpool clear清除错误计数,还清除错误消息本身?消息仍然存在很奇怪,但是没有显示错误。
user121391'9

2
我很抱歉。为了保护隐私,我从永久性错误列表中省略了这些文件。在编辑该输出时,我还处理了CKSUM计数并丢失了有价值的上下文。我已经编辑了问题以反映现实。@ user121391
Will Haley

在这种情况下,如果您显示的数字正确,那么您可能在某处出现硬件错误。由于两个磁盘都显示CKSUM counts它可能是控制器,电缆或两个磁盘之间的任何共享硬件。两个磁盘都可能出现故障。无论如何,这突显了需要尽快添加冗余并检查指示的文件是否损坏。
bahamat

OP似乎没有任何冗余;vdev有56个CKSUM错误,而池有28个CKSUM错误。因此,我不确定您先前的评论中“两个磁盘”指的是什么。我同意你对冗余价值的观点。
CVn

你是对的。我误读了池名称,好像它是另一个磁盘一样。感谢您指出了这一点。
bahamat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.