一种磁盘阵列重构方法 【技术领域】
本发明涉及存储介质领域,尤其涉及一种磁盘阵列重构方法。
技术背景
随着科技的飞速发展与计算机技术的普遍应用,人们对存储设备的性能要求越来越高,RAID技术已作为一项成熟的技术广泛的应用于磁盘阵列中。RAID是通过磁盘阵列与数据条块化方法相结合,以提高数据可用率的一种结构。从功能上区别,RAID可分为RAID级别1到RAID级别6,通常称为:RAID 0,RAID 1,RAID 2,RAID 3,RAID 4,RAID 5。其中,每一个RAID级别都有自己的强项和弱项。"奇偶校验"定义为用户数据的冗余信息,当硬盘失效时,可以重新产生数据。在RAID中当某磁盘出现一个坏扇区或该磁盘接口损坏即将该磁盘定义为失败磁盘。本发明主要涉及到其中的RAID 5,因此主要介绍RAID 5。
RAID 5没有单独指定的奇偶盘,而是交叉地存取数据及奇偶校验信息于所有磁盘上。在RAID5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块,随机读写的数据。RAID 3每进行一次数据传输,需涉及到所有的阵列盘。而对于RAID 5来说,大部分数据传输只对一块磁盘操作,可进行并行操作。在RAID 5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。RAID5的每一个分条均包含一个校验单元,用来在出现失败时恢复数据。在读写过程中出现失败时,将包含失败分条单元的磁盘标志为不可用,并根据用户设置启动重构进程,对失败磁盘进行在线磁盘重构,重构地原理图1所示,从该图中可以看出,该方法使用校验恢复在置换磁盘上重建数据。
该重构采用基于磁盘的重构方法,该方法是目前主流的重构方法,原理如下:
构造N个进程,N-1个进程对应N-1个仍然正常工作的磁盘,一个进程对应于热备份盘。
与正常工作的磁盘相连的进程进行如下的处理:
Repeat
找到该磁盘上地址最低的分条单元;
若缓冲区有足够的空间接收数据,则对该分条单元发出一个低优先级的读请求,读至缓冲区内(跳过已重构完毕的分条);
等待读操作完成;
如果缓冲区管理器中有缓冲区能接受该数据,将该数据送至缓冲区管理器中的缓冲区中进行异或,否则等待;
Until所有的分条单元都被读完;
与热备份盘相连的进程进行如下处理:
Repeat
若缓冲区管理器中有已进行完所有条文单元异或的缓冲区,取出,否则等待;
对热备份盘发出一个低优先级的写请求,将取来的缓冲区中的数据写至热备份盘上;
等待写完成;
Until失败磁盘所有数据都得到重构;
上述方法对该磁盘上的数据恢复完全采用异或的方法实现,即是指通过异或同一RAID中未失败磁盘上相应数据来恢复失败磁盘上数据的重构,使用这种方法,即使磁盘仅有一个扇区出现一个错误,也把它视为最坏的情况,即:全盘不可用。而在实际上,多数情况下,该磁盘上其他部分的数据仍然可以响应正常读,且数据是真实可靠的。由于异或重构需要对RAID中除失败磁盘外的所有磁盘进行全盘读,此外还需进行大量的异或操作,存储系统的性能会因此受到很大的影响,而且重构的时间也会变得很漫长。
【发明内容】
本发明的目的就是利用磁盘拷贝重构和异或重构相结合的方法,尽可能减少重构所需的时间,减少重构过程给系统带来的性能降低。
本发明采用如下方案:
一种磁盘阵列重构方法,其特征在于包括以下步骤:
a、设定一个失败比例门限值N,对失败磁盘进行抽测,如果该失败比例大于所设定的门限值N,则进行全盘异或重构,如果小于或等于所设定的门限值N,则进入步骤b;
b、进行拷贝重构;
c、判断重构是否完成,如果是,结束重构,如果否,则进入步骤d;
d、从失败磁盘未重构的地址最低的分条单元开始向热备份盘拷贝数据;
e、判断读数据是否成功,如果是,返回步骤c,如果否,进入步骤f;
f、进行异或重构并启动计数器,对连续读失败的分条单元进行累加计数;
g、判断累加结果是否大于设定的门限值X,如果大于所述的门限值X,则进入步骤h,如果小于或等于所述的门限值X,则返回步骤c;
h、对后续的Y个分条单元进行异或重构,返回步骤c,所述数值Y是与门限值X及门限值M相关的一个数值。
所述的步骤a中,所述的抽测可以取磁盘分条单元总数的10%-40%。
所述的步骤a中门限值N为30%。
所述的步骤g中,所述的门限值X为1。
在整个重构过程中,对于已重构完的分条,主机按照正常访问模式对其进行访问。
在整个重构过程中,对于主机向失败磁盘尚未重构分条的写操作,采用重定向访问模式。
在整个重构过程中,对于主机向失败磁盘尚未重构分条的读操作,采用降级访问模式。
由于采用了本发明拷贝重构和异或重构相结合的重构方法,加快了重构的进度,减少了对RAID其他成员磁盘的访问,从而改善了重构过程中系统的整体性能。
【附图说明】
图1是现有技术中磁盘重构的原理示意图;
图2是本发明的磁盘阵列重构流程图。
【具体实施方式】
下面结合说明书附图来说明本发明的具体实施方式。
在磁盘重构领域中,拷贝重构是仅对失败磁盘上的失败部分进行异或重构,而对其余部分进行直接拷贝的重构方法。异或重构是指通过异或同一RAID中未失败磁盘上相应数据来恢复失败磁盘上数据的重构方法;两者的区别在于磁盘拷贝部分与整个磁盘的关系。
在磁盘重构领域中,任何一次RAID分解产生的针对某单个磁盘的读操作如果返回失败,则主机的读请求需重新按降级模式再次执行;如果针对某单个磁盘的写操作返回失败,主机认为此次写操作成功,同时把返回失败的磁盘标记为故障磁盘。不论是读操作还是写操作,只要有某个磁盘失败,则系统根据用户的设置启动重构(“根据用户设置”是指如果用户设置磁盘失败后自动启动重构则此时启动重构,如果用户设置磁盘失败后由用户启动重构则此时不启动重构)。
本发明一种磁盘阵列重构方法,包括以下步骤:
a、设定一个失败比例门限值N,对失败磁盘进行抽测,如果该失败比例大于所设定的门限值N,则进行全盘异或重构,如果小于或等于所设定的门限值N,则进入步骤b;
其中,对失败磁盘进行抽测一般采用的是被抽测分条单元号为n倍的分条单元总数×抽测比率(n取值为1、2、3...;且n的取值保证被抽测分条单元号不大于分条单元的最大编号)。
该步骤是为了初步判定磁盘的损坏程度,以决定是进行全盘异或重构还是拷贝结合异或重构,该随机抽值测越大,越能反应磁盘的真实情况,但抽测过程会占用较多的时间,在实际应用中,可以取磁盘分条单元总数的10%-40%,本发明中,该门限值N可以设定为30%。
b、进行拷贝重构;
这是本发明的一个创新思想所在,在磁盘恢复中,仅对失败磁盘上的失败部分进行异或重构,而对其余部分进行直接拷贝,这样,可以节省资源,减少工作量。
c、判断重构是否完成,如果是,结束重构,如果否,则进入下面的步骤d;
d、从失败磁盘未重构的地址最低的分条单元开始向热备份盘拷贝数据;
从失败磁盘未重构的地址最低的分条单元开始向热备份盘拷贝数据,这样能保证对失败磁盘的完全恢复,不会有遗漏。
e、判断读数据是否成功,如果是,返回步骤c,如果否,进入步骤f;
步骤e实际上是统计在拷贝重构中遇见的坏扇区,如果连续遇见的坏扇区数超过指定的数值(X),则在拷贝重构中启动异或重构。
在本步骤中,该判断的方法可以有多种,比如若磁盘表面损坏或读请求超过规定的时间未得到响应,即认为此次读数据失败,此外,利用磁盘的CRC校验也可判定读出的数据是否存在错误。该步骤是由主机一般的读请求来完成的。
f、进行异或重构并启动计数器,对连续读失败的分条单元进行累加计数;
本步骤中,是对连续失败的分条单元进行累加计数,否则此处的计数器置“1”。
g、判断累加结果是否大于所设定的门限值X,如果该结果大于所述的门限值X,则进入步骤h,如果该结果小于或等于所述的门限值X,则返回步骤c;
上述的门限值X不易取得太大,否则在磁盘损坏较为严重的部分,重构过程可能变得十分缓慢;一般情况下X不大于2,一般取值为1,本实施例中,可以给X选值为1。
h、对后续的Y个分条单元进行异或重构,返回步骤b,所述数值Y是与门限值X及门限值N相关的一个数值。
由于磁盘的损坏具有局部性,因此在拷贝过程中若出现分条单元连续读失败的情况,则认为后续Y个分条单元损坏程度较严重,对这Y个分条单元采用异或重构。
上述数值Y是与门限值X及门限值M相关的一个数值,其取值原则为:若抽测结果<5%,则Y=10*X,若5%<=抽测结果<10%,则Y=50*X,若10%<=抽测结果<20%,则Y=200*X;若20%<=抽测结果<=30%,则Y=500*X。
从重构开始到重构结束的整个过程中,主机访问RAID的状态可以分为四种:正常访问、重定向访问、降级访问和不允许访问。对于已重构完的分条,主机按照正常访问模式对其进行访问;对于主机向失败磁盘尚未重构分条的写操作,采用重定向访问模式;对于主机向失败磁盘尚未重构分条的读操作,采用降级访问模式;对于正在重构的分条,主机不能对其进行访问。
关于重定向访问的说明:当主机发来的写请求通过地址映射要更新失败磁盘上的数据时,实际上是将这些数据直接写到热备份盘上,并将相应的分条单元提前重构,同时标记这些分条单元为已重构单元。
本发明通过以上这种方案,利用拷贝和异或相结合的重构方法,加快了重构的进度,减少了对RAID其他成员磁盘的访问,从而改善了重构过程中系统的整体性能。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。