RAID 6:使用双校验的独立访问
在所有前面对R A I D级的讨论中,目标是防止由于阵列中的某个磁盘驱动器失败,而导致数据丢失。虽然M T D L数能够使人对子系统有信心,但有些极敏感的数据对可用性的要求最高,而却可能不能提供保护。
RAID 6提供两级冗余,即阵列中的两个驱动器失败时,阵列仍然能够继续工作。到1 9 9 9年止,市场上仅有的RAID 6实现是I c e b e rg RAID 子系统,它由Storage Technology 公司制造,由I B M销售。到本书出版时,市场上可能有其他的产品支持RAID 6。
一般而言,RAID 6的实现代价要比其他级的R A I D高,这是因为RAID 6需要支持两级简约的操作,即不仅要支持数据的恢复,又要支持校验的恢复,这使RAID 6控制器比其他级R A I D更复杂和更昂贵。
1. RAID 6的校验数据
当对每个数据块执行写操作时,RAID 6做两个独立的校验计算,因此,它能够支持两个磁盘的失败。为了实现这个思想,目前基本上有两个已经接受的方法,尽管将来还会有其他方法出现:
•使用多种算法,如X O R和某种其他函数。
•在不同的数据分条或者磁盘上,使用排列的数据。
2. RAID 6的一维冗余
RAID 6的第一种方法是用两种不同的方法计算校验数据。实现这个思想最容易的方法之一是用两个校验磁盘支持数据磁盘,第一个校验磁盘支持一种校验算法,而第二个磁盘支持另一种校验算法,使用两种算法称为P + Q校验。一维冗余是指使用另一个校验磁盘,但所包含的分块数据是相同的。
例如,P校验值可能由X O R函数产生,这样,Q校验函数需要是其他的某种操作,一个很有力的候选者是Reed Solomon误差修正编码的变体,这个误差修正编码一般用于磁盘和磁带驱动器。假如两个磁盘失败,那么,通过求解带有两个变量的方程,可以恢复两个磁盘上的数据,这是一个代数方法,可以由硬件辅助处理器加速求解。
3. 一维校验RAID 6的数据映射
图6 - 3 2显示了一维RAID 6实现的数据映射,它给出了两个不同的校验值,一个标志校验数据A函数,另一个标志校验数据B函数。为了避免关于RAID 4的写开销,按照RAID 5的方式,这两种数据分布于整个阵列。
4. RAID 6的二维冗余
二维冗余基于这样一个概念:阵列可以逻辑地以矩阵的行和列安排。因此,数据的排列以行和列来表示,校验数据可作为阵列空间的正交矢量来计算。为了实现这个方法,每一个数据分块都属于两个正交(分离和独立)的分条,不存在将阵列中任何其他分条写入相同校验位置的可能性。
这种方法可简单地看作M×N的矩阵,M个校验磁盘需要N个校验计算,N个校验磁盘需要M 个校验计算。这种安排需要校验磁盘的总数为M + N。当行和列数相等且阵列的大小增加时,这种类型的阵列的校验开销将减小。例如,一个3×3的9个磁盘的阵列有6个校验磁盘,校验开销占6 6 %。然而,当阵列包含1 0 0个磁盘,按1 0×1 0配置时,需要2 0个校验磁盘,校验开销占2 0 %。
二维方法的优点之一是可以利用同样的算法计算校验数据,这大大简化了用于简约功能操作的数学例程,如数据和校验的恢复。它既可以使用阵列管理软件中的单个程序,也可以使用同样的硬件辅助实现。
5. 二维RAID 6阵列的数据映射
图6 - 3 3显示了二维RAID 6子系统的数据映射,所显示的矩阵排列即磁盘排列。事实上,没有必要精确地遵从这个原则,也可以使用分区而不使用磁盘建立矩阵。并且,也没有一个如何构造矩阵的确定的规则。一般而言,不要将几排独立的阵列构造成矩阵,如果这样做的话,需要阵列具有完全相同的分区大小和分条深度。而由属于同一个阵列的分区逻辑地构造矩阵将容易得多。