一种基于分组编码的磁盘阵列构建方法
【技术领域】
[0001]本发明属于计算机磁盘阵列技术领域,具体涉及通过分组编码来加快单盘修复的磁盘阵列构建方法。
【背景技术】
[0002]在分布式存储系统中,数据可靠性是一个重要指标,存储系统往往采用基于复制或纠删码的策略生成冗余来保证数据可靠性。在现代存储领域中,由于数据量急剧增加,存储系统的磁盘数也急剧增加,为了保证数据可靠性,需要能同时容多个磁盘错。此时,基于复制的策略存储开销过大,因此往往采用基于纠删码的策略。美国约翰-韦利(JohnWiley&Sons)公司出版的《里德所罗门码及其应用》(Reed-Solomon codes and theirapplicat1ns,1999年第I版,第60?105页)所介绍的里德所罗门码(Reed - Solomoncodes)是目前最常用的能同时容多磁盘错的纠删码。但里德所罗门码是基于有限域运算,编码开销和数据更新开销较大;当进行单盘修复时,需要读取的数据总量较大,因此网络开销较大,修复速度较慢。
【发明内容】
[0003]本发明的目的是提出一种基于分组编码的磁盘阵列构建方法,以克服现有技术的上述缺陷,在能容任意四个磁盘错的前提下减小单盘修复时所需读取的数据总量和各磁盘读取量,节省网络带宽,加快修复速度。
[0004]本发明基于分组编码的磁盘阵列构建方法,其特征在于包括以下步骤:
[0005]第一步:磁盘分区步骤
[0006]首先将每个容量为C MB的磁盘切分成大小为H MB的C/Η个逻辑块(Chunk),其中C的范围是256GB?4TB (通常采用2TB或4TB),H的范围是64MB?IGB (通常采用64MB);然后将所有磁盘划分为N组,每组G个磁盘,其中G为素数,N〈 = G,共G*N个磁盘;在各组中,从每个磁盘中取G个逻辑块组成一个G*G的逻辑块矩阵,构成一个分区;
[0007]第二步:组内编码步骤
[0008]设Pu为某个分区第i行第j列的逻辑块,<j-1> e表示j_i对G求模;取<j_i> G相同的逻辑块来构建组内子阵列(RAID),每个组内子阵列由G个逻辑块构成;组内子阵列采用RAID-5编码,即G-1个数据块产生I个校验块;
[0009]第三步:组间编码步骤
[0010]在第O组的分区中,对每个逻辑块进行编号,从左到右、从上到下依次为O到G*G-1 ;定义一个右移操作:在一个分区中,第i行的编号循环右移i个逻辑位置;对第O组的分区进行该右移操作,得到第I组分区的逻辑编号;对第I组的分区进行该右移操作,得到第2组分区的逻辑编号,以此类推;组间编码的方法为,从各分区取出相同编号的逻辑块构建组间子阵列,组间子阵列共由N个逻辑块构成;组间子阵列采用RAID-5编码,即N-1个数据块产生I个校验块;选择非组内编码校验块的逻辑块作为组间编码校验块;
[0011]第四步:制定容错策略步骤
[0012]当发生单磁盘错误时,记录坏盘所包含的组间子阵列的编号,并发地从其它分区读取相同编号的逻辑块进行异或运算,并发地将恢复的数据临时写入空闲磁盘,最后将恢复的数据写入热备盘;当发生多磁盘错误时,首先采用组内编码修复损坏的逻辑块,再采用组间编码修复剩余的逻辑块。
[0013]上述本发明基于分组编码的磁盘阵列构建方法包括了磁盘分区步骤,组内编码步骤,组间编码步骤和制定容错策略步骤;采用此构建方法的磁盘阵列能容任意四个磁盘错;当发生单磁盘错时,采用组间编码进行修复;当发生多磁盘错时,采用组内编码和组间编码的混合修复。单盘修复时,修复一个逻辑块仅需读取N-1个逻辑块。本发明方法与传统磁盘阵列构建方法相比,在相同的容错能力和冗余率的前提下,修复单磁盘错时所读取的数据总量以及各磁盘的数据读取量都明显减少,节省了网络带宽,加快了修复速度,提高了系统可靠性。
[0014]本发明基于分组编码的磁盘阵列构建方法与现有技术相比,具有以下优点:
[0015]1.由于本发明仅采用基于异或运算的编码就达到了容任意四个磁盘错的目的,与里德所罗门码(Reed - Solomon codes)相比,本发明方法的编码速度更快,数据更新开销更小。
[0016]2.在相同的容错能力和冗余率的前提下,本发明方法与里德所罗门码(Reed-Solomon codes)相比,进行单盘修复所需读取的数据总量明显减少,节省了网络带宽;各磁盘的数据读取量减少数倍,加快了修复速度,提高了系统可靠性。
【附图说明】
[0017]图1为按照本发明方法构建的一个具体磁盘阵列的总体结构示意图。
[0018]图2为组内编码方法示意图;
[0019]图3为组间编码方法示意图。
[0020]图4为单盘修复方法示意图;
[0021 ] 图5为多盘修复方法示意图。
【具体实施方式】
[0022]下面结合附图通过具体实施例对本发明基于分组编码的磁盘阵列构建方法作进一步的详细说明。
[0023]实施例1:
[0024]本实施例基于分组编码的磁盘阵列构建方法,具体包括以下步骤:
[0025]第一步:磁盘分区步骤
[0026]附图1给出了按照本发明方法构建的一个具体实施例磁盘阵列的总体结构示意图。该图中,每一列代表一个磁盘,共有编号为DO?D14的15个磁盘,本实施例中设每个磁盘容量都为2TB ;每一个方格代表一个64MB的逻辑块(Chunk),所有磁盘都被切分成32768个逻辑块(图中每个磁盘仅列出了 5个逻辑块)。将所有磁盘划分为3组,每组5个磁盘。在各组中,从各个磁盘取出5个逻辑块组成5*5的逻辑块矩阵,称为一个分区,最终形成第O号磁盘分区R0、第I号磁盘分区Rl和第2号磁盘分区R2三个分区。在每个分区内进行组内编码,在分区之间进行组间编码。图中小方格内采用空白表示的逻辑块为数据块;图中小方格内采用右斜线表示的逻辑块为组内编码校验块;小方格内采用水平直线表示的逻辑块为组间编码校验块。
[0027]第二步:组内编码步骤
[0028]形成分区之后进行组内编码。图2为组内编码方法示意图。在图2中,每个逻辑块由2个数字进行标记,第一个数字表示所在行数,设为i ;第二个数字表示所在列数,设为j ;设表示j_i对5求模。取<j-1> 5相同的逻辑块构建组内子阵列,采用RAID-5编码,即4个数据块异或产生一个校验块。附图2中共有编号为①?⑤的五条连线,每条连线上包含5个逻辑块,且这5个逻辑块满足相同。因此每一条连线上的逻辑块均组成一个组内子阵列,其中小方格内采用左斜线表示的逻辑块为校验块。
[0029]第三步:组间编码步骤
[0030]进行组间编码前,需要对各分区中的逻辑块进行编号。
[0031]图3为组间编码方法示意图。如附图3中所示:在第O号分区RO中,从左到右、从上到下依次编号为O?24。现定义一个右移操作:在一个分区中,第i行的编号循环右移i个逻辑位置。对第O号磁盘分区RO中的编号进行