[RAID6的数据恢复]
P、Q故障
当两个校验数据出现故障时,此时是最简单的情况,只需要将现有的数据按照P、Q计算方法,重新得到新数据,就可以恢复故障了。
P与数据盘故障
如某数据,暂时记为D2与P发生故障,那么可以通过如下计算来恢复它:
计算一个中间变量Q’:Q’= (K0⊙D0)⊕(K1⊙D1)⊕(K3⊙D3),
D2可以通过如下公式得到(K2-1是K2在GF(8)表中的逆值):
K2-1⊙(Q⊕Q’)=K2-1⊙{[(K0⊙D0)⊕(K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)]⊕
[(K0⊙D0)⊕(K1⊙D1)⊕(K3⊙D3)]}
= K2-1⊙(K2⊙D2)
= D2
由于D2成功恢复,所以P的恢复,只需要按照其计算方法就可以得到了。
Q与数据盘故障
某数据,暂记为D1与Q发生故障,那么可以通过如下计算来恢复它:
D1 = P⊕D0⊕D2⊕D3, (因为P=D0⊕D1⊕D2⊕D3)
因为D1成功恢复,所以Q的恢复,只需要按照其计算方法就可以得到了。
两个数据盘故障
如果D1与D2发生故障,那么可以通过如下计算来恢复它:
由D1= P⊕D0⊕D2⊕D3
Q = (K0⊙D0)⊕(K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)
= (K0⊙D0)⊕(K1⊙[P⊕D0⊕D2⊕D3])⊕(K2⊙D2)⊕(K3⊙D3)
= (K1⊙P)⊕[(K0⊕K1)⊙D0]⊕[(K1⊕K2)⊙D2]⊕[(K1⊕K3)⊙D3],
因此,可以得到D2相关,并且不包含D1的表达式:
(K1⊕K2)⊙D2= Q⊕(K1⊙P)⊕[(K0⊕K1)⊙D0] ⊕[(K1⊕K3)⊙D3]
D2={Q⊕(K1⊙P)⊕[(K0⊕K1)⊙D0] ⊕[(K1⊕K3)⊙D3]}/(K1⊕K2)
因为D2成功恢复,所以对于D1的恢复,就是相当简单计算了。
[计算校验与性能关系]
通过上诉对RAID双重校验计算的原理,可以看出需要耗费大量的CPU周期来处理;为此,某些厂商设计了专门的RAID加速器(Accelerator)硬件,在Intel的Xscale系列芯片,如:IOP331,IOP332,IOP333,IOP340,IOP341,IOP342,IOP348中,基本都加入该模块来提高性能。当然也有一些软RAID6的解决方法,如Linux下的MD就提供,在后续的文章中,将会进行仔细介绍。