因此,我理解 ZFS 解决的一种情况是 RAID5 驱动器发生故障,然后在重建过程中遇到一些损坏的数据块,因此无法恢复这些数据。通过谷歌搜索,我没有看到这种故障场景的演示;既没有关于磁盘故障的文章,也没有关于修复数据损坏的文章,但两者兼而有之。
1) 使用 3 驱动器 raidz1 的 ZFS 是否容易受到此问题的影响?即,如果一个驱动器丢失、更换,并且在读取/重建时遇到数据损坏,则没有冗余来修复此数据。我的理解是损坏的数据将丢失,对吗?(我确实知道定期清理会将风险降至最低,但让我们假设自上次清理以来一个磁盘上发生了少量损坏,并且另一个磁盘也发生故障,因此在重建期间检测到损坏)
2)raidz2 4 驱动器设置是否可以防止这种情况?
3) 两个驱动器镜像设置(副本数 = 2)是否可以防止这种情况发生?例如,一个驱动器发生故障,但另一个驱动器包含所有数据的 2 个副本,因此如果在重建期间遇到损坏,该磁盘上是否有一个冗余副本可供恢复?它对我很有吸引力,因为它使用的磁盘数量是 raidz2 设置的一半,尽管我需要更大的磁盘。
我并没有对 ZFS 抱有太大的兴趣,但是几年来我断断续续地阅读过很多关于它的资料。
如果有类似 par archive/reed-solomon 的东西就太好了,它可以生成一定数量的奇偶校验,保护高达 10% 的数据损坏,并且只使用与损坏程度成比例的空间量X% 您想要的腐败保护。 然后我只需使用镜像设置,镜像中的每个磁盘都将包含该奇偶校验的副本,与上面的选项 3 相比,该副本相对较小。不幸的是,我认为 reed-solomon 不太适合这种情况。我一直在阅读一份关于实施 reed-solomon 的旧 NASA 文档(我能找到的唯一一份不需要购买期刊文章的全面解释),据我所知,奇偶校验数据集需要为源数据的每次增量更改完全重新生成。也就是说,没有一种简单的方法可以对 reed-solomon 奇偶校验数据进行增量更改以响应源数据的微小增量更改。 不过,我想知道是否有人知道类似的概念(按比例少量的奇偶校验数据保护源数据中任何地方的 X% 损坏),但我认为这可能只是白日梦。
答案1
大多数情况下,你都会把事情做对。
如果 raidz1 池中只有一个驱动器发生故障,您可以感到安全。如果另一个驱动器也出现损坏,部分数据将永远丢失。
如果 raidz2 池中的 4 个驱动器中有 2 个发生故障,您可以感到安全。如果有……依此类推。
您可以对此基本确定,但没有任何理由。使用
copies
ZFS 会尝试将块副本放置在至少 1/8 磁盘大小的间隔内。但是,如果您遇到控制器问题,它可能会很快使您的所有池都充满垃圾。
您对奇偶校验的看法大多是关于 raidz 的。在 ZFS 的情况下,可以在复制之前均匀分割数据,从而产生更高的 IO 可能性。或者您想将具有奇偶校验的数据放在同一个磁盘上?如果磁盘无声无息地发生故障,您将丢失所有数据和奇偶校验。
关于数据一致性的一个很好的口号是“你准备好迎接火灾了吗?”
当计算机刻录时,里面的每个磁盘都会烧毁。尽管发生火灾的可能性低于整个磁盘故障。整个磁盘故障几乎很常见,但部分磁盘故障更常见。
如果我想保护我的数据,我会首先检查它属于哪一类。如果我想在任何已知的灾难中生存下来,我宁愿首先考虑远程节点和远程复制。接下来是驱动器故障,所以我不会为镜像或副本烦恼,zraid2 或 zraid3 是个好东西,只需从更大的不同磁盘集构建它。你知道,来自同一分布的磁盘在常见情况下往往会发生故障……
ZFS 镜像涵盖了部分磁盘故障的所有问题。当某个磁盘开始出现任何错误时,我会放入第三个磁盘,等待数据同步,然后我才会断开故障驱动器。
答案2
总体而言,重点关注 ZFS 镜像而非奇偶校验 RAID 选项。更灵活、故障场景更可预测且扩展选项更好。
如果您比较谨慎,三重镜像是一种选择。但同样,RAID 不是备份... ZFS 中有一些很棒的快照和复制选项。利用它们来增强您的数据保护。