一种快速重构的RAID-6编码及重构方法
技术领域
本发明属于计算机存储领域,具体涉及一种可以容忍双盘失效,且满足RAID-6特性的新型编码方法。
背景技术
磁盘冗余阵列RAID(Redundant Array of Independent Disk)是一种在较低的成本下,能够提供高可靠性、高性能服务的常用方案。在前期的RAID方案中,从RAID-0到RAID-5,都只能容忍单盘失效。但是最近几年来,RAID系统的基本单位——磁盘,在容量上有了显著的提升。同时,随着存储的数据量的增加,大型磁盘阵列的使用越来越普遍。然而,大型磁盘阵列有更大的可能性造成双盘失效,这使得RAID-5无法满足人们的需求。
RAID-6是一种能够容忍双盘同时失效的编码规范,并且越来越受到人们欢迎。根据网络存储工业协会(SNIA)的定义,RAID-6是“在任何形式下,两个磁盘同时失效的情况下,仍可以继续执行读写请求的RAID编码”。目前,已经有很多基于RAID-6的纠删码技术,如Reed-Solomon编码,Cauchy Reed-Solomon编码,EVENODD编码,RDP编码等等。这些都是极大距离可分MDS(Maximum Distance Separable)编码。其中,X-编码和P-编码是垂直编码,其它的都是水平编码。当然也有非MDS RAID-6编码,例如WEAVER编码,HoVer编码和Pyramid编码。
然而,上面提到的所有编码都存在着一定的缺陷。图1是一种典型的水平MDS RAID-6编码的结构。它由K+2个磁盘组成,前K个磁盘用来存储数据,最后两个盘是校验盘,分别叫做P盘和Q盘。水平MDS RAID-6编码存在一个共同的局限性:生成校验元素时需要大量数据元素的参与。这一缺陷约束了单盘失效或者双盘失效情况下的重构性能。X-编码,循环编码和P-编码是垂直编码,但是它们存在着同样的局限性。
磁盘的读写性能和重构性能是纠删码设计者最关心的问题,在这个问题上已经有了很多的研究。许多研究者关心如何通过改变结构来提高RAID的重构性能,而非MDS编码正是另一种能够打破重构性能瓶颈的方法。这种编码方式把校验信息部署到更多的校验元素中,大大降低了构建一个校验元素的元素数量。例如,WEAVER编码的设计核心是如何容忍多个磁盘并发失效。然而,这些方法的缺陷都是存储效率很低,它的存储效率低至50%。这是WEAVER编码一个很大的缺陷。在某些单盘失效和双盘失效的情况下,HoVer编码有着很高的重构性能,但是,在其它的情况下,它的重构性能甚至比传统的MDS编码还低。而且,HoVer编码存在空闲的元素,空间利用率低。
发明内容
为了弥补目前各种RAID-6编码方法存在的局限性,本发明提供了一种快速重构的RAID-6编码方法,利用该方法所得到编码能够容忍双盘失效,并且具有高可靠性、高扩展性、低计算量和低I/O复杂度,以及快速恢复丢失数据的功能;本发明还提供了该编码的重构方法。
本发明提供的一种快速重构的RAID-6编码方法,设Code-M(N,K)表示一种RAID-6编码,其中,N为大于等于2的正整数,K+1为大于等于3的素数,在Code-M(N,K)中,一个条带有N个条带单元集,每个条带单元集由位于相邻磁盘上的K个条带单元组成,每个条带单元由同一磁盘上连续K个的元素组成;
一个Code-M(N,K)的条带由N个独立的K行K列的条带单元集组成,每一个条带单元集拥有同样的结构,主对角线上的元素被设计为校验元素,其它的都是数据元素;
设<s-1>N表示s-1对N求模,对于Code-M(N,K)中的任意一个校验元素(s,r,c),它在Code-M(N,K)编码中是由同一条带单元集中的一组水平数据元素和序号为<s-1>N的条带单元集中的一组对角线元素通过异或运算得到,一个条带中所有校验元素(s,r,c)的形式化编码规则,如下:
式I中,符号“+”和“∑”均表示异或运算,&表示逻辑与,i表示该元素所在列在该条带单元集中的列号,<K-2-r-i>K+1表示K-2-r-i对K+1求模,其中,r+c=K-1,即所有校验元素(s,r,c)都在条带单元集的对角线上。
上所述RAID-6编码的重构方法,其特征在于,根据不同的失效情况分别采用相应的过程进行重构;
情况一、单盘失效:
假设失效的条带单元为(s,c),其重构过程为:
(1.1)遍历条带单元(s,c)中的每一个元素,如果该元素(s,r,c)满足r+c=K-1,转入步骤1.2;否则,转入步骤1.3;所有元素遍历完后结束此过程;
(1.2)使用式I重构该元素,转入步骤1.1;
(1.3)使用式II重构该元素,转入步骤1.1;
式II中,符号“+”和“∑”均表示异或运算,&表示逻辑与,i表示该元素所在列在该条带单元集中的列号,<s-1>N表示s-1对N求模,同理,<K-2-r-i>K+1表示K-2-r-i对K+1求模;
情况二、双盘失效,失效的两个条带单元在同一条带单元集上:
假设失效的条带单元为(s1,c1)、(s1,c2),其重构过程为:
(2.1)设r的初值为1;
(2.2)把<r+c2-c1>K+1的值赋予r;
(2.3)(s1,r,c1)一定是数据元素,使用式III进行重构;
式III中,符号“+”和“∑”均表示异或运算,&表示逻辑与,i表示该元素所在列在该条带单元集中的列号,<s+1>N表示s-1对N求模,同理,<K-2-r-c>K+1表示K-2-r-i对K+1求模,<r+c-i>K+1表示r+c-i对K+1求模
(2.4)如果r+c2≠K-1,(s1,r,c2)一定是数据元素,使用式II进行重构,否则,(s1,r,c2)一定是校验元素,使用式I进行重构;
(2.5)如果r+c2≠K-1,那么转入步骤2.1,否则,转入步骤2.6;
(2.6)设r的初值为1;
(2.7)把<r+c1-c2>K+1的值赋予r;
(2.8)(s1,r,c2)一定是数据元素,使用式III进行重构;
(2.9)如果r+c1≠K-1,(s1,r,c1)一定是数据元素,使用式II进行重构,否则,(s1,r,c1)一定是校验元素,使用式I进行重构;
(2.10)如果r+c2≠K-1,那么转入步骤2.6,否则,结束此过程;情况三、双盘失效,失效的两个条带单元在相邻的两个条带单元集上:
假设失效的两条失效的条带单元分别为(s1,c1)、(s2,c2),其中<s1+1>N=s2,其重构过程为:
(3.1)遍历条带单元(s1,c1)上的所有元素(s1,r,c1),如果r+c1=K-1,那么转入步骤3.2,否则,转入步骤3.3;
(3.2)(s1,r,c1)是校验元素,使用式I重构该元素,转入步骤3.4;
(3.3)(s1,r,c1)是数据元素,使用式II重构该元素,转入步骤3.4;
(3.4)如果遍历结束,转入步骤3.5,否则,转入步骤3.1;
(3.5)遍历条带单元(<s1+1>N,c2)上的所有元素(<s1+1>N,r,c2),如果r+c2=K-1,那么转入步骤3.6,否则,转入步骤3.7;
(3.6)(<s1+1>N,r,c2)是校验元素,使用式I重构该元素,转入步骤3.8;
(3.7)(<s1+1>N,r,c2)是数据元素,使用式II重构该元素,转入步骤3.8;
(3.8)如果遍历结束,结束此过程,否则,转入步骤3.5;
情况四、双盘失效,失效的两个条带单元所在的条带之间的条带单元集间距为2:
假设失效的两条失效的条带单元分别为(s1,c1)、(s2,c2),其中<s1+2>N=s2,其重构过程为:
(4.1)遍历条带单元(s1,c1)上的所有元素(s1,r,c1),如果r+c1=K-1,那么转入步骤4.2,否则,转入步骤4.3;
(4.2)(s1,r,c1)是校验元素,使用式I重构该元素,转入步骤4.4;
(4.3)(s1,r,c1)是数据元素,使用式III重构该元素,转入步骤4.4;
(4.4)如果遍历结束,转入步骤4.5,否则,转入步骤4.1;
(4.5)遍历条带单元(<s1+2>N,c2)上的所有元素(<s1+2>N,r,c2),如果r+c2=K-1,那么转入步骤4.6,否则,转入步骤4.7;
(4.6)(<s1+2>N,r,c2)是校验元素,使用式I重构该元素,转入步骤4.8;
(4.7)(<s1+2>N,r,c2)是数据元素,使用式II重构该元素,转入步骤4.8;
(4.8)如果遍历结束,结束此过程,否则,转入步骤4.5;
情况五、双盘失效,失效的两个条带单元所在的条带之间的条带单元集间距大于或等于3:
假设失效的两条失效的条带单元分别为(s1,c1)、(s2,c2),其中<s2-s1>N>=3,其重构过程为:
(5.1)遍历条带单元(s1,c1)上的所有元素(s1,r,c1),如果r+c1=K-1,那么转入步骤5.2,否则,转入步骤5.3;
(5.2)(s1,r,c1)是校验元素,使用式I重构该元素,转入步骤5.4;
(5.3)(s1,r,c1)是数据元素,使用式II重构该元素,转入步骤5.4;
(5.4)如果遍历结束,转入步骤5.5,否则,转入步骤5.1;
(5.5)遍历条带单元(s2,c2)上的所有元素(s2,r,c2),如果r+c2=K-1,那么转入步骤5.6,否则,转入步骤5.7;
(5.6)(s2,r,c2)是校验元素,使用式I重构该元素,转入步骤5.8;
(5.7)(s2,r,c2)是数据元素,使用式II重构该元素,转入步骤5.8;如果遍历结束,结束此过程,否则,转入步骤5.5。
同时考虑到RAID-6系统大部分时间工作在正常模式下,单盘失效情况是次要的,而双盘失效的概率更低这一实际情况,本发明设计了上述新的方案来构建RAID-6编码,称之为Code-M。为了能够容忍双盘失效,并且希望各方面的性能都有所提高,Code-M将校验信息部署到更多的校验元素中。具体而言,Code-M有以下几个主要特点:
(1)Code-M是一种新的基于集合的RAID-6编码方案。同时,我们提出了一种新的概念——条带单元集,来构建编码方案。这样的RAID-6编码能够在较低的成本下获得较高的性能。
(2)Code-M极大地降低了单盘失效模式下重构的I/O量和计算复杂度。
(3)在大部分情况下,Code-M降低了双盘失效情况下的I/O量和计算复杂度。
附图说明
图1是一种典型的水平MDS RAID-6编码;
图2是一种典型的Code-M(N,K)编码的结构,其中N=3,K=4;
图3是Code-M(N,K)构建的流程图;
图4是Code-M(N,K)重构的总体流程图;
图5是在重构的第一种情况下,单个条带重构流程;
图6是在重构的第二种情况下,单个条带重构流程;
图7是在重构的第三种和第五种情况下,单个条带重构流程;
图8是在重构的第四种情况下,单个条带重构流程。
具体实施方式
首先,定义一下与Code-M相关的一些概念:
●<M>n:<M>n表示M模n的值,值的范围是0到n-1。
●元素:编码时的基本单位。一个元素可以是磁盘上的1Bit,也可以是一个连续的数据块。有两种形式的元素,分别是数据元素和校验元素。
●条带:在纠删码中,条带是可以独立的恢复丢失的数据元素或校验元素的元素集合。
●条带单元:一个条带中,同一磁盘上的所有连续数据叫做条带单元。
●条带单元集:一个条带中,相邻磁盘上的若干条带单元组成的集合。
●条带单元间距:两个条带单元集之间的最小距离。如果有两个条带单元集,它们的编号分别为s1和s2,那么这两个条带单元集之间的距离就是min(<s1-s2>N,<s2-s1>N)。
●校验链:一条校验链包括校验元素和所有创建校验元素的数据元素。
●校验链长度:一条校验链上,所有元素的数量。
●水平编码:一种纠删码,所有数据元素和校验元素在同一条带单元上。
●垂直编码:一种纠删码,所有数据元素在一个条带单元中,或者所有校验元素在一个条带单元中。
一、Code-M(N,K)的构建
本发明使用Code-M(N,K)来表示某一特定的Code-M结构,其中,N为大于等于2的正整数,K+1为大于等于3的素数。在这样结构的Code-M中,一个条带有N个条带单元集,每个条带单元集由位于相邻磁盘上的K个条带单元组成,每个条带单元由同一磁盘上连续K个的元素组成。Code-M(N,K)表示一个K行、K*N列模型的编码,共有K*N个条带单元。
I.数据/校验元素标记
一个Code-M(N,K)的条带由N个独立的K行K列的条带单元集组成。每一个条带单元集拥有同样的结构,主对角线上的元素,即图2中标记着p的元素,被设计为校验元素,其它的都是数据元素。我们用二元组(X,Z)来表示在一个条带中的某一条带单元。X表示条带单元集的序号,0=<X<=N-1。Z表示该列在这一条带中的列号,0=<Z<=K-1。我们使用三元组(X,Y,Z)表示每一个元素。X表示该元素所在的条带单元集的序号,0=<X<=N-1。Y表示该元素所在的行号,0=<Y<=K-1。Z表示该元素所在列在该条带单元集中的列号,0=<Z<=K-1。图2是一种典型的Code-M(N,K)编码的结构,其中N=3,K=4。
II.Code-M的构建
设<s-1>N表示s-1对N求模,对于任意一个校验元素(s,r,c),它在Code-M(N,K)编码中是由同一条带单元集中的一组水平数据元素和序号为<s-1>N的条带单元集中的一组对角线元素通过异或运算得到。一个条带中所有校验元素(s,r,c)的形式化编码规则,如下:
式(I)中,符号“+”和“∑”均表示异或运算,&表示逻辑与,i表示该元素所在列在该条带单元集中的列号,<K-2-r-i>K+1表示K-2-r-i对K+1求模。其中,r+c=K-1,即所有校验元素(s,r,c)都在条带单元集的对角线上。
具体流程如图3所示。通过此式,可以构建出磁盘阵列中的所有校验数据。
二、Code-M的重构
Code-M可以根据实效磁盘的个数分为单盘失效和双盘失效,双盘失效的重构又可以分为四种情况,而重构的算法用到式(I)、式(II)和式(III)。总体流程如图4所示。下面,逐一描述以上五种情况下的重构算法。
式(II)中,符号“+”和“∑”均表示异或运算,&表示逻辑与,i表示该元素所在列在该条带单元集中的列号,<s-1>N表示s-1对N求模,同理,<K-2-r-i>K+1表示K-2-r-i对K+1求模。
式(III)中,符号“+”和“∑”均表示异或运算,&表示逻辑与,i表示该元素所在列在该条带单元集中的列号,<s+1>N表示s-1对N求模,同理,<K-2-r-c>K+1表示K-2-r-i对K+1求模,<r+c-i>K+1表示r+c-i对K+1求模。
情况一:单盘失效
假设失效的条带单元为(s,c),此情况下的重构流程如图5所示,具体步骤描述如下:
(1.1)遍历条带单元(s,c)中的每一个元素,如果该元素(s,r,c)满足r+c=K-1,转入步骤1.2;否则,转入步骤1.3;所有元素遍历完后结束此过程;
(1.2)使用式(I)重构该元素,转入步骤1.1;
(1.3)使用式(II)重构该元素,转入步骤1.1。
情况二:双盘失效,失效的两个条带单元在同一条带单元集上
假设失效的条带单元为(s1,c1)、(s1,c2),此情况下的重构流程如图6所示,具体步骤描述如下:
(2.1)设r的初值为1;
(2.2)把<r+c2-c1>K+1的值赋予r;
(2.3)(s1,r,c1)一定是数据元素,使用式(III)进行重构;
(2.4)如果r+c2≠K-1,(s1,r,c2)一定是数据元素,使用式(II)进行重构,否则,(s1,r,c2)一定是校验元素,使用式(I)进行重构;
(2.5)如果r+c2≠K-1,那么转入步骤2.1,否则,转入步骤2.6;
(2.6)设r的初值为1;
(2.7)把<r+c1-c2>K+1的值赋予r;
(2.8)(s1,r,c2)一定是数据元素,使用式(III)进行重构;
(2.9)如果r+c1≠K-1,(s1,r,c1)一定是数据元素,使用式(II)进行重构,否则,(s1,r,c1)一定是校验元素,使用式(I)进行重构;
(2.10)如果r+c2≠K-1,那么转入步骤2.6,否则,结束此过程。
情况三:双盘失效,失效的两个条带单元在相邻的两个条带单元集上
假设失效的两条失效的条带单元分别为(s1,c1)、(s2,c2),其中<s1+1>N=s2,此情况下的重构流程如图7所示,具体步骤描述如下::
3.1遍历条带单元(s1,c1)上的所有元素(s1,r,c1),如果r+c1=K-1,那么转入步骤3.2,否则,转入步骤3.3;
(3.2)(s1,r,c1)是校验元素,使用式(I)重构该元素,转入步骤3.4;
(3.3)(s1,r,c1)是数据元素,使用式(II)重构该元素,转入步骤3.4;
(3.4)如果遍历结束,转入步骤3.5,否则,转入步骤3.1;
(3.5)遍历条带单元(<s1+1>N,c2)上的所有元素(<s1+1>N,r,c2),如果r+c2=K-1,那么转入步骤3.6,否则,转入步骤3.7;
(3.6)(<s1+1>N,r,c2)是校验元素,使用式(I)重构该元素,转入步骤3.8;
(3.7)(<s1+1>N,r,c2)是数据元素,使用式(II)重构该元素,转入步骤3.8;
(3.8)如果遍历结束,结束此过程,否则,转入步骤3.5。
情况四:双盘失效,失效的两个条带单元所在的条带之间的条带单元集间距为2
假设失效的两条失效的条带单元分别为(s1,c1)、(s2,c2),其中<s1+2>N=s2,此情况下的重构流程如图8所示,具体步骤描述如下:
(4.1)遍历条带单元(s1,c1)上的所有元素(s1,r,c1),如果r+c1=K-1,那么转入步骤4.2,否则,转入步骤4.3;
(4.2)(s1,r,c1)是校验元素,使用式(I)重构该元素,转入步骤4.4;
(4.3)(s1,r,c1)是数据元素,使用式(III)重构该元素,转入步骤4.4;
(4.4)如果遍历结束,转入步骤4.5,否则,转入步骤4.1;
(4.5)遍历条带单元(<s1+2>N,c2)上的所有元素(<s1+2>N,r,c2),如果r+c2=K-1,那么转入步骤4.6,否则,转入步骤4.7;
(4.6)(<s1+2>N,r,c2)是校验元素,使用式(I)重构该元素,转入步骤8;
(4.7)(<s1+2>N,r,c2)是数据元素,使用式(II)重构该元素,转入步骤4.8;
(4.8)如果遍历结束,结束此过程,否则,转入步骤4.5。
情况五:双盘失效,失效的两个条带单元所在的条带之间的条带单元集间距大于或等于3
假设失效的两条失效的条带单元分别为(s1,c1)、(s2,c2),其中<s2-s1>N>=3,此情况下的重构流程如图7所示,具体步骤描述如下:
(5.1)遍历条带单元(s1,c1)上的所有元素(s1,r,c1),如果r+c1=K-1,那么转入步骤5.2,否则,转入步骤5.3;
(5.2)(s1,r,c1)是校验元素,使用式(I)重构该元素,转入步骤5.4;
(5.3)(s1,r,c1)是数据元素,使用式(II)重构该元素,转入步骤5.4;
(5.4)如果遍历结束,转入步骤5.5,否则,转入步骤5.1;
(5.5)遍历条带单元(s2,c2)上的所有元素(s2,r,c2),如果r+c2=K-1,那么转入步骤5.6,否则,转入步骤5.7;
(5.6)(s2,r,c2)是校验元素,使用式(I)重构该元素,转入步骤5.8;
(5.7)(s2,r,c2)是数据元素,使用式(II)重构该元素,转入步骤5.8;如果遍历结束,结束此过程,否则,转入步骤5.5。
三、实例
下面,我们以Code-M(3,4)为例,描述一下Code-M的具体实施方案。图2是Raid-6型Code-M(3,4)编码的具体结构,图中任何一个数据块表示Code-M(3,4)编码中的一个元素。标记了“d”的元素为数据元素,标记了“p”的元素为校验元素。所有的校验元素都在条带单元集的对角线上。从图2中,我们可以看到,一个Code-M(3,4)编码的条带包含3个条带单元集,12个条带单元,或者48个元素。在Code-M(3,4)编码中,一条校验链的长度为7,其中包括有6个数据元素和一个校验元素。
根据Code-M的构建规则,如果要得到校验元素(1,0,3),只需要将(1,0,0)、(1,0,1)、(1,0,2)、(0,0,2)、(0,1,1)、(0,2,0)这六个元素,做异或运算即可。用同样的方法可以计算出剩下的校验元素。如果发生单盘失效或者双盘失效,通过本发明所提出的重构算法即可恢复丢失的数据。
以上所述为本发明的较佳实施例而已,但本发明不应该局限于该实施例和附图所公开的内容。所以凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。