一种独立磁盘冗余阵列RAID5的快速扩容方法转让专利

申请号 : CN201310199392.4

文献号 : CN104182176B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 冯丹李楚王芳邱丽娜

申请人 : 华中科技大学

摘要 :

本发明公开了一种独立磁盘冗余阵列RAID5的快速扩容方法,包括:获取条带组大小SS、扩容读单元大小RU、扩容写单元大小WU以及辅助变量Y和St,并初始化当前扩容窗口W_no为0,初始化当前扩容窗口内的偏移w_off为0,并将扩容所需的迁移记录集R设为空,将当前磁盘计数器d初始化为0,获取条带号s=w_no*Wsize+w_off以及在条带组中的偏移s_off=s%SS,获取当前盘扩容读单元的起始条带号Rb=d*St、结束条带号Re=Rb+RU‑1,判断条带号s对应的条带是否在本条带组中扩容读单元的起始条带号和结束条带号之间,如果不是则判断是否有d=n‑1,如果是则判断是否有w_off=Wsize‑1,或者s=v‑1,如果是则从扩容前RAID5中的磁盘读取对应的条带单元写入对应的新加的磁盘上。本发明能够使得扩容后阵列的性能和存储效率有所提升。

权利要求 :

1.一种独立磁盘冗余阵列RAID5的快速扩容方法,其特征在于,包括以下步骤:(1)采用以下公式获取条带组大小SS、扩容读单元大小RU、扩容写单元大小WU以及辅助变量Y和St,并初始化当前扩容窗口w_no为0,其中条带组大小指条带组中的条带个数,参数v,n,m均为正整数,v是每个盘的条带个数,n是扩容前RAID5的磁盘个数,m是为扩容而新加入的磁盘个数:其中,gcd表示获得最大公约数;

(2)初始化当前扩容窗口内的偏移w_off为0,并将扩容所需的迁移记录集R设为空;

(3)将当前磁盘号d初始化为0,获取条带号s=w_no*Wsize+w_off以及在条带组中的偏移s_off=s%SS,其中Wsize为扩容窗口的大小;

(4)获取当前盘扩容读单元的起始条带号Rb=d*St、结束条带号Re=Rb+RU-1,以及扩容写单元的结束条带号We=Rb+WU-1;

(5)判断条带号s对应的条带是否在本条带组中扩容读单元的起始条带号和结束条带号之间,如果是则继续进入步骤(6),否则跳转到步骤(10);

(6)判断是否有n≥m,如果有则转入步骤(7),否则转入步骤(8);

(7)计算该条带上的条带单元将被迁移到的目标盘号k,其中,若 则k=(d%m+n),否则 然后进入步骤(9);

(8)计算该条带上的条带单元将被迁移到的目标盘号k,其中,若s_off≤We,则k=d+n,否则 然后进入步骤(9);

(9)将条带s上磁盘号为d的条带单元到磁盘号为k的条带单元的迁移路径记录在迁移记录集R中;

(10)判断是否有d=n-1,如果是则转入步骤(11),否则设置d=d+1,然后返回步骤(4);

(11)判断是否有w_off=Wsize-1,或者s=v-1,如果是则进入步骤(12),否则设置w_off=w_off+1,并返回步骤(3);

(12)对于当前扩容窗口w_no中的所有条带而言,根据R中记录的迁移路径,从扩容前RAID5中的磁盘读取对应的条带单元写入对应的新加的磁盘上,对扩容前RAID5中被读取的条带单元以及新加磁盘上除被写入的条带单元之外的条带单元都写入“0”;

(13)判断是否有w_no=0,如果是则转入步骤(14),否则转入步骤(15);

(14)获取当前RAID5系统的逻辑块地址LBA,根据该逻辑块地址LBA创建地址映射函数Map1,用于实现原地址空间条带号不超过s的数据块的地址映射;

(15)判断当前窗口号w_no是否等于RAID5的最后一个窗口,如果是则转入步骤(16),否则设置w_no=w_no+1,然后返回步骤(2);

(16)获取当前RAID5系统的逻辑块地址LBA,根据该逻辑块地址LBA创建地址映射函数Map2,用于扩容后新的地址空间的地址映射。

