RAIDZ

tl;dr: RAIDZ 对于大块大小和顺序工作负载是有效的。

简介

RAIDZ 是 RAID-5 的一种变体,它允许更好的奇偶校验分布,并消除了 RAID-5 的“写漏洞”(在电源丢失后数据和奇偶校验变得不一致的情况)。 数据和奇偶校验在 raidz 组内的所有磁盘上条带化分布。

一个 raidz 组可以有单、双或三重奇偶校验,这意味着 raidz 组可以分别承受一、二或三次故障而不会丢失任何数据。raidz1 vdev 类型指定了一个单奇偶校验的 raidz 组;raidz2 vdev 类型指定了一个双奇偶校验的 raidz 组;raidz3 vdev 类型指定了一个三重奇偶校验的 raidz 组。raidz vdev 类型是 raidz1 的别名。

一个由 N 个大小为 X 的磁盘和 P 个奇偶校验磁盘组成的 raidz 组可以容纳大约 (N-P)*X 字节,并且可以承受 P 个设备故障而不丢失数据。raidz 组中的最小设备数量比奇偶校验磁盘的数量多一个。推荐的数量在 3 到 9 之间,以帮助提高性能。

空间效率

RAIDZ 中一个块的实际使用空间基于以下几点:

  • 最小写入大小是磁盘扇区大小(可以通过 ashift vdev 参数设置)

  • RAIDZ 中的条带宽度是动态的,并且至少从一个数据块部分开始,或者最多到 磁盘数量 减去 奇偶校验数量 的数据块部分

  • 一个大小为 recordsize 的数据块被均等地分割成 扇区大小 部分,并写入 RAIDZ vdev 上的每个条带

  • 每个数据条带将有一个块的部分

  • 除了数据外,还应写入一、二或三个奇偶校验块,每个磁盘一个;因此,对于 5 个磁盘的 raidz2,将有 3 个数据块和 2 个奇偶校验块

由于这些输入,如果 recordsize 小于或等于扇区大小,那么 RAIDZ 的奇偶校验大小将有效地等于具有相同冗余的镜像。例如,对于 ashift=12recordsize=4K 的 3 个磁盘的 raidz1,我们将在磁盘上分配:

  • 一个 4K 的数据块

  • 一个 4K 的奇偶校验块

可用空间比率将为 50%,与双镜像相同。

另一个例子是 ashift=12recordsize=128K 的 3 个磁盘的 raidz1:

  • 总条带宽度为 3

  • 一个条带最多可以有 2 个 4K 大小的数据部分,因为有一个奇偶校验块

  • 我们将有 128K/8k = 16 个条带,每个条带有 8K 的数据和 4K 的奇偶校验

  • 16 个条带每个有 12k,意味着我们写入 192k 来存储 128k

因此,在这种情况下,可用空间比率将为 66%。

RAIDZ 拥有的磁盘越多,条带越宽,空间效率越高。

您可以在这里找到每个 RAIDZ 大小的实际奇偶校验成本:

(来源)

性能考虑

写入

一个条带跨越阵列中的所有驱动器。一个块的写入将把条带部分写入每个磁盘。 在最坏的情况下,RAIDZ vdev 的写入 IOPS 是阵列中最慢磁盘的 IOPS,因为所有条带部分的写入操作必须在每个磁盘上完成。