首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >raidz1 vdev中的zfs校验和错误,但磁盘中没有

raidz1 vdev中的zfs校验和错误,但磁盘中没有
EN

Server Fault用户
提问于 2015-08-07 19:22:27
回答 2查看 1.9K关注 0票数 6

我正在备份存储在一个由一个带有2个硬盘的raidz组成的zpool中的数据。在此操作期间,我得到了校验和错误,现在状态如下:

代码语言:javascript
复制
  pool: tmp_zpool
 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
    tmp_zpool             ONLINE       0     0     2
      raidz1-0            ONLINE       0     0     4
        tmp_cont_0        ONLINE       0     0     0
        tmp_cont_1        ONLINE       0     0     0

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

        /some/file

让我感到困惑的是,校验和错误出现在vdev级别,而不是在磁盘级别。也许我应该指出,其中一个硬盘是内部的,另一个是外部的(这是暂时的情况)。这会是硬盘控制器的问题吗?

我能做些什么来取回受影响的文件吗?就像清除错误和导入vdev一样,只使用其中一个磁盘就会降级?我甚至没试着再读一次文件看看会发生什么。(不确定它是否会影响任何事情。)

更新:如果我清除错误并重新尝试的话,我就不再等待对可能出错的原因的解释了,所以我继续尝试。我首先做了zpool clear,然后zpool status没有显示错误。然后,我尝试读取带有错误的文件(其中两个在最后),但是相应的块仍然被报告为坏/不可读。这一次,zpool status不再显示越来越多的校验和错误。接下来,我尝试离线raidz1 vdev中的一个磁盘并重复这个过程,但是结果没有改变。在1.6T中,我总共损失了2块128 K。

答情况:目前,我发现这个问题没有全面的答案。如果有人想写一个或编辑一个现有的,请解决以下问题:

  1. 是什么导致了这种情况。
  2. 我们能做些什么。
  3. 它是如何被阻止的。

对于第一,理论及其问题似乎是:

  • 选择raidz1而不是raidz2。问题:raidz2至少需要4个磁盘。虽然对冗余的需求是明确的,但是反复提出失败的冗余的解决方法是更多的冗余是没有用的。了解如何最好地利用您拥有的冗余将更加有用。
  • 选择raidz1而不是mirror。问题:乍一看,两者的区别似乎是效率,而不是冗余。不过,这可能是错的。原因: zfs保存每个磁盘上每个块的校验和,但这两个磁盘都没有报告单个校验和错误。这似乎表明,对于每一个坏块,这两个磁盘包含不同的块有效载荷,每个磁盘都有一个匹配的校验和,而zfs无法判断哪个是正确的。这意味着有两种不同的校验和计算,它们之间的有效载荷以某种方式改变了。这可以用RAM损坏来解释,可能(需要确认)如果选择mirror而不是raidz1,只需要一次校验和。
  • 在写作,而不是阅读中,拉姆腐败。正如上文所解释的,这似乎是有道理的。问题:为什么没有在写入时检测到这是一个错误?难道zfs不检查它所写的内容吗?或者说,写入不同磁盘的块有效载荷是相同的?

2:

  • 由于磁盘没有单独的校验和错误,那么在zfs中是否有一些低级的方法来访问这类坏块的两个不同副本?

3:

  • 很明显,mirror over raidz1会阻止这种情况发生吗?
  • 我想这一污点已经检测到问题了。在我的例子中,我正在移动一些数据,在实际读取这个zpool之前,我销毁了源数据,认为我有2个磁盘冗余。这里的寓意是在相信它的内容之前先擦洗一下它吗?当然,擦洗是有用的,但有必要吗?例如,是否需要使用mirror而不是raidz1来进行清洗?
EN

回答 2

Server Fault用户

发布于 2015-08-07 20:51:15

这是raidz1 (以及RAID5)的问题所在。如果磁盘上的数据发生变化,但没有发生驱动器故障,以让ZFS或RAID控制器知道是哪个驱动器导致了错误,那么它就无法知道哪个驱动器是正确的。使用raidz2 (和更高版本)或RAID6,您将获得足够多的驱动器,这些驱动器可以决定在重建过程中忽略哪个驱动器。

您在这里的唯一解决方案是通过还原备份副本或将/dev/null写入文件来覆盖该文件。

票数 3
EN

Server Fault用户

发布于 2016-09-02 01:16:42

我遇到了一个类似的问题。我不确定这是否有帮助,但我发现这篇关于vdev级校验和错误的相关文章来自于FreeBSD开发人员。

https://lists.freebsd.org/pipermail/freebsd-hackers/2014-October/046330.html

如果vdev_raidz.c无法确定哪个叶vdev负责,则校验和错误将出现在raidz而不是叶上。如果两个或多个叶vdevs返回同一块的坏数据,也会导致不可恢复的数据错误,则可能会发生这种情况。我看到您有一些无法恢复的数据错误,所以可能就是发生在您身上的情况。ZFS中的一些细微的设计错误也会导致vdev_raidz.c无法确定哪个子程序负责校验和错误。但是,只有在raidz vdev有镜像子时才会发生这种情况。只有当子程序是备用或替换vdev时,才会发生这种情况。您是否激活了任何备件,还是手动替换了vdev?

我自己正在考虑删除我的zpool.cache文件并导入我的池来重新生成那个zpool.cache文件。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/711677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档