2.根据权利要求1所述的快速扩容方法,其特征在于,步骤(14)包括以下子步骤:(14.1)获取当前RAID5系统的逻辑块地址LBA,根据原始RAID5的地址映射函数获得逻辑块地址LBA对应的条带号S和磁盘号D,以及该条带中的校验块所在的盘号P,并且设置S1=S;

(14.2)采用以下公式计算条带S在该条带组中的偏移s_off1,分别计算D盘扩容读单元的起始条带号Rdb、结束条带号Rde、扩容写单元的结束条带号Wde和P盘扩容读单元的起始条带号Rpb、结束条带号Rpe、扩容写单元的结束条带号Wpe:(14.3)判断该条带在条带组中的偏移s_off1是否处于D盘扩容读单元的起始条带号和结束条带号之间,如果是则转入步骤(14.4),否则设置D1=D,然后转入步骤(14.7);

(14.4)判断是否有n≥m,如果有则转入步骤(14.5),否则转入步骤(14.6);

(14.5)计算扩容后逻辑块地址LBA对应的磁盘号D1,其中,若 则D1=D%m+n,否则 然后转入步骤(14.7);

(14.6)计算扩容后逻辑块地址LBA对应的磁盘号D1,其中,若s_off1≤Wde,则D1=D+n,否则(14.7)判断该条带在条带组中的偏移s_off1是否处于P盘扩容读单元的起始条带号和结束条带号之间,如果是则转入步骤(14.8),否则设置P1=P,然后转入步骤(14.11);

(14.8)判断是否有n≥m,如果有则转入步骤(14.9),否则转入步骤(14.10);

(14.9)计算扩容后逻辑块地址LBA对应的校验盘号P1,其中,若 则P1=P%m+n,否则 然后转入步骤(14.11);

(14.10)计算扩容后逻辑块地址LBA对应的校验盘号P1,其中,若s_off1≤Wpe1,则P1=P+n,否则(14.11)Map1地址映射完成,返回(S1,D1,P1)。

3.根据权利要求2所述的快速扩容方法,其特征在于,步骤(16)包括以下子步骤:(16.1)获取当前RAID5系统的逻辑块地址LBA,将逻辑块地址LBA转换为在新地址空间的相对偏移x=LBA-(n-1)*v,计算条带组号s_no=x/(RU*(n+m)),以及在该条带组内新增地址空间的相对偏移s_off2=x%(RU*(n+m));

(16.2)采用以下公式计算逻辑块地址LBA对应的磁盘号D2和条带号S2,其中按照横向编址的计算方式为:按照纵向编址的计算方式为:

(16.3)根据条带号S2,由Map1计算出该条带的校验块盘号P’,并设置P2=P’;

(16.4)Map2地址映射完成,返回(S2,D2,P2)。

4.根据权利要求3所述的快速扩容方法,其特征在于,步骤(16.3)具体为,将S2*(n-1)作为第S2条带上的第一个数据块的LBA,即Map1函数的输入,并通过步骤(14)获取对应的输出值,即P’=Map1(S2*(n-1))。

说明书 :

一种独立磁盘冗余阵列RAID5的快速扩容方法

技术领域

[0001] 本发明属于数据存储领域,更具体地,涉及一种独立磁盘冗余阵列RAID5的快速扩容方法。

背景技术

