RAID-6技术详解

XOR⊕ == 二进制中的不进位加法(半加运算)

异或(xor)是一个数学运算符。它应用于逻辑运算。

异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

RAID-6技术详解_第1张图片


RAID-6技术详解

RAID-6的全称为“IndependentData disks with two independent distributed parity schemes(带有两个独立分布式校验方案的独立数据磁盘)”。

RAID-6是在RAID-5 基础上,为了进一步加强数据保护而设计的一种RAID级别,与RAID-5 的不同之处于在于,RAID-6采用双重校验方式,能够防止两块成员盘故障而引起的数据丢失,因此RAID-6的数据冗余性能相当好。

但是,由于RAID-6增加了一个校验,所以数据写入的效率比RAID-5还要低很多,而且RAID控制器的设计也更为复杂。另外,RAID-6的磁盘空间利用率也比RAID-5低

前文介绍过,RAID-6有很多的标准,包括Intel公司的P+Q双校验RAID-6、NetApp公司的双异或RAID-6(也称为RAID-DP)、X-Code编码RAID-6、ZZS编码RAID-6、Park编码RAID-6、EVENODD编码RAID-6等,本节将介绍这些RAID-6的结构。

1、P+Q双校验RAID-6数据组织原理

P+Q双校验RAID-6是指在RAID-6除了采用RAID-5的异或校验以外,还增加了一个“Q”校验位,其数据组织结构如图1-41所示。

在图1-41中,“D0、D1、D2…”是数据块,“P0、P1、P2…”是P校验块,“Q0、Q1、Q2 …”是Q校验块。

P校验依然使用异或算法得出,即P0=D0⊕D1、P1=D2⊕D3,P2=D4⊕D5,P3=D64⊕D7

Q校验使用基于伽罗华域(Galois Field,简写为GF)的里德-所罗门(Reed-Solomon)编码计算得出,即Q0=GF(D0)⊕GF(D1)、Q1=GF(D2)⊕GF(D3),Q2=GF(D4)⊕GF(D5),Q3=GF(D6)⊕GF(D7)
其中GF(D0)的含义是对D0进行伽罗华域的里德-所罗门编码变换。

里德-所罗门编码是欧文里德(Irving Reed)和格斯所罗门(Gus Solomon)于1960年发布的一种纠错编码,它使用伽罗华域运算法则。

P+Q双校验RAID-6在两块成员盘离线的情况下依然能够得到完整数据,具体算法分析如下:

  • 情况一,一块成员盘离线
    以图1-41为例,假设“物理盘3”离线,我们对每个条带组的数据分别进行分析:

    • (1)0号条带组

    “物理盘3”离线后,0号条带组中缺失“Q0”校验块,不影响数据块“D0”和“D1”。

    • (2)1号条带组

    “物理盘3”离线后,1号条带组中缺失“D3”数据块,RAID控制器可以通过计算式D2⊕P1的出D3。

    • (3)2号条带组

    “物理盘3”离线后,2号条带组中缺失“D5”数据块,RAID控制器可以通过计算式D4⊕P2的出D5。
    RAID-6技术详解_第2张图片

    • (4)3号条带组

    “物理盘3”离线后,3号条带组中缺失“P3”校验块,不影响数据块“D6”和“D7”。

P校验依然使用异或算法得出,即P0=D0⊕D1、P1=D2⊕D3,P2=D4⊕D5,P3=D64⊕D7
Q校验使用基于伽罗华域(Galois Field,简写为GF)的里德-所罗门(Reed-Solomon)编码计算得出,即Q0=GF(D0)⊕GF(D1)、Q1=GF(D2)⊕GF(D3),Q2=GF(D4)⊕GF(D5),Q3=GF(D6)⊕GF(D7)
其中GF(D0)的含义是对D0进行伽罗华域的里德-所罗门编码变换。

  • 情况二,两块成员盘离线

    以图1-41为例,假设“物理盘2”和“物理盘3”离线,RAID-6中只剩下“物理盘0”和“物理盘1”,我们对每个条带组的数据分别进行分析:

    • (1)0号条带组

    “物理盘2”和“物理盘3”离线后,0号条带组中缺失“P0”和“Q0”校验块,不影响数据块“D0”和“D1”。

    • (2)1号条带组

    “物理盘2”和“物理盘3”离线后,1号条带组中缺失“Q1”校验块和“D3”数据块,“Q1”校验块不用理会,RAID控制器可以通过计算式D2⊕P1得出D3。

    • (3)2号条带组

    “物理盘2”和“物理盘3”离线后,2号条带组中缺失“D4”和“D5”数据块,只剩下“P2”和“Q2”两个校验块,RAID控制器可以通过以下方程式计算出D4和D5:
    RAID-6技术详解_第3张图片

    • (4)3号条带组

    “物理盘2”和“物理盘3”离线后,3号条带组中缺失“D7”数据块和“P3”校验块,只剩下“Q3”校验块和“D6”数据块。对于“P3”校验块不用理会,而对于“D7”数据块,RAID控制器先计算出Q3⊕D6的结果,再通过GF(2^28 )编码就可以得到D7的值。


2、NetApp双异或RAID-6数据组织原理

NetApp公司推出的双异或RAID-6也称为RAID-DP,它实际上也就是双RAID-4技术,所谓双RAID-4技术主要是说在同一磁盘阵列中组建两个独立的不同算法的校验磁盘,在单校验磁盘下工作原理与RAID-4一样,但增加了一个校验盘之后,则使整个磁盘阵列的安全性得到提高,能够允许两块盘同时离线。

