当我在没有 ECC 内存和 ZFS 文件系统的系统上工作时,拥有具有 ECC 内存和 ZFS 文件系统的 NAS 是否有好处?

当我在没有 ECC 内存和 ZFS 文件系统的系统上工作时,拥有具有 ECC 内存和 ZFS 文件系统的 NAS 是否有好处?

最近我读到了一些有关非 ECC RAM 和典型文件系统的系统损坏率的惊人统计数据。从我在 Google 上搜索到的信息来看,拥有运行 ZFS 的 ECC RAM 系统可能是防止损坏的最佳方法。大部分信息都来自 NAS 讨论。

我知道这样的系统对于存档文件很有用,假设它们在源机器上没有损坏并且通过网络完美传输。

我无法在 Google 上搜索到的是:当我在不太可靠的计算机上处​​理文件时,拥有最可靠的 NAS 托管文件(或作为备份)有什么意义?我也找不到有关 Samba 错误更正的良好信息(无论支持 ZFS 的操作系统(如 FreeNAS 或 OpenIndiana)的最新版本是什么)——如果它容易出错,那么几乎所有其他东西都是毫无意义的(除非我亲自散列所有内容并验证所有传输)。

如果我不想担心位衰减等问题,我是否需要(形象地说)丢弃我当前的系统并用(微型)服务器级硬件替换它们?如果我选择这种方式,我是否可以合理地期望拥有除运行 ZFS 之外的任何其他资源?无需花费数千美元?

我的用例:

我关心的不仅仅是播放(例如电影和其他媒体)。我经常在家用电脑上编程。例如,我有越来越多的 SQLite 数据库文件用于各种项目。其中一个损坏可能会很麻烦。我还有许多 GB 的家庭和度假照片,我不仅想存档,还想整理、标记等。所以,虽然我没有经营银行,但我有一些难以替代的东西,我不愿意想到它们被“悄无声息地损坏”。

答案1

ZFS 对于其运行的硬件非常挑剔。

这并不意味着您必须拥有完全正确的芯片组、显卡、磁盘固件版本等,而是硬件提供的功能。请记住,ZFS 是作为高端服务器解决方案设计的,它所做的某些假设反映了这一点。

ZFS 之所以如此适合存储您关心的数据,主要原因在于您可以设置它,以便能够同时检测并纠正存储中的错误。这可能是微不足道的错误,例如某处的一个位翻转,也可能是灾难性的错误,例如多个磁盘同时崩溃。只要您保持高于存储布局的冗余阈值(例如,raidz2 vdev 中同时出现问题的磁盘不超过两个),ZFS 就可以使用冗余数据纠正任何错误。进一步的错误(取决于它们发生的位置和方式)可能会导致(半)正常系统崩溃或简单的 I/O 错误。

如果操作正确,您还将设置系统定期清理 ZFS 池。这将在性能下降成为问题之前发现它,并通知您,以便您可以考虑在性能下降成为问题之前更换无法保存数据的存储设备。

然而,这种伟大取决于 RAM 是否值得信赖。所有这些验证、更正、重写等主要发生在 RAM 中。在高端服务器上,除了 ECC RAM 之外,你找不到任何其他东西。

ZFS 以相同的方式保护(和处理)池元数据、文件系统元数据和用户数据。这里没有什么真正的区别。

如果您的工作站系统发生 RAM 位翻转,那么当您将位翻转的数据写入 ZFS 时,位翻转的数据将成为 ZFS 最终写入磁盘的基础。这显然很糟糕,因为这意味着您的文件将被损坏。但是,位翻转的数据将就 ZFS 而言是正确的. 这实际上是好的,因为这意味着所有正常的 ZFS 恢复方法都将起作用。是的,相关文件的最新副本将损坏,但是无论如何这都是腐败的,无论您使用什么文件系统。您可以利用 ZFS 的快照至少能够回到未损坏的副本。设置类似zfs 自动快照定期、紧密地对文件系统进行快照,保留较粗略的历史记录,然后将其忘掉,直到需要它们为止。(例如,每隔十分钟保留十个快照;每隔一小时保留五十个快照;每隔六小时保留三十个快照;依此类推。)快照在 ZFS 中几乎是免费的;如果您使用 ZFS,使用快照也一样。

如果运行 ZFS 的存储服务器遇到 RAM 故障,无论是位翻转还是位卡住(一个或多个),并且存储服务器中有 ECC RAM,则会检测到这种情况,并记录事件或暂停系统(如果无法纠正错误)。无论哪种方式,服务器上存储的数据的完整性都会得到保留。如果您的 ZFS 存储服务器有非 ECC RAM,那么错误就会传播到你的所有数据和元数据中因为 ZFS 试图“纠正”那些实际上只是计算机想象出来的错误。最糟糕的情况是,这实际上发生在人们身上,您的整个池将因此被破坏,并且您的所有数据都将消失。存储级别/vdev 级别的冗余在这里也无济于事。对于大多数其他文件系统(没有自动更正行为),只有直接受位翻转影响的地方才会损坏,如果这种情况发生在文件系统元数据上,则很可能通过传统的文件系统检查器和恢复工具轻松修复。ZFS 没有这个逃生出口;没有 fsck.zfs。(有zpool 擦洗,但如果泳池损坏无法修复,这种方法就不起作用。)