[0002] 独立磁盘冗余阵列(Redundant array of independent disk,简称RAID)技术是由帕特森等人于1988年提出的一种存储系统架构。其基本思想是将多个磁盘组合起来,通过条带化技术提高并发访问性能;通过存放镜像数据或者奇偶校验等方式来提高存储系统的可靠性。按照组织方式的不同,RAID又被分为多种级别,比较常用的有RAID1、RAID5等级别。
[0003] 如图1所示,RAID5采用分条的方式将数据和奇偶校验信息均匀分布到阵列中的各个磁盘上,当一个盘发生故障时,可以通过读取剩余磁盘上的数据块和校验块信息,然后通过异或即可恢复出故障磁盘上的数据。因其高并发、高可靠以及较高的存储效率等特性,使得RAID5在服务器端得到了广泛的应用。随着数据信息的爆炸性增长以及大数据时代的到来,人们对存储容量、存储性能的要求越来越高,而对独立磁盘冗余阵列加入更多的磁盘一方面可以带来更高的访问并行度从而降低响应时间,另一方面可以提高存储效率以及存储容量。因此扩容成为一种必要的选择。由于大量应用的7*24不间断服务要求,使得扩容只能在响应正常访问的同时进行,而扩容势必会影响到前台访问性能。因此,如何尽可能快的完成扩容操作,又能尽量减小用户请求相应时间,成为一个研究热点。
[0004] 传统的RAID5扩容方式是根据扩容后的磁盘数,按照某种数据布局策略重新组织所有的数据块,并计算相应的校验块。这种方式的优点是扩容 后数据从逻辑地址到物理地址的转换简单高效,且所有数据重新均匀分布到各个盘上,提高了访问阵列的并行度。但其缺点在于几乎所有的数据块都要发生迁移,大量的数据迁移一方面增加了扩容需要的时间,另一方面对外部应用带来显著的影响。在美国专利申请公开说明书US6000010中公开了一种RAID5快速扩容的方法,该方法包含两种形式:第一种是初始化新加的磁盘,使其每一个条带内的数据校验和为0,将扩容后新增的地址空间映射全部映射到新加的磁盘上。这种方式完全避免了旧数据和校验的更新,但是造成扩容后校验数据的分布不再是均匀的。为此该专利提出了第二种形式,将某些行条带中的校验块变成数据块,在该条带中新加的盘上映射为校验块和数据块,同样使其校验和为0。这种方式虽然使得数据和校验满足均匀分布,但是因为原来的数据仍然只存放在原来的盘上,所以并不能因为扩容而带来性能的提升。在美国专利申请公开说明书US8239622中公开了一种可用于RAID5的阵列扩容方法,该方法通过重新组织数据布局方式使得扩容引起的数据迁移量达到最小,且满足了数据在扩容后均匀的分布在各个盘上,然而这种方法并不能提高阵列的存储效率。

发明内容