DP - Double Parity,就是在RAID 4所使用的一个行XOR校验硬盘的基础上又增加了一个硬盘用于存放斜向的XOR校验信息 具体实现过程如下:

  • 横向校验盘中P0 - P3为各个数据盘中横向数据的校验信息,例:P0=D0 XOR D1 XOR D2 XOR D3
  • 斜向校验盘中DP0 - DP3为各个数据盘及横向校验盘的斜向数据校验信息,例:DP0=D0 XOR D5 XOR D10 XOR D15

RAID-6技术详解_第4张图片
RAID 6 DP也有两个独立的校验数据块。第一个校验信息与RAID 6 P+Q的第一个校验值是相同的,第二个不同于RAID 6 P+Q,采用的是斜向异或运算得到行对角奇偶校验数据块。

行奇偶校验值是同一分条的用户数据异或运算获得到,所图所示:P0是由分条0上的D0,D1,D2和D3异或运算得到,P1由分条1上的D4,D5,D6,D7异或运算,等等。所以,P0 = D0 ⊕D1⊕ D2⊕D3,P1 = D4⊕D5⊕D6⊕D7,如此类推。 第二个校验数据块是由阵列的对角线数据块进行异或运算。数据块的选择过程比较复杂。DP0是由硬盘1 的分条0上的D0,硬盘2的分条1上的D5,硬盘3上的分条2的D10,和硬盘上4 分条3上的D15异或操作得到。DP1是对硬盘2 的分条0上的D1,硬盘3的分条1上的D6,硬盘4上分条2的 D11,和的第一块校验硬盘上分条3 上的P3进行异或运算得到,如此类推。


构建RAID-DP最少需要4块物理盘才能实现,下面以6块物理盘为了进行说明,其数据分布情况如图1-42所示:


图1-42中“P0、P1、P2、P3”是第一个独立的校验信息,属于横向校验,其中:

  • P0=D0⊕D1⊕D2⊕D3;

  • P1=D4⊕D5⊕D6⊕D7;

  • P2=D8⊕D9⊕D10⊕D11;

  • P3=D12⊕D13⊕D14⊕D15。

图1-42中“DP0、DP1、DP2、DP3”是第二个独立的校验信息,属于斜向校验,其中:

  • DP0=D0⊕D5⊕D10⊕D15;

  • DP1=D1⊕D6⊕D11⊕P3;

  • DP2=D2⊕D7⊕P2⊕D12;

  • DP3=D3⊕P1⊕D8⊕D13

数据恢复

一个RAID 6阵列能够容忍双硬盘失效。如上图所示,如果硬盘1和2失效,上面的所有数据会丢失,但其他硬盘上的数据和奇偶校验信息是有效的,我们了解一下阵列数据是如何恢复的。

  • 恢复D12采用DP2和斜向校验(D12 = D2⊕D7⊕P2⊕DP2);
  • 恢复D13利用P3和横向校验(D13 = D12⊕D14⊕D15⊕P3),通过使用DP3和斜向校验恢复D8(D8 = D3⊕P1⊕DP3⊕D13),使用P2和横向校验得到D9(D9 = D8⊕D10⊕D11⊕P2),
  • 恢复D4采用DP4和斜向校验,利用P1和横向校验得到D5等。这些操作是重复的,直到所有数据在故障盘被恢复。

一个RAID 6组的性能,无论算法是DP还是P+Q,相对都比较慢。因此,RAID 6适用两种场景:

  • 数据非常重要,需要尽可能长的时间处于在线和可使用的状态。
  • 使用的硬盘容量非常大(通常超过2T)。大容量硬盘的重建时间较长,两个硬盘都失效是会造成数据较长时间不能访问。在RAID 6中,可以实现一个硬盘重构时另一个硬盘失效。一些企业希望在使用大容量硬盘后,存储阵列的供应商使用一个双重保护的RAID组。

因为有第二个独立的校验信息存在,所以理论上RAID-DP即使两块成员盘同时离线也不会出现故障。

下面我们来分析在两块成员盘同时离线的情况下,RAID-DP如何保持数据的完整性。

假设成员盘中的硬盘0和硬盘1同时离线,如图1-43所示。


从图1-43可以看出,硬盘0和硬盘1同时离线后,数据块D0、D1、D4、D5、D8、D9、D12、D13丢失,在RAID-DP运行过程中,RAID控制器将用剩下的数据块和校验块计算出丢失的数据块,计算过程如下:

  • 第一步,计算数据块D1

因为DP1=D1⊕D6⊕D11⊕P3,

所以D1= DP1⊕D6⊕D11⊕P3。

通过这个计算式将得到丢失的数据块D1,如图1-44所示。

  • 第二步,计算数据块D0

因为P0=D0⊕D1⊕D2⊕D3,

所以D0= P0⊕D1⊕D2⊕D3。

通过这个计算式将得到丢失的数据块D0,如图1-45所示。

  • 第三步,计算数据块D5

因为DP0=D0⊕D5⊕D10⊕D15,

所以D5=D0⊕DP0⊕D10⊕D15。

通过这个计算式将得到丢失的数据块D5,如图1-46所示。

  • 第四步,计算数据块D4

因为P1=D4⊕D5⊕D6⊕D7,

所以D4= P1⊕D5⊕D6⊕D7。

通过这个计算式将得到丢失的数据块D4,如图1-47所示。

你可能感兴趣的:(纠删编码,学习)