什么是永久的ZFS错误表明?

我的zpool今天报告了几个permanent errors

  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 

这些文件似乎是相同的。 更重要的是,该文件工作得很好。 如果我在应用程序中使用它,它的行为就像我所期望的那样。

正如文档所述 :

数据损坏错误总是致命的。

但是根据我的基本文件validation,我不确定我是否理解fatal的定义。

状态:一个或多个设备遇到导致数据损坏的错误。 应用程序可能受影响。

操作:如果可能,还原有问题的文件。 否则从备份恢复整个池。

也许我错过了一些东西,但是就我所知,这个文件似乎是完全正确的,并且确实需要恢复,也没有显示任何腐败,尽pipeZFS的推荐。

我看过其他文章也有同样的错误 ,但我还没有find我的问题的答案。

什么是文件的永久性错误? 是否有一些较低级别的文件,这只是我不明显的问题? 如果是这样,那么为什么不能通过一个shasum来检测文件中的差异呢?

从一个非专业人士的angular度来看,我没有看到这个文件的任何错误。

zpool status的措辞有点误导。 永久性错误(在此上下文中)表示发生了I / O错误,并且已logging到该池的SPA(存储池分配器)错误日志中。 这并不一定意味着有不可修复的数据损坏。

你应该做的是在池上运行zpool scrub 。 擦洗完成后,SPA错误日志将被旋转,不再显示擦洗前的错误。 如果擦洗检测不到错误,则zpool status将不再显示任何“永久”错误。

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

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

编辑:完全同意@bahamat你应该尽快投入冗余。

永久性错误意味着文件中存在校验和错误,并且没有足够的副本进行修复。 这意味着由于I / O错误,至less有一次读取返回了损坏的数据。 如果无论收到什么读,然后写回到相同的磁盘文件,你现在有不可恢复的数据损坏。

看看你的游泳池configuration,看起来你没有冗余。 这是非常危险的 您没有获得ZFS的任何自我修复优势,但它可以告诉您什么时候存在数据损坏。 通常ZFS会自动和默默地纠正损坏的读取,但在你的情况下,它不能。 它也看起来像你已经运行zpool clear因为两个驱动器的CKSUM计数是0

不幸的是,没有副本,真的没办法知道。