存储 频道

RAID6连载(二):RAID6算法解析

[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就提供,在后续的文章中,将会进行仔细介绍。

0
相关文章