我一直无法在 Google 上搜索到的是:当我在可靠性较低的计算机上处​​理文件时,拥有最可靠的 NAS 托管文件(或作为备份)有什么意义呢?

这意味着您拥有一个值得信赖的数据存储库。您知道,一旦数据进入 NAS,就不会损坏。任何损坏都会自动修复,或者您会收到有关问题的通知(对于 ZFS,通过 I/O 错误)。在使用不太可靠的系统处理数据时,数据可能仍会损坏,但您将有地方可以找到已知的未损坏副本。即使只有 NAS 系统设置了 ECC RAM、ZFS 和高质量存储监控和警报,这也是一个优势。

然后,如果需要,您可以根据预算向其他系统添加(特别是)ECC RAM,以填补最后的漏洞。

如果我不想担心位衰减等问题,我是否需要(形象地说)丢弃我当前的系统并用(微型)服务器级硬件替换它们?如果我选择这种方式,我是否可以合理地期望拥有除运行 ZFS 之外的任何其他资源?无需花费数千美元?

首先,您实际上不需要服务器级硬件。您主要需要的是 ECC RAM(以及支持 ECC RAM 的 CPU 和内存控制器/芯片组),合理可靠的永久存储,理想情况下,机箱应便于在系统运行时添加和移除磁盘。这不必非常昂贵,当然也不必花费“数千美元”。

其次,ZFS 喜欢 RAM,但主要用于缓存。对于大多数工作负载,8-16 GB 的 RAM 应该足够了,而 24-32 GB(即使是“消费级”主板也可以轻松获得)即使购买高品质品牌 ECC RAM 也仍然价格合理。ZFS 并不消耗大量 CPU;您可以让它需要大量 CPU(例如佐利,通过设置 sha256、gzip-9 压缩和可能的重复数据删除组合),但您不必这样做。我自己的系统运行 ZFS,性能不是很高(FX-6100 CPU 时钟频率降低),我到处都使用 sha256,即使在纯顺序 I/O 中,磁盘也是限制因素:一旦它通过了清理的初始小随机读取部分,我在清理上获得的吞吐量与我在dd底层存储设备上的原始数据上获得的吞吐量大致相同,并且 CPU 有空闲。

答案2

我一直无法在 Google 上搜索到这样的问题:当我在可靠性较低的计算机上处​​理文件时,拥有最可靠的 NAS 托管文件(或作为备份)有什么意义呢?

发生错误的可能性是累积的。

换句话说(使用虚假数字):
如果 NAS 出现问题的可能性为 10%,并且
另一台设备出现问题的可能性为 10%,
那么从 NAS 读取某些内容并在另一台设备上播放时出现故障的可能性为 20%。

我也找不到有关 Samba 错误更正的良好信息

哪个 Samba 版本。三个版本之间的协议变化很大。

如果它容易出错,那么几乎所有其他事情都是毫无意义的(除非我亲自对所有内容进行哈希处理并验证所有传输)。

总是存在错误的风险。这些确实会发生。它们确实会被检测到并纠正(例如通过校验和)。使用 RAM 时并非总是如此,您可以通过使用奇偶校验和/或 ECC 来改进这一点。然而,这些问题相对不太可能发生,您需要在镀金(且昂贵)设计和“足够好”之间找到平衡。

对于我们中的某些人来说,这种平衡将截然不同(例如,银行需要完美的东西)。他们可能不保证在用于播放电影的个人系统上使用 ECC。

答案3

连接:

我尝试阅读 Samba 网站上的文档,但无法确定 Samba 是否具有错误更正功能。我不得不假设最坏的情况 - Samba 依赖底层网络来避免错误。如果底层网络是 TCP/IP,那么似乎唯一的保护就是弱校验和。

我最终选择了 iSCSI,因为它支持使用 CRC32C 算法的可选标头和数据摘要。这超出了 TCP/IP 检查。

有什么好处吗?

对我来说,答案是“是的,至少在一种情况下。”我可以使用我信任的程序将文件备份到服务器级 ZFS 机器。然后我可以定期检查据称原始机器上未修改的文件是实际上未修改。如果有差异,我可以从服务器恢复备份。

唯一的弱点是当文件在不可靠的消费级机器上被故意修改时。由于在那些短时间内发生损坏的可能性很小,所以我觉得这是可以接受的。如果我碰巧发现在修改过程中发生了损坏,我将有增量备份可以依靠。

用一台功能强大到足以运行 ZFS 的服务器替换我的电脑,并且剩余的资源可以作为我的主要电脑?

也许吧,但成本太高了。我对上面描述的场景很满意,所以我不会尝试这个。

相关内容