RAID-5跟RAID-4一样,数据以条带为单位分布到各个硬盘上,RAID-5和RAID-4的最大区别在于RAID-5不是把所有的校验块集中保存在一个专门的校验盘中,而是分散到所有的数据盘中,其数据分布情况如图15-27所示。
从图15-27可以看到,RAID-5的校验码存在于所有硬盘上,其中P0为数据条带0、1的校验值,P1为数据2、3的校验值,P2为数据4、5的校验值。
RAID-5的冗余性不错,当一块成员盘离线后,数据依然能够保持完整性。
在读/写性能方面,因为每一个写操作都需要计算校验并写入校验,所以写性能稍差一些,但读取性能很好。
另外由于RAID-5的每个条带组中都有一个条带用来写校验,所以所有校验条带加在一起刚好占用1块物理盘的空间,也就是说RAID-5逻辑盘的容量等于所有物理盘容量的总和减去1块物理盘的容量。
RAID-5的应用很广泛,是所有RAID级别中应用最多的。下面来具体讲解一下校验值的算法。RAID-5的校验值采用的是异或算法。异或运算是二进制数值间的一种算法,其运算符号为XOR,或者用“⊕”表示。运算组合有以下四种:
0 ⊕ 0=0
0 ⊕ 1=1
1 ⊕ 0=1
1 ⊕ 1=0
图15-27中的P0就是数据条带0⊕数据条带1的结果;P1就是数据条带2⊕数据条带3的结果;P2就是数据条带4⊕数据条带5的结果。因为一个异或运算式中的任一数值都能由其他数值通过异或运算得到,所以当缺失一个数值时,用剩下的数值经过异或运算就能得到缺失的数值了,这就是RAID-5能够缺失1块盘的道理。
多个数字同时进行异或运算时,有两个特点:
(1)运算结果与运算顺序无关。
例如:(a ⊕ b) ⊕ c=a ⊕ (b ⊕ c)。
(2)各个参与运算的数字与结果循环对称。
例如a ⊕ b ⊕ c=d,那么可以得到:
a=b ⊕ c ⊕ d
b=a ⊕ c ⊕ d
c=a ⊕ b ⊕ d
RAID-5之所以能够容错,就是利用了异或运算的这些特点。例如,将上面例子中的a、b、c、d看作RAID-5四块成员盘上的条带,其中三个是数据条带,剩下一个是校验条带,如果有一块成员盘离线,不管哪个条带丢失了,都可以用剩下的三个条带经过异或计算出来。
RAID-5的校验条带被分散保存在不同的成员盘中,这样就可以确保任何对校验条带进行的读/写操作都会在所有的成员盘中进行均衡,从而避免了RAID-4的瓶颈。