前面已经讨论了校验,它提供了一种存放于R A I D子系统中数据冗余的手段。现在,将在分块数据的背景下,详细讨论校验是如何实现的。
使用XOR函数建立校验数据
校 验数据是另外一种冗余数据,它是在计算校验值时,由R A I D子系统产生的。正如前面所说的那样,异或(X O R)函数在逐位基础上对实际数据进行操作,建立校验数据。在并行访问R A I D和独立访问R A I D上,建立校验数据的方法是不同的。在介绍如何使用X O R函数建立校验数据,以及在磁盘失败时恢复数据后,我们将研究这两种R A I D之间的差别。
1. 校验的计算
R A I D校验数据的计算使用布尔X O R函数,X O R函数逻辑相当简单:除了真+真导致一个假的结果以外,它的行为就像一个O R函数。
X O R函数事实上可用于更多的位组合,它既与位是否成对地组合及是否成对操作无关,也与每个附加位的X O R对象是否是过去的X O R操作结果无关,好像它是在X O R“链”中一样。事实上,它也与位的操作顺序无关。
按照标准的二进制习惯,“0”位表示假值,“1”位表示真值。对于R A I D,写入阵列的数据位将与其他分区上的相应位进行X O R操作,计算出校验位,并写入校验分区的位置。
可以利用X O R函数对任何4列中的4位进行操作,得到另一列中的值。例如,假如将X O R应用于第2列到第5列,那么,结果将与已经存在的第一列值相同。这说明了当一个磁盘失败时,X O R函数的恢复能力,假如一个磁盘失败,阵列分区中的数据将不可访问,利用阵列中其他分区的相应位,运行X O R操作即可恢复原数据值。
2. XOR的逆操作是X O R
X O R函 数如此有用的原因之一是X O R函数的逆操作是其本身。换而言之,当使用X O R计算校验值时,也可以再使用X O R进行逆运算。X O R函数的这个性质不太直观,因为通常的数学函数拥有自己的反函数,如加法的反函数是减法、乘法的反函数分别是除法。以下是X O R函数的操作和逆操作的例子:
0 XOR 0 = 0 ; 其逆操作是:0 XOR 0 = 0 0 XOR 1 = 1 ;其逆操作是:1 XOR 1 = 0 1 XOR 0 = 1 ;其逆操作是:1 XOR 0 = 1 1 XOR 1 = 0 ;其逆操作是:0 XOR 1 = 1 上述的操作是X O R函数的完整的组合矩阵,对于磁盘阵列,组合的数量将增加,但每一个
计算值都可以从上述的矩阵推出。以下几节的阵列操作将参考这里的X O R函数。