Answers:
实际上,我认为Wikipedia的解释要比实际文档更好。这是文章中的文字。
Linux内核软件RAID驱动程序(称为“多设备”的md)可用于构建经典的RAID 1 + 0阵列,但(自版本2.6.9起)也可以作为具有一些有趣扩展的单级[4] [ 5]。标准的“近”布局(每个块在k路条带阵列中重复n次)等效于标准的RAID-10布局,但不需要n除以k。例如,在2、3和4个驱动器上的n2布局如下所示:
2 drives 3 drives 4 drives
-------- ---------- --------------
A1 A1 A1 A1 A2 A1 A1 A2 A2
A2 A2 A2 A3 A3 A3 A3 A4 A4
A3 A3 A4 A4 A5 A5 A5 A6 A6
A4 A4 A5 A6 A6 A7 A7 A8 A8
.. .. .. .. .. .. .. .. ..
4驱动器示例与标准RAID-1 + 0阵列相同,而3驱动器示例是RAID-1E的软件实现。两驱动器示例等效于RAID1。该驱动器还支持“远”布局,其中所有驱动器均分为f个部分。所有块在每个部分中重复,但偏移一个设备。例如,两驱动器阵列和三驱动器阵列上的f2布局如下所示:
2 drives 3 drives
-------- --------------
A1 A2 A1 A2 A3
A3 A4 A4 A5 A6
A5 A6 A7 A8 A9
.. .. .. .. ..
A2 A1 A3 A1 A2
A4 A3 A6 A4 A5
A6 A5 A9 A7 A8
.. .. .. .. ..
这是为提高镜像阵列的条带化性能而设计的;可以对顺序读取进行条带化,例如在RAID-0中,随机读取的速度要快一些(由于使用磁盘的外部扇区更快,平均寻道时间更短,可能会达到10-20%),而顺序写入和随机写入的性能大致相同其他镜像袭击。在读取比写入更频繁的系统上,该布局效果很好,这在许多系统上都是很常见的情况。每个驱动器的前1 / f是标准RAID-0阵列。因此,您可以在只有2个驱动器的镜像集上获得条带化性能。Near和Far选项可以同时使用。每个部分中的组块偏移n个设备。例如n2 f2布局存储每个扇区2×2 = 4个副本,因此至少需要4个驱动器:
A1 A1 A2 A2 A1 A1 A2 A2 A3
A3 A3 A4 A4 A3 A4 A4 A5 A5
A5 A5 A6 A6 A6 A6 A7 A7 A8
A7 A7 A8 A8 A8 A9 A9 A10 A10
.. .. .. .. .. .. .. .. ..
A2 A2 A1 A1 A2 A3 A1 A1 A2
A4 A4 A3 A3 A5 A5 A3 A4 A4
A6 A6 A5 A5 A7 A8 A6 A6 A7
A8 A8 A7 A7 A10 A10 A8 A9 A9
.. .. .. .. .. .. .. .. ..
从Linux 2.6.18开始,该驱动程序还支持偏移布局,其中每个条带重复o次。例如,在2驱动器和3驱动器阵列上的o2布局布置为:
2 drives 3 drives
-------- --------
A1 A2 A1 A2 A3
A2 A1 A3 A1 A2
A3 A4 A4 A5 A6
A4 A3 A6 A4 A5
A5 A6 A7 A8 A9
A6 A5 A9 A7 A8
.. .. .. .. ..
注意:k是驱动器的数量,n#,f#和o#是mdadm --layout选项中的参数。Linux还可以使用md驱动程序(0、1、4、5、6)创建其他标准RAID配置。
从我读到的内容来看,f2 RAID10阵列每个块至少保留2个副本,并且它们之间的存储距离很远。
这是手册页中的相关部分。
-p,--layout =此选项为raid5和raid10阵列配置数据布局的详细信息
...
最后,RAID10的布局选项为'n','o'或'p'之一,后跟一个小数。默认值为“ n2”。n表示“接近”副本。一个数据块的多个副本在不同设备中的偏移量相似。
o表示“胶印”副本。整个条带是重复的,但是由一个设备旋转,因此重复的块位于不同的设备上,而不是在条带内复制块。因此,块的后续副本位于下一个驱动器中,并且位于下一个块中。
f表示“ 远 ”副本(多个副本的偏移量非常不同)。有关“近”和“远”的更多详细信息,请参见md(4)。
RAID10提供RAID1和RAID0的组合,有时也称为RAID1 + 0。每个数据块都会重复复制几次,并且数据块的最终集合将分布在多个驱动器上。配置RAID10阵列时,必须指定所需的每个数据块的副本数(通常为2),以及副本应为“近”,“偏移”还是“远”。(请注意,“偏移”布局仅在2.6.18起可用)。
选择“ 近 ”副本时,给定组块的多个副本将连续排列在整个阵列的条带上,因此,数据块的两个副本在两个相邻设备上的偏移量可能相同。
当选择“ far ”副本时,给定组块的多个副本彼此之间的距离很远。所有数据块的第一个副本将以RAID0方式在所有驱动器的早期部分进行条带化,然后所有块的下一个副本将在所有驱动器的后面部分进行条带化,始终确保任何给定块的所有副本在不同的驱动器上。
“ 远 ”配置可以提供与RAID0阵列相同的顺序读取性能,但是会降低写入性能。
当选择“偏移”副本时,给定块的多个副本将以连续的偏移和连续的驱动器布局。实际上,每个条带都是重复的,并且副本由一个设备偏移。如果使用适当的大块大小,则应该赋予与“远”相似的读取特性,但无需过多地寻找写入。
应该注意的是,RAID10阵列中的设备数量不必是每个数据块的副本数量的倍数,设备数量必须至少与副本数量一样。
例如,如果创建一个包含5个设备和2个副本的阵列,则相当于2.5个设备的空间将可用,并且每个块将存储在两个不同的设备上。
这很有趣并且得到了很好的解释。但是,普通RAID1至少在Linux软件RAID上还具有以下功能:能够以非常好的性能并行支持多个读取器:
从任何一台设备读取数据。驱动程序尝试在所有设备上分配读取请求,以最大化性能。
[...]理论上,拥有N磁盘RAID1将允许N个连续线程从所有磁盘读取。(man 4 md,RAID1部分)
看起来RAID10在其附近的布局中更适合这种行为(不是像RAID0那样加速单线程I / O,而是加速多线程I / O)。具有4个磁盘的n2f2与具有4个磁盘的RAID1相似。
具有4个磁盘的n2布局可同时做到:将单个线程的读取性能提高一倍,并使两个线程的读取性能提高4倍(如果Linux md RAID10调度程序实现得当,则一个线程应成对读取,而另一个线程应另一对)。
一切取决于您的需求!我还没有做基准测试。