ZFS AnyRAID 要来了?
坑边闲话:在家用场景下,用户的硬盘规格可能比较杂,不同容量的磁盘组件 RAID,会被木桶原理限制。AnyRAID 是一个新兴的技术,可以在保障安全的情况下最大限度地发挥磁盘的空间。
在看近期的 TrueNAS Tech Talk 时,我本想了解一下 AnyRAID 的最新进展,没想到看到 Kris Moore 也认同不要使用同一个制造商的同批次产品,因为这样会导致磨损过于均衡。
1. 什么时候需要 AnyRAID·
其实从数据中心角度和家庭用户角度来看,这个问题的思路是不同的。家庭用户希望硬盘可以用的久一些,而数据中心的机械硬盘会定期更换。
对数据中心而言,每三年换一次盘,数据出问题的概率会小很多。
家庭用户普遍希望能用五年以上,这对 RAID 系统来说是非常危险的。AFR 并非是一个静态值,它会随着时间拉长而升高。一旦到后期故障率上来了,均衡磨损导致的连锁崩溃将会是致命的。
话说回来,以 HexOS 为主要推手的 AnyRAID 也在上游进行了积极的开发。AnyRAID 有以下优势:
- 允许使用不同容量的磁盘组建 vdev, 而且可以充分利用所有容量。
- 比 RAIDZ 更加灵活,而且可以进行数据再平衡。比如后期添加了一些新盘,就能以 mini partition 为基本单位进行数据迁移,在宏观上实现写入平衡。
这对家庭用户来说比较有吸引力。但是我建议各位 ZFS 用户还是不要高兴得太早。一是这个技术进入 TrueNAS 还不知是何年何月,而来这个复杂的块分配模型会很复杂,哪怕达到了理论冗余度,很多块也是不能实现真正的冗余度。
举个简单的例子,有4T,6T,10T的三个盘做 RAID-Z1,理论上只有 8T 可用空间,每个盘的参与度按照最小容量进行计算。如果使用 AnyRAID,在保持 1/2 冗余度的情况下,可以让 4T, 6T 同时和 10T 进行 mirror,因为两个小盘加起来的容量和一个大盘的容量一致。
更抽象地讲,可以把每个盘分割为多个 64GB 的小分区,比如16T 的盘 可以分为 256 个区。然后以小分区为单位构建 RAID-Z,比如有 1024 个小分区,保留八分之一做冗余,就可以实现一个逻辑上的七盘 RAID5. 这在理论上是很现实的,只是要在块分配的时候考虑一下磁盘亲和性,如果两个同raid组的小分区都落在一个物理磁盘上,这样带来的冗余几乎是没有意义的。
就像 K8S Node Affinity,尽量不要让多个 pod 以多副本的形式调度到同一个节点,因为一旦节点挂了,多 pod 副本也挽救不回来。
目前 AnyRAID 的公开参考资料不是很多,貌似也是 HexOS 花钱委托澳大利亚的 Klara System 进行开发。(有钱就是好啊!)
2. 不同于 Unraid·
还有值得说的一点:AnyRAID 与 Unraid 并不一样。
Unraid 是在每个磁盘上使用 XFS/ZFS, 然后利用一个 FUSE 文件系统把所有盘组织起来,看上去像一个大的存储空间。
Unraid 的磁盘分组是以文件为单位。
AnyRAID 是以小分区为单位,因此性能必然比 Unraid 更高,组织模型也要复杂很多。