RAID5 RAID6 简单理解

RAID是独立硬盘冗余阵列 Redundant Array of Independent Disks,可以将多个硬盘组合成一个大容量或者高速度的硬盘使用。常见的有RAID0、RAID1、RAID5、RAID6等等。其中RAID0是两块硬盘并行读取和写入,增加了读写速度,但是需要承担两倍的硬盘损坏风险。RAID1是两块硬盘互为镜像,写入速度不变,读取速度是两倍,存在一个盘的冗余。

RAID5

RAID5的存储结构如下图所示,以四块硬盘为例,存储数据时将数据拆分为三分,分别为N1、N2、N3,并且根据将这三分数据进行XOR计算获得奇偶校验位Np,N1 XOR N2 XOR N3 = Np。其中如果某一块盘损坏丢失数据,可以通过奇偶校验位Np反向计算出丢失的数据。

由于二进制数据的特性,XOR计算相当于求和之后取末尾,所以RAID5的奇偶校验位可以看作将拆分的多份数据求和之后取末尾的操作。这样在损失数据时可以理解成求解一个一元一次方程组。

RAID5

RAID6

下图为RAID6的示意图,可以看到RAID6比RAID5多一个校验位,因此也比RAID5多了一个冗余的硬盘,整组整列可以接受同时损坏两块硬盘。

将RAID6中的两个校验位定义为P和Q,其中校验位P的计算是和RAID5中一致的,都是由XOR计算,获得的。与之不同的是多出来的校验位Q的计算方式。首先校验位Q的目的与校验位P是一致的,都需要在损失一块盘的时候可以通过校验位来反推出原有数据。如果将RAID5的数据恢复看作求解一元一次方程组,那么RAID6就可以看作是求解二元一次方程组。

$$ \begin{cases} P = N_1+N_2+...+N_n \\ Q = n_1N_1+n_2N_2+...+n_nN_n \end{cases} $$

在存储数据时,对每个硬盘定义一个不同的系数n,就可以完成上述的方程,当损失任意两个硬盘时,就构成了二元一次方程组,就可以进行方程求解恢复数据。当然,实际上的数据操作是通过XOR实现的。

RAID6

RAID7

其实通过设定另一组硬盘系数计算出第三个校验位,可以构成第三组方程。这样可以实现理论上的RAID7,可以承受同时损坏三块盘的数据。但是在实际使用中这种RAID并不常见。

个人理解是因为校验位越多RAID阵列中所需要的硬盘也就更多,RAID5最少3块盘,RAID6最少4块盘,RAID7中最少5块盘。一旦一个阵列中的硬盘数量增加,其中出现硬盘损坏的概率也会增加,出现数据损坏的机会也会变大。虽然数据损坏可以恢复,但是大量时间处在数据恢复的过程中对整个阵列的性能会造成影响。并且随着目前硬盘容量增大,在数据重建的过程中再次发生数据丢失的概率也会增大。因此ZFS文件系统的RAIDZ和和RAIDZ2也应运而生。