[0005] 针对现有技术的以上缺陷或改进需求,本发明提供了一种独立磁盘冗余阵列RAID5的扩容方法,其目的在于在保证RAID5的存储效率的前提下,满足扩容后数据块和校验块能够均匀的分布到所有盘上,并且能够高效的完成逻辑地址到物理地址的转换,使得扩容后阵列的性能和存储效率有所提升,同时该方法将显著的减少扩容带来的数据块和校验块的迁移,从而大大提高扩容的速度。
[0006] 为实现上述目的,按照本发明的一个方面,提供了一种独立磁盘冗余阵列RAID5的快速扩容方法,包括以下步骤:
[0007] (1)采用以下公式获取条带组大小SS、扩容读单元大小RU、扩容写单元大小WU以及辅助变量Y和St,并初始化当前扩容窗口W_no为0:
[0008]
[0009] 其中,gcd表示获得最大公约数;
[0010] (2)初始化当前扩容窗口内的偏移w_off为0,并将扩容所需的迁移记录集R设为空;
[0011] (3)将当前磁盘计数器d初始化为0,获取条带号s=w_no*Wsize+w_off以及在条带组中的偏移s_off=s%SS,其中Wsize为扩容窗口的大小;
[0012] (4)获取当前盘扩容读单元的起始条带号Rb=d*St、结束条带号Re=Rb+RU-1,以及扩容写单元的结束条带号We=Rb+WU-1;
[0013] (5)判断条带号s对应的条带是否在本条带组中扩容读单元的起始条带号和结束条带号之间,如果是则继续进入步骤(6),否则跳转到步骤(10);
[0014] (6)判断是否有n≥m,如果有则转入步骤(7),否则转入步骤(8);
[0015] (7)计算该条带上的条带单元将被迁移到的目标盘号k,其中,若  则k=(d%m+n),否则 然后进入步骤(9);
[0016] (8)计算该条带上的条带单元将被迁移到的目标盘号k,其中,若s_off≤We,则k=d+n,否则 然后进入步骤(9);
[0017] (9)将条带s上磁盘号为d的条带单元到磁盘号为k的条带单元的迁移路径记录在迁移记录集R中;
[0018] (10)判断是否有d=n-1,如果是则转入步骤(11),否则设置d=d+1,然后返回步骤(4);
[0019] (11)判断是否有w_off=Wsize-1,或者s=v-1,如果是则进入步骤(12),否则设置w_off=w_off+1,并返回步骤(3);
[0020] (12)对于当前扩容窗口W_no中的所有条带而言,根据R中记录的迁移路径,从扩容前RAID5中的磁盘读取对应的条带单元写入对应的新加的 磁盘上,对扩容前RAID5中被读取的条带单元以及新加磁盘上除被写入的条带单元之外的条带单元都写入“0”;
[0021] (13)判断是否有W_no=0,如果是则转入步骤(14),否则转入步骤(15);
[0022] (14)获取当前RAID5系统的逻辑块地址LBA,根据该逻辑块地址LBA创建地址映射函数Map1,用于实现原地址空间条带号不超过s的数据块的地址映射;
[0023] (15)判断当前窗口号w_no是否等于RAID5的最后一个窗口,如果是则转入步骤(16),否则设置w_no=w_no+1,然后返回步骤(2);
[0024] (16)获取当前RAID5系统的逻辑块地址LBA,根据该逻辑块地址LBA创建地址映射函数Map2,用于扩容后新的地址空间的地址映射。
[0025] 优选地,步骤(14)包括以下子步骤:
[0026] (14.1)获取当前RAID5系统的逻辑块地址LBA,根据原始RAID5的地址映射函数获得逻辑块地址LBA对应的条带号S和磁盘号D,以及该条带中的校验块所在的盘号P,并且设置S1=S;
[0027] (14.2)采用以下公式计算条带S在该条带组中的偏移s_off1,分别计算D盘扩容读单元的起始条带号Rdb、结束条带号Rde、扩容写单元的结束条带号Wde和P盘扩容读单元的起始条带号Rpb、结束条带号Rpe、扩容写单元的结束条带号Wpe:
[0028]
[0029] (14.3)判断该条带在条带组中的偏移s_off1是否处于D盘扩容读单元的起始条带号和结束条带号之间,如果是则转入步骤(14.4),否则设置D1=D,然后转入步骤(14.7);
[0030] (14.4)判断是否有n≥m,如果有则转入步骤(14.5),否则转入步 骤(14.6);
[0031] (14.5)计算扩容后逻辑地址块LBA对应的磁盘号D1,其中,若  则D1=D%m+n否则 然后转入步骤(14.7);
[0032] (14.6)计算扩容后逻辑地址块LBA对应的磁盘号D1,其中,若s_off1≤Wde,则D1=D+n,否则
[0033] (14.7)判断该条带在条带组中的偏移s_off1是否处于P盘扩容读单元的起始条带号和结束条带号之间,如果是则转入步骤(14.8),否则设置P1=P,然后转入步骤(14.11);
[0034] (14.8)判断是否有n≥m,如果有则转入步骤(14.9),否则转入步骤(14.10);
[0035] (14.9)计算扩容后逻辑地址块LBA对应的校验盘号P1,其中,若  则P1=P%m+n,否则 然后转入步骤(14.11);
[0036] (14.10)计算扩容后逻辑地址块LBA对应的校验盘号P1,其中,若s_off1≤Wpe1,则P1=P+n,否则
[0037] (14.11)Map1地址映射完成,返回(S1,D1,P1)。
[0038] 优选地,步骤(16)包括以下子步骤:
[0039] (16.1)获取当前RAID5系统的逻辑块地址LBA,将逻辑块地址LBA转换为在新地址空间的相对偏移x=LBA-(n-1)*v,计算条带组号
[0040] s_no=x/(RU*(n+m)),以及在该条带组内新增地址空间的相对偏移
[0041] s_off2=x%(RU*(n+m));
[0042] (16.2)采用以下公式计算逻辑地址块LBA对应的磁盘号D2和条带号S2,其中按照横向编址的计算方式为:
[0043]
[0044] 按照纵向编址的计算方式为:
[0045]
[0046] (16.3)根据条带号S2,由Map1计算出该条带的校验块盘号P’,并设置P2=P’;
[0047] (16.4)Map2地址映射完成,返回(S2,D2,P2)。
[0048] 优选地,步骤(16.3)具体为,将S2*(n-1)作为第S2条带上的第一个数据块的LBA,即Map1函数的输入,并通过步骤(14)获取对应的输出值,即P’=Map1(S2*(n-1))。
[0049] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0050] (1)本发明保证了RAID5的存储效率:由于本发明在扩容后,校验块的总量仍然等于一个磁盘的容量,而存储效率=数据块总量/RAID5中的总磁盘容量=1-校验块总量/RAID5中的总磁盘容量,因此保证扩容后的存储效率仍然达到标准RAID5的存储效率。
[0051] (2)本发明扩容速度快:由于本发明采用的迁移策略与传统的扩容方法相比,大大减少了数据迁移量,从而使得扩容速度得到显著提高。
[0052] (3)步骤(8)和步骤(10)创建的两个地址映射函数Map1和Map2能够高效的完成扩容后的地址转换,避免采用额外的空间来存储各个条带的地址映射,且扩容后数据块和校验块仍然均匀分布在所有盘上,从而使得扩容后的性能有所提高。
[0053] (4)本发明具有良好的可适应性:由于扩容窗口大小和步骤(1)中的St的值可由管理员灵活设置,因此管理员可以根据实际情况来选择合适的值;步骤(10)中的Map2也可由管理员根据实际负载情况来选择不同的编址策略,包括但不限于本发明中给出的横向编址和纵向编址方式。

