在这个问题,迈克尔·柯约林和用户121391似乎表明 RAIDZ1(ZFS 中相当于 RAID5)不可靠,我应该使用 RAIDZ2(ZFS 中相当于 RAID6)。user121391 在那里评论:
重建故障驱动器时,必须读取所有驱动器的所有数据。这会增加磁盘的压力(特别是当它们通常大部分时间处于空闲状态时),因此另一个驱动器发生故障的可能性也会增加。此外,在读取所有数据时,您可能会从其中一个磁盘获得 URE,而没有第二个磁盘可以补偿,这意味着文件可能会损坏/丢失。第三,磁盘越大,漏洞窗口就越长,不仅仅是这些问题,还有磁盘或系统上可能发生的任何问题(断电等)。
对于我的具体用例(家庭媒体服务器),我希望获得一些容错性,在冗余存储方面花费最少。所有不可恢复的数据都将被备份,但非常如果驱动器发生故障,那就很不方便,因为我必须再次翻录大量 DVD 和书籍,从各种服务下载大量音乐来重建媒体服务器。
我的问题是 - 鉴于我不愿意为了容错而牺牲超过 25-33% 的总池大小,RAIDZ1 是否是对无容错的渐进式改进,或者它是否会大大增加如果一个磁盘发生故障,整个池将完全故障并导致数据完全丢失的可能性。
如果有帮助的话,大部分数据都不会改变(它们是媒体文件),并且所有理论上无法恢复的内容都会被备份。
答案1
我认为这是旧帖子中的一个误解。我当时比较的是使用 Z1 奇偶校验 RAID 或不使用 RAID 时两个磁盘连续发生故障的概率(正如您在另一篇帖子的评论中所述)。在我看来,这从来都不是 Z1 与基本 vdev 的条带池之间的较量,因为无论如何,在第一次故障之后,游戏基本上就结束了,所以 Z1 当然更好。
但是,如果您只是将多个独立池与具有单个 Z1 vdev 的单个池进行比较,那么重新计算奇偶校验信息时负载增加的问题仍然存在。
关于 Michael 的回答主要涉及 Z1 与 Z2 的比较,其他两点也适用。我本应该在评论中说得更清楚,但遗憾的是篇幅有限。我希望这个答案能澄清一些问题。
我也这么想,但我没有意识到 URE 不只是有点翻转,它会破坏整个池子。
如果我们简化整个过程,您的磁盘及其控制芯片位于底部,而硬件(RAID 控制器)或软件(例如 ZFS)位于顶部。
如果硬件发生任何错误,无法读取某个扇区,芯片会首先尝试自行纠正(例如,多次读取问题扇区)。如果仍然无法解决问题,芯片将放弃(在普通磁盘上,这可能需要几分钟,并会使整个系统停滞,等待有关待处理 IO 操作的“成功”或“失败”消息。
某些磁盘具有称为 TLER(限时错误恢复)的功能,这是一种硬超时,可将此错误更正时间限制为 6-9 秒,因为传统上,大多数硬件 RAID 控制器会在 9 秒后丢弃整个磁盘,因此单个坏扇区不应导致整个磁盘不可用,而应由其他磁盘上的“好”扇区进行更正(桌面系统上的单个磁盘无法依赖此功能,因此最好使用较长的超时时间)。
现在,让我们看看软件方面:如果您使用冗余配置 raid 控制器或 ZFS 文件系统,例如使用镜像磁盘或镜像 vdev 作为池的基础,则可以纠正 URE。如果您不使用冗余,则此扇区上的数据将消失,这可能是您关心的数据,也可能只是随机的旧临时数据,或者什么都没有,这取决于您的运气。这同样适用于位翻转,尽管发生位翻转的几率似乎更多地取决于外部影响(如宇宙辐射)。
由于 RAID0 不受 URE 的影响,因此问题是“RAIDZ 中的 URE 和 RAID0 中的磁盘故障哪个更有可能发生?”
我没有接受这个答案,因为我认为它没有充分解释相关观点,但我打算在理解为什么 URE 会摧毁整个池子(如果没有其他人先得到它)之后创建我自己的答案。
我建议您阅读 ZFS 池布局的基本说明。总结最重要的部分:
- 您可以从磁盘、分区或文件创建虚拟设备 (vdev)。每个 vdev 都可以创建不同的冗余:基本(无冗余)、镜像(1 到 N 个磁盘可以发生故障)、奇偶校验 raid Z1/Z2/Z3(1/2/3 个磁盘可以发生故障)。所有冗余都在 vdev 级别上工作。
- 您可以从一个或多个 vdev 创建存储池。它们始终是条带化的,因此单个 vdev 的丢失意味着整个池的丢失。
- 您可以拥有任意数量的池,这些池都是独立的。如果一个池丢失,其他池将继续运行。
因此你可以推理如下:
- 如果可能的话,最好选择 Z2 而不是 Z1,因为重建大型驱动器(大型驱动器大约超过 1 TB)时负载增加,并且机会窗口较大(负面)。
- 如果必须在 Z1 和多个基本 vdev 之间进行选择,则首选 Z1,因为它具有位错误纠正功能,而基本 vdev 无法实现此功能
- 如果您可以接受部分池丢失,请将您的池分割成多个较小的池,每个池由一个 vdev 支持,这样您就可以获得校验和信息,并在发生致命故障时更快地重建
在上述任何一种情况下,您都需要有备份。如果您无法或不想承担任何备份,那么这取决于您更愿意失去什么 - 池中概率较高的部分或概率较低的全部。我个人会选择第一个选项,但您可以做出其他决定。
答案2
您引用的答案暗示,随着存储容量的增加,故障概率也会相应增加,不仅是重建操作,正常活动也是如此。因此,从统计上讲,对于现代 4TB 驱动器,RAIDZ1 的容错能力并不比 Raid 0 强,尽管表面上看来确实如此。
因此,有人认为 RAIDZ1 实际上并没有增强对大容量硬盘驱动器的数据丢失保护。这与驱动器的机械故障关系不大,或者至少与严重故障无关。简单来说(非常简单),URE 就是读取失败。无论是由于长时间读取驱动器的坏扇区、磁盘用尽备用扇区,还是任何其他原因,这都不是真正的问题。不管喜欢与否,它都会发生。让我们以坏扇区为例 - 通常这是由驱动器内部处理的,但如果有足够多的坏扇区或驱动器需要花很长时间才能修复,RAIDZ 控制器可能会将延迟解释为驱动器故障并弹出驱动器。现在,让我们假设它是池中的第二个硬盘驱动器,并且它在重建时发生...唯一可行的解决方案是清除阵列中的这些错误 - 如果及早发现,错误将只是一个小问题 - 池将轻松恢复数据。但这意味着要给驱动器施加相当大的负载,从而大大增加 URE 的统计概率(记住:年龄、写入、数据量都已经使其增加了很多,而读取次数并没有比正常操作增加多少;所有这些都是针对每个驱动器分别进行的)。
因此,对你的问题 ( ) 的回答is a RAIDZ1 an incremental improvement on no fault tolerance
是:并非如此。如果我们使用引文的逻辑,你将面临 50% 的几率(我认为)出现足够多的磁盘故障,导致数据在上述磁盘运行的前两年内无法恢复。
这就是为什么当我们公司面临服务器可用性或存储容量的困境时,我们咬牙坚持,选择了 SSD 上的 RAID6。应该足够用几年,如果需要的话,可能还会升级。