天天看点

北亚工程师详解数据恢复中RAID6结构

【什么是raid】

【单一冗余模型】

北亚工程师详解数据恢复中RAID6结构

根据上图,可以很容易的分析出,不管这3页中的哪一页丢失,都可以通过另两页计算另一页的数据来。很显然,即使是超过3页的情况,按上述方式设计记录模式,也可以支持任意一页记录的丢失。

北亚工程师详解数据恢复中RAID6结构

可以很清晰得看到,第三行的校验和,不再是3个数字,而且不论多少个数据成员,用异或得到的校验和容量不会累加。

d1 + d2 + d3 + ... +dn-1 = p1

dx = p1 - d1 - d2 - d3 - ... -dn-1(d序列中排除dx)

也就是:dx = p1 + d1 + d2 + d3 +... +dn-1(d序列中排除dx)

【多次冗余模型】

常用0x11d做为raid6的本原多项式,意思是2的n次方如果大于0x11d,就对于做xor的取余运算,确保结果小于0x256,这样就可以算出2^0到2^255之间的所有数值。

【raid6】

北亚工程师详解数据恢复中RAID6结构

之所以p和q螺旋式循环分布,是为了使所有磁盘负载均衡,如果不好理解,可以把p和q单独放在一列中,算法的意义是相同的。

再重复一下,下面提及的+、-、*、/运算都是指基于gf(2^8)上的加、减、乘、除

p值等于同一行(条带)上的所有单元相加的和。或者可以理解为1与每个单元相乘后的累加和,如第一个条带的p:

在gf(2^8)上,每个多项式对应一个0~255的值,即d0对应多项式x的0次幂,d1对应多项式x的2次幂等,按多项式展开,x为2进制,故d0 = 1,d1 =2,d2=4 ,d3=8,等等,如下表所示:

北亚工程师详解数据恢复中RAID6结构

返回raid结构图中,q值等于每个数值单元格乘以他们的相应的dn再累加的结果,其中dn可约定,只需保证同一条带的运算中不重复出现dn即可,如第一行的q可以为:

q = d1 x1 + d2x2 +d3*x3

这样,对于每一行(条带),就可以保证任意2个单元丢失,都可以计算出来(为了明了,以下计算直接将减法改为加法):

以第一行为例:

a) 如果p,q均丢失,数据区不影响,x1,x2,x3均可正常读写

b)如果xn丢失,根据p或q都可计算出来(实际中,因p 的计算更快速,通常会使用p校验计算出丢失的 xn)

c)如果p,xn丢失,p值不做处理,假设丢失的是x2,根据q值的定义

p = x1+x2+x3

=> x1 = p + x2 + x3

=> q = d1 (p + x2 + x3) +d2x2 +d3*x3

=> q = d1p + d1x2 + d1 x3 + d2x2 + d3*x3

=> q = d1p + d1x2 + d2x2 + d1x3 + d3*x3

=> q + d1p + d1x2 + d2x2 = (d1+d3) x3

=> x3 = ( q + d1p + d1x2 + d2*x2) / (d1+d3)

继续阅读