附图说明

[0054] 图1是独立磁盘冗余阵列RAID5的结构示意图。
[0055] 图2是本发明独立磁盘冗余阵列RAID5的快速扩容方法的流程图。
[0056] 图3是本发明方法的应用实例。

具体实施方式

[0057] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0058] 首先给出本发明相关概念的定义:
[0059] 条带:在RAID5中,条带是可以独立地恢复出失效数据的信息集合。
[0060] 条带单元:一个条带信息与一个磁盘的交点。
[0061] 数据块:指RAID5中用来存放数据信息的条带单元。
[0062] 校验块:指RAID5中用来存放校验信息的条带单元。
[0063] 条带组:多个条带的集合。其中条带的个数由扩容前后的磁盘数决定。本发明中由SS表示一个条带组中的条带个数。
[0064] 扩容读单元:指扩容时在单个条带组内,从原来RAID5的磁盘中读取的连续数据块和校验块。本发明中由RU表示扩容读单元大小。
[0065] 扩容写单元:指扩容时在单个条带组内,向新加入的磁盘上写入的连续数据块和校验块。本发明中有WU表示扩容写单元大小。
[0066] 扩容窗口:指扩容时,一次处理的条带个数。本发明中由Wsize表示扩容窗口大小,该值可由RAID5扩容操作的实施者指定。
[0067] 地址映射函数(Map函数):指将一个逻辑块地址(Logical block address,简称LBA)转换到RAID5中相应的条带号S、磁盘号D、校验盘号P的方式。原始RAID5的地址映射函数记为(S,D,P)=Map(LBA)。
[0068] 地址空间:指RAID5中能被访问的线性逻辑地址范围。
[0069] 迁移记录集:指用来记录条带中条带单元迁移路径的集合。
[0070] 本发明的整体思路在于,本发明提供的一种针对RAID5的快速扩容方法用R5S(v,n,m)表示,v,n,m均为正整数。其中v是每个盘的条带个数,n是扩容前RAID5的磁盘个数,m是为扩容而新加入的磁盘个数,即从n盘构成的RAID5扩容到由n+m个盘构成的RAID5。该方法在保证RAID5的存储效率的前提下,满足扩容后数据块和校验块能够均匀的分布到所有盘上,并且能够高效的完成逻辑地址到物理地址的转换,使得扩容后阵列的性能和存储效率有所提升;同时该方法将显著的减少扩容带来的数据块和校验块的迁移,能够显著提高扩容的速度。
[0071] 如图2所示,本发明独立磁盘冗余阵列RAID5的快速扩容方法包括以下步骤:
[0072] (1)获取条带组大小SS、扩容读单元大小RU、扩容写单元大小WU以及辅助变量Y和St,并初始化当前扩容窗口W_no为0;具体而言,Y由扩容前的磁盘数n和新增的磁盘数m确定,St可以根据Y来选取不同的值,St的值越大,越有利于扩容的聚合读写从而提高扩容速度,但是需要更多的缓存空间。因此可由管理员灵活选择St的取值。以上几个参数的计算过程如下:
[0073]
[0074] 其中,gcd表示获得最大公约数。
[0075] 本步骤的优点在于St可由管理员根据实际应用场景灵活选择,因此使得本方法具有良好的可适应性。
[0076] (2)初始化当前扩容窗口内的偏移w_off为0,并将扩容所需的迁移记录集R设为空;
[0077] (3)将当前磁盘计数器d初始化为0,获取条带号s=w_no*Wsize+w_off 以及在条带组中的偏移s_off=s%SS;其中Wsize为扩容窗口的大小,其数值可为任意正整数;
[0078] (4)获取当前盘扩容读单元的起始条带号Rb=d*St、结束条带号Re=Rb+RU-1,以及扩容写单元的结束条带号We=Rb+WU-1;
[0079] (5)判断条带号s对应的条带是否在本条带组中扩容读单元的起始条带号和结束条带号之间,如果是则继续进入步骤(6),否则跳转到步骤(10);具体而言,是通过判断该条带在条带组中的偏移s_off是否处于本条带组中扩容读单元的起始条带号和结束条带号之间来判断;
[0080] (6)判断是否有n≥m,如果有则转入步骤(7),否则转入步骤(8);
[0081] (7)计算该条带上的条带单元将被迁移到的目标盘号k,其中,若  则k=(d%m+n),否则 然后进入步骤(9);
[0082] (8)计算该条带上的条带单元将被迁移到的目标盘号k,其中,若s_off≤We,则k=d+n,否则 然后进入步骤(9);
[0083] (9)将条带s上磁盘号为d的条带单元到磁盘号为k的条带单元的迁移路径记录在迁移记录集R中;
[0084] (10)判断是否有d=n-1,即当前磁盘号是否等于扩容前RAID5中的最后一个盘,如果是则转入步骤(11),否则设置d=d+1,然后返回步骤(4);
[0085] (11)判断是否有w_off=Wsize-1,或者s=v-1,如果是则进入步骤(12),否则设置w_off=w_off+1,并返回步骤(3);
[0086] (12)对于当前扩容窗口W_no中的所有条带而言,根据R中记录的迁移路径,从扩容前RAID5中的磁盘读取对应的条带单元写入对应的新加的磁盘上,对扩容前RAID5中被读取的条带单元以及新加磁盘上除被写入的条带单元之外的条带单元都写入“0”;需要注意的是,上述操作实施中可利用高效的顺序IO对每个磁盘一次读写多个连续的条带单元,且充分利用 到多盘的并行IO,即并行的完成多盘读取操作,并行完成多盘写入操作;
[0087] 本步骤的优点在于扩容后,数据块和校验块会均匀分布到所有磁盘上,使得扩容后性能有所提升;采用一次读写多个连续条带单元的方式又能进一步提高迁移效率。
[0088] (13)判断是否有W_no=0,如果是则转入步骤(14),否则转入步骤(15);
[0089] (14)获取当前RAID5系统的逻辑块地址LBA,根据该逻辑块地址LBA创建地址映射函数Map1,用于实现原地址空间条带号不超过s的数据块的地址映射;具体而言,新的地址映射函数Map1将返回LBA对应的条带号S1、磁盘号D1以及校验盘号P1,本步骤包含以下子步骤:
[0090] (14.1)获取当前RAID5系统的逻辑块地址LBA,根据原始RAID5的地址映射函数(即Map函数)获得逻辑块地址LBA对应的条带号S和磁盘号D,以及该条带中的校验块所在的盘号P,并且设置S1=S;
[0091] (14.2)采用以下公式计算条带S在该条带组中的偏移s_off1,分别计算D盘扩容读单元的起始条带号Rdb、结束条带号Rde、扩容写单元的结束条带号Wde和P盘扩容读单元的起始条带号Rpb、结束条带号Rpe、扩容写单元的结束条带号Wpe:
[0092]
[0093] (14.3)判断该条带在条带组中的偏移s_off1是否处于D盘扩容读单元的起始条带号和结束条带号之间,如果是则转入步骤(14.4),否则设置D1=D,然后转入步骤(14.7);
[0094] (14.4)判断是否有n≥m,如果有则转入步骤(14.5),否则转入步骤(14.6);
[0095] (14.5)计算扩容后逻辑地址块LBA对应的磁盘号D1,其中,若  则D1=D%m+n)否则 然后转入步骤(14.7);
[0096] (14.6)计算扩容后逻辑地址块LBA对应的磁盘号D1,其中,若s_off1≤Wde,则D1=D+n,否则
[0097] (14.7)判断该条带在条带组中的偏移s_off1是否处于P盘扩容读单元的起始条带号和结束条带号之间,如果是则转入步骤(14.8),否则设置P1=P,然后转入步骤(14.11);
[0098] (14.8)判断是否有n≥m,如果有则转入步骤(14.9),否则转入步骤(14.10);
[0099] (14.9)计算扩容后逻辑地址块LBA对应的校验盘号P1,其中,若  则P1=P%m+n,否则 然后转入步骤(14.11);
[0100] (14.10)计算扩容后逻辑地址块LBA对应的校验盘号P1,其中,若s_off1≤Wpe1,则P1=P+n,否则
[0101] (14.11)Map1地址映射完成,返回(S1,D1,P1)。
[0102] 本步骤的优点在于创建的Map1地址映射函数能够高效的完成地址转换工作,避免采用额外存储空间存放条带布局信息带来的存储开销。
[0103] (15)判断当前窗口号w_no是否等于RAID5的最后一个窗口,如果是则转入步骤(16),否则设置w_no=w_no+1,然后返回步骤(2);
[0104] (16)获取当前RAID5系统的逻辑块地址LBA,根据该逻辑块地址LBA创建地址映射函数Map2,用于扩容后新的地址空间的地址映射;至此,完成扩容过程。其中,地址映射函数Map2将返回LBA对应的条带号S2、磁盘号D2以及校验盘号P2,本步骤包含以下子步骤:
[0105] (16.1)获取当前RAID5系统的逻辑块地址LBA,将逻辑块地址LBA转换为在新地址空间的相对偏移x=LBA-(n-1)*v,计算条带组号
[0106] s_no=x/(RU*(n+m)),以及在该条带组内新增地址空间的相对偏移
[0107] s_off2=x%(RU*(n+m));
[0108] (16.2)采用以下公式计算逻辑地址块LBA对应的磁盘号D2和条带号S2;具体而言,按照横向编址的计算方式为:
[0109]
[0110] 按照纵向编址的计算方式为:
[0111]
[0112] (16.3)根据条带号S2,由Map1计算出该条带的校验块盘号P’,并设置P2=P’;具体而言,将S2*(n-1)作为第S2条带上的第一个数据块的LBA,即Map1函数的输入,并通过上述步骤(14)获取对应的输出值,即P’=Map1(S2*(n-1))。
[0113] (16.4)Map2地址映射完成,返回(S2,D2,P2)。
[0114] 本步骤的优点在于Map2能够完成新增地址空间的高效的地址映射,而且新增的空间完全用来存放数据块,保证了RAID5的存储效率。
[0115] 为了使本发明方法更容易理解,下面结合图3所示的实例R5S(12,4,2)来说明。图3表示由4个盘组成的RAID5加入2个盘进行扩容,其中每个盘有12个条带,我们以扩容窗口等于12为例。根据步骤(1)计算出Y=2,St∈{1,2,4,…},我们以St=2为例,则有RU=4,WU=8,SS=12;步骤(2)将w_off设为0,并将迁移记录集R置为空;步骤(3)将磁盘计数器设为0,表示从第一个盘开始处理,然后计算当前条带号s=0,在条带组中的偏移s_off=0;步骤(4)计算扩容读单元的起始条带号Rb=0,结束条带号Re=3,扩容写单元的结束条带号We=7;步骤(5)判断该条带是否处于扩容读单元起始和结束条带号之间,因为此时满足s_off∈[Rb,Re],所以转到步骤(6);步骤(6)判断满足n≥m,转入步骤(7);步骤(7)计算该条带上的条带 单元将被迁移到的目标盘号k=4,然后转入步骤(9);步骤(9)将把该条带(当前为条带0)的迁移记录(0号盘迁移到4号盘)加入记录集R;步骤(10)检查到当前磁盘计数器d不等于n-1,将d的值增1后转入步骤(4);步骤(4)计算扩容读单元起始条带号Rb=2,结束条带号Re=5,,扩容写单元的结束条带号We=9;步骤(5)检查到该条带s(此时s仍为0)不在Rb和Re之间,因此转入步骤(10);步骤(10)检查到当前磁盘计数器d不等于3,将d的值增1后转入步骤(4);重复步骤(4)到(10),直到满足d=3转入步骤(11);步骤(11)判断是否满足w_off=Wsize-1或者s=v-1,此时都不满足,将w_off的值增1转入步骤(3);重复步骤(3)到(11)直到满足w_off=Wsize-1或者s=v-1,对于本例,此时有w_off=11,s=11,转入步骤(12);步骤(12)根据R中记录的迁移路径,从前4个磁盘读取对应的条带单元写入后两个磁盘上,对扩容前RAID5中被读取的条带单元以及新加磁盘上除被写入的条带单元之外的条带单元都写入“0”;如图3A所示,迁移过程为将前4个磁盘上带有颜色的条带单元迁移到后两个盘的相应位置,然后将阴影部分写入“0”;步骤(13)判断满足w_no=0,然后转入步骤(14);步骤(14)创建地址映射函数Map1,实现原地址空间中条带号不超过s的逻辑块地址映射;如图3,我们以逻辑块地址LBA=17为例,步骤(14.1)首先利用原地址映射函数Map获得逻辑块地址LBA对应的条带号S、磁盘号D和该条带中的校验块所在的盘号P,结果为(S,D,P)=(5,1,2),然后设置S1=5;步骤(14.2)计算出条带S在条组中的偏移s_off1=5,磁盘D的扩容读单元的起始条带号Rdb=2,结束条带号Rde=5,扩容写单元的结束条带号Wde=9;磁盘P的扩容读单元的起始条带号Rpb=4,结束条带号Rpe=7,扩容写单元的结束条带号Wpe=11;步骤(14.3)判断s_off1处于Rdb和Rde之间,转入步骤(14.4);步骤(14.4)判断n≥m,转入步骤(14.5);步骤(14.5)计算出D1=5,然后转入步骤(14.7);步骤(14.7)判断s_off1处于Rpb和Rpe之间,转入步骤(14.8);步骤 (14.8)判断n≥m,转入步骤(14.9);步骤(14.9)计算出P1=4,然后转入步骤(14.11);步骤(14.11)完成Map1的地址映射,返回(S1,D1,P1)=(5,5,4);步骤(15)判断当前窗口号w_no等于最后一个窗口,转入步骤(16);步骤(16)创建地址映射函数Map2,用于扩容后新的地址空间的地址映射;我们以逻辑块地址LBA=50为例,步骤(16.1)计算出LBA在新地址空间的相对偏移x=14,条带组号s_no=0,该条带组内新增地址空间的相对偏移s_off2=14;步骤(16.2)按照编址方式给出两种映射方式,如果按照横向编址的方式(如图3B),则计算得到D2=2,S2=
6;如果按照纵向编址的方式(如图3C),则计算得到D2=3,S2=8;步骤(16.3)根据S2由Map1计算出校验盘号P’,我们以图3B为例,则有Map1(6*3)=(6,4,1),因此P2=P’=1;以图3B为例,步骤(16.4)返回(S2,D2,P2)=(6,2,1),完成Map2地址映射。
[0116] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。