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=12
和 recordsize=4K
的 3 个磁盘的 raidz1,我们将在磁盘上分配:
一个 4K 的数据块
一个 4K 的奇偶校验块
可用空间比率将为 50%,与双镜像相同。
另一个例子是 ashift=12
和 recordsize=128K
的 3 个磁盘的 raidz1:
总条带宽度为 3
一个条带最多可以有 2 个 4K 大小的数据部分,因为有一个奇偶校验块
我们将有 128K/8k = 16 个条带,每个条带有 8K 的数据和 4K 的奇偶校验
16 个条带每个有 12k,意味着我们写入 192k 来存储 128k
因此,在这种情况下,可用空间比率将为 66%。
RAIDZ 拥有的磁盘越多,条带越宽,空间效率越高。
您可以在这里找到每个 RAIDZ 大小的实际奇偶校验成本:
(来源)
性能考虑
写入
一个条带跨越阵列中的所有驱动器。一个块的写入将把条带部分写入每个磁盘。 在最坏的情况下,RAIDZ vdev 的写入 IOPS 是阵列中最慢磁盘的 IOPS,因为所有条带部分的写入操作必须在每个磁盘上完成。