vrms Asked: 2017-08-07 16:57:21 +0800 CST2017-08-07 16:57:21 +0800 CST 2017-08-07 16:57:21 +0800 CST btrfs/ZFS 是否会使 ECC RAM 过时? 772 建议在服务器中使用ECC RAM ,以尽量减少/防止数据损坏。 如果您的服务器使用btrfs(或ZFS)作为文件系统(据说这两者都可以防止数据损坏),ECC RAM 会过时吗? ram 2 个回答 Voted Best Answer ben-Nabiy Derush 2017-08-08T07:25:46+08:002017-08-08T07:25:46+08:00 我不确定 btrfs,但是 ZFS 和 ECC RAM 就像吐司和黄油……但是没有 ECC 的 ZFS 也像吐司和黄油。 TL;DR- 将 ECC RAM 与 ZFS 一起使用是好的(因为使用 ECC RAM 通常是好的),但不将 ECC RAM 与 ZFS 一起使用不会对您造成伤害,因为 ZFS 就是那么好。不过,我不会说 ECC RAM 已经过时,因为除了文件系统存储之外,还有更多的事情要做。任何地方的错误都是不好的。ZFS 只是帮助限制文件系统中的错误。以下是如何/为什么... 请参阅http://jrs-s.net/2015/02/03/will-zfs-and-non-ecc-ram-kill-your-data/并仔细阅读。感谢 Jim Salters 以下内容。 如果该站点丢失,我将发布相关位: 第一:ECC内存 什么是 ECC 内存?这是个好主意吗? ECC 代表纠错校验和。简而言之,ECC RAM 是一种特殊的服务器级内存,可以检测和修复一些最常见的内存损坏。有关 ECC RAM 如何做到这一点的更多详细信息,以及它可以纠正和无法纠正的错误类型,请参见此处的兔子洞。 现在我们知道了 ECC RAM 是什么,这是个好主意吗?绝对地。内存错误,无论是由于硬件故障还是宇宙辐射的影响(是的,真的)都是一回事。它们确实发生了。如果它发生在一个特别具有战略意义的地方,您将丢失数据。时期。这没有什么好争论的。 第二:ZFS 什么是 ZFS?这是个好主意吗? ZFS 是一个校验和文件系统。这意味着对于每个提交到存储的块,还会写入该块内容的强哈希(有点误导性的 AKA 校验和)。(验证哈希写在指向块本身的指针中,它也在指向自身的指针中进行校验和,依此类推。一直是海龟。兔子洞从这里开始。) 这是一个好主意吗?绝对地。将 ZFS 校验和与冗余或奇偶校验相结合,现在您就拥有了一个自愈阵列。如果磁盘上的块损坏,下次读取它时,ZFS 将发现它不匹配其校验和并加载冗余副本(在镜像 vdev 或多副本存储的情况下)或重建奇偶校验副本(在RAIDZ vdevs 的情况),并假设该块的副本与其校验和匹配,它将默默地为您提供正确的副本,并针对第一个未通过的块记录校验和错误。 ZFS 还支持清理,这将在下一节中变得重要。当您告诉 ZFS 清理存储时,它会读取它知道的每个块(包括冗余副本)并检查它们与它们的校验和。假设存在一个好的(通过的)副本,无论是冗余的还是从奇偶校验重建的,任何失败的块都会被好的块自动覆盖。定期清理是维护 ZFS 存储池以防止长期损坏的重要部分。 情况/关注 ZFS 和 non-ECC 是否比 not-ZFS 和 non-ECC 差?死亡磨砂怎么样? 好的,很容易证明 RAM 中的翻转位意味着数据损坏:如果您将翻转的位写回磁盘,恭喜,您只是写入了错误的数据。没有什么可争论的。这里真正的问题不是 ECC 是否好用,而是非 ECC 是否在 ZFS 中特别成问题。通常抛出的场景是可怕的死亡磨砂。 TL;DR 版本的场景:ZFS 位于具有非 ECC RAM 的系统上,该 RAM 有一个卡住位,其用户启动清理,并且由于内存损坏,好块无法通过校验和测试并被损坏的数据覆盖,因此立即谋杀了整个游泳池。据我所知,这个想法起源于 FreeNAS 论坛上一位名叫 Cyberjock 的非常多产的用户,他在 这里的这个帖子中进行了阐述。这是一个可怕的想法——如果本应保护系统安全的东西杀死了它怎么办?磨砂发疯了!不! 问题是,所写的场景实际上没有意义。一方面,即使您在 RAM 中有一个特定的地址有一个卡住的位,您也不会让整个文件系统通过该地址运行。这不是内存管理的工作方式,如果它是内存管理的工作方式,您甚至无法启动系统:当它首先无法加载操作系统时,它会崩溃并严重烧毁。所以不,你可能会在这里和那里破坏一个块,但你不会通过一个粉碎机块一个宝贵的块来扭曲整个文件系统。 但是我们这里便宜。假设您以这种方式只破坏了 5,000 个区块中的一个。那仍然是地狱般的。因此,让我们研究一下在清理期间由于 RAM 损坏而损坏某些数据的更合理的想法。让我们假设我们的 RAM 不仅不能 100% 正常工作,而且是非常邪恶的,并尝试其天真但热情的最佳方式来专门在清理期间杀死您的数据: 首先,你读一个块。这个板块不错。将非常好的数据写入具有完全匹配校验和的非常好的磁盘。但是该块被读入邪恶的 RAM,并且邪恶的 RAM 翻转了一些位。也许这些位在数据本身中,或者这些位在校验和中。无论哪种方式,您的完美块现在似乎与它的校验和不匹配,并且由于我们正在清理,ZFS 将尝试实际修复磁盘上的“坏”块。哦哦!现在怎么办? 接下来,您读取同一块的副本——该副本可能是冗余副本,或者可能是从奇偶校验重建的,具体取决于您的拓扑。冗余副本很容易可视化——您实际上将块的另一个副本存储在另一个磁盘上。现在,如果你的邪恶 RAM 不理会这个块,ZFS 将看到第二个副本与它的校验和匹配,因此它会用原来的相同数据覆盖第一个块——这里没有数据丢失,只是浪费了几个磁盘周期. 好的。但是,如果你的邪恶 RAM 在第二个副本中翻转了一点怎么办?由于它也不匹配校验和,因此 ZFS 不会覆盖任何内容。它为该块记录一个不可恢复的数据错误,并在磁盘上保留两个副本不变。没有数据被损坏。 嗯,嗯。这听起来不是那么糟糕。那么,为了在清理期间用损坏的数据实际覆盖好数据,您的邪恶 RAM 需要做什么?嗯,首先它需要在它想要破坏的每个块的初始读取期间翻转一些位。然后,在第二次从奇偶校验或冗余读取块的副本时,它不仅需要翻转位,还需要以这样的方式翻转它们,从而获得哈希冲突。换句话说,随机位翻转是行不通的——您需要在数据中进行一些位翻转(在校验和中有或没有更多位翻转),这会将损坏的数据正确地散列到校验和中的值。默认情况下,ZFS 使用 256 位 SHA 验证哈希,这意味着单个位翻转有 2 ^ 256 分之一的机会为您提供现在匹配其校验和的损坏块。公平地说,我们在这里使用了邪恶的 RAM,所以它可能会做大量的实验,它会尝试翻转数据和校验和本身的位,并且它会对任何单个块进行多次。但是,这是 2^256 中 1 的倍数(也就是大约 10^77 中的 1)的机会,这仍然使得它几乎不可能真正发生……如果你的 RAM 是那么邪恶,无论你在使用它,它都会杀死你的数据ZFS 与否。 回复:擦洗 这里输入了一个关于数据丢失的有效问题。谨慎! 但是,如果我不擦洗怎么办? 好吧,如果您不擦洗,那么您的邪恶 RAM 将不得不等待您实际写入有问题的块,然后才能破坏它们。不过,幸运的是,您几乎整天都在写入存储……包括组织整个套件和 kaboodle 的元数据。第一次更新文件所在的目录时,BAM!搞定了!如果你停下来想一想,在这种邪恶的 RAM 场景中,ZFS 非常有用,因为你的 RAM 现在不仅需要邪恶,而且还需要足够亮以持续进行碰撞攻击。因此,如果您运行的非 ECC RAM 结果令人震惊,Lovecraftianishly 邪恶,ZFS 将减轻损害,而不是放大它。 顺便说一句,如果您使用的是 ZFS 并且没有进行清理,那么您就是在为长期失败做好准备。如果您有磁盘损坏,则只要您确实拥有损坏块的冗余或奇偶校验副本,那么清理可以修复它,这是好的。一旦你破坏了给定块的所有副本,修复它为时已晚——它已经消失了。不要害怕擦洗。(好吧,也许在高需求时期对清理的性能影响有点警惕。但不要担心清理会杀死你的数据。) 再次感谢 Jim Salters 发表这篇文章。 Sergei Krivonos 2018-04-05T13:33:41+08:002018-04-05T13:33:41+08:00 ECC是循环编码,类似于紧凑校验和,也可以纠正值。 你需要两个ECC。否则,数据在写入之前通过内存传输时可能会损坏,ECC FS 接受损坏并以这种方式保护它。如果它在非 ECC FS HDD 上损坏,则 ECC 内存在加载时接受损坏的数据。无论如何,好的服务器只允许 ECC 内存。 有关更多详细信息,请参阅https://en.wikipedia.org/wiki/Hamming_code#Hamming_codes_with_additional_parity_(SECDED)和https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction。 假设它向字节添加了三个额外的位,并允许检测和修复最多两个错误位。 正如您现在看到的,ECC 应用到 FS 和 RAM 是独立的。 RAID6 还允许您将 ECC 与任何 FS 一起使用。
我不确定 btrfs,但是 ZFS 和 ECC RAM 就像吐司和黄油……但是没有 ECC 的 ZFS 也像吐司和黄油。
TL;DR- 将 ECC RAM 与 ZFS 一起使用是好的(因为使用 ECC RAM 通常是好的),但不将 ECC RAM 与 ZFS 一起使用不会对您造成伤害,因为 ZFS 就是那么好。不过,我不会说 ECC RAM 已经过时,因为除了文件系统存储之外,还有更多的事情要做。任何地方的错误都是不好的。ZFS 只是帮助限制文件系统中的错误。以下是如何/为什么...
请参阅http://jrs-s.net/2015/02/03/will-zfs-and-non-ecc-ram-kill-your-data/并仔细阅读。感谢 Jim Salters 以下内容。
如果该站点丢失,我将发布相关位:
第一:ECC内存
第二:ZFS
情况/关注
回复:擦洗
这里输入了一个关于数据丢失的有效问题。谨慎!
再次感谢 Jim Salters 发表这篇文章。
ECC是循环编码,类似于紧凑校验和,也可以纠正值。
你需要两个ECC。否则,数据在写入之前通过内存传输时可能会损坏,ECC FS 接受损坏并以这种方式保护它。如果它在非 ECC FS HDD 上损坏,则 ECC 内存在加载时接受损坏的数据。无论如何,好的服务器只允许 ECC 内存。
有关更多详细信息,请参阅https://en.wikipedia.org/wiki/Hamming_code#Hamming_codes_with_additional_parity_(SECDED)和https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction。
假设它向字节添加了三个额外的位,并允许检测和修复最多两个错误位。
正如您现在看到的,ECC 应用到 FS 和 RAM 是独立的。
RAID6 还允许您将 ECC 与任何 FS 一起使用。