首页> 中国专利> 独立磁盘冗余阵列修复方法、装置和存储设备

独立磁盘冗余阵列修复方法、装置和存储设备

摘要

本发明实施例提供了一种独立磁盘冗余阵列修复方法、装置和存储设备,涉及数据存储领域。所述方法包括:当RAID组同一条带中存在故障的条带单元数量不满足使用RAID冗余算法进行修复的要求时,对至少一个存在故障的条带单元进行无效修复,直至未修复的存在故障的条带单元数量满足RAID冗余算法修复的要求;利用RAID冗余算法,修复余下的存在故障的条带单元。本发明通过对同一条带中的故障条带单元进行修复,解决了现有技术中无法对该条带中后续出现故障的条带单元进行修复,造成故障区域扩大、数据丢失量增加的问题,达到了可以保证后续其他磁盘出现故障时能够被及时恢复,有效防止故障域扩大的效果。

著录项

  • 公开/公告号CN103678048A

    专利类型发明专利

  • 公开/公告日2014-03-26

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN201310632579.9

  • 发明设计人 何孝金;李大权;

    申请日2013-11-29

  • 分类号G06F11/16(20060101);

  • 代理机构11138 北京三高永信知识产权代理有限责任公司;

  • 代理人黄厚刚

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-12-17 00:55:30

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-25

    授权

    授权

  • 2014-04-23

    实质审查的生效 IPC(主分类):G06F11/16 申请日:20131129

    实质审查的生效

  • 2014-03-26

    公开

    公开

说明书

技术领域

本发明涉及数据存储领域,特别涉及一种独立磁盘冗余阵列修复方法、装 置和存储设备。

背景技术

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)组由多 个硬盘组成,当向RAID组存入文件时,可以利用条带化(striping)技术将文 件分成等同的多个数据块(Block),将这些数据块依次存入多个硬盘中,其中一 个数据块所占硬盘的区域记为一个条带单元(segment),在RAID组中在不同硬 盘上距离起始位置相同的条带单元组成一个条带(strip)。

通常来讲,如果RAID组中同一个条带中的一个条带单元中出现故障,则 可以读出其他条带单元中的数据,利用RAID冗余计算出该出现故障的条带单 元中的数据,利用计算出的数据对该条带单元进行写修复。但如果一个条带中 出现多个故障的条带单元,由于无法用RAID冗余计算出正确的数据,因此无 法对这些故障的条带单元进行写修复。比如,对于RAID5或RAID3来讲,当一 个条带中存在两个或两个以上出现故障的条带单元时,则无法通过RAID冗余 算法对这些出现故障的条带单元进行写修复;对于RAID6来讲,当一个条带中 存在三个或三个以上出现故障的条带单元时,则无法通过RAID冗余算法对这 些出现故障的条带单元进行写修复。

在实现本发明的过程中,发明人发现现有技术至少存在以下问题:当一个 条带中出现预定个数存在故障的条带单元之后,在后续使用过程中,如果该条 带中其他条带单元再出现故障,则无法对这些条带单元进行修复,造成故障区 域扩大、数据丢失量增加。

发明内容

为了解决现有技术中当RAID组中一个条带中出现多个存在故障的条带单 元时,无法对该条带中后续出现故障的条带单元进行修复,造成故障区域扩大、 数据丢失量增加的问题,本发明实施例提供了一种独立磁盘冗余阵列修复方法、 装置和存储设备。所述技术方案如下:

第一方面,提供了一种独立磁盘冗余阵列修复方法,所述方法包括:

当独立磁盘冗余阵列RAID组中同一条带中的多个条带单元存在故障时, 判断所述条带中存在故障的所述条带单元数量是否满足使用所述RAID冗余算 法进行修复的要求;

如果不满足,则对至少一个存在故障的所述条带单元进行无效修复,直至 未修复的存在故障的所述条带单元数量满足RAID冗余算法修复的要求;

使用所述条带中为正常条带单元的数据,以及经过无效修复后各所述条带 单元中的无效数据,利用所述RAID冗余算法,修复余下的存在故障的条带单 元。

在第一方面的第一种可能的实施方式中,所述对至少一个存在故障的所述 条带单元进行无效修复,包括:

当存在故障的所述条带单元能进行写修复时,则在存在故障的所述条带单 元中写入无效数据;

所述利用所述RAID冗余算法,修复余下的存在故障的条带单元,包括:

当存在故障的所述条带单元能进行写修复时,则将利用所述RAID冗余算 法计算出来的数据写入存在故障的所述条带单元中。

结合第一方面或者第一方面的第一种可能的实施方式,在第二种可能的实 施方式中,所述对至少一个存在故障的所述条带单元进行无效修复,包括:

在备份的数据区写入无效数据,并将存在故障的所述条带单元与备份的所 述数据区进行映射;

所述利用所述RAID冗余算法,修复余下的存在故障的条带单元,包括:

将利用所述RAID冗余算法计算出来的数据写入备份的数据区,并将存在 故障的所述条带单元与备份的所述数据区进行映射。

结合第一方面、第一方面的第一种可能的实施方式或者第一方面的第二种 可能的实施方式,在第三种可能的实施方式中,当所述RAID组为RAID5或 RAID3时,所述判断所述条带中存在故障的所述条带单元数量是否满足使用所 述RAID冗余算法进行修复的要求,包括:

判断所述条带中存在故障的所述条带单元数量是否大于1;

若判断结果为所述条带中存在故障的所述条带单元数据大于1,则判定所述 条带中存在故障的所述条带单元数量不满足使用RAID冗余算法进行修复的要 求;

若判断结果为所述条带中存在故障的所述条带单元数据不大于1,则判定所 述条带中存在故障的所述条带单元数量满足使用所述RAID冗余算法进行修复 的要求。

结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可 能的实施方式或者第一方面的第三种可能的实施方式,在第四种可能的实施方 式中,当所述RAID组为RAID6时,所述判断所述条带中存在故障的所述条带 单元数量是否满足使用所述RAID冗余算法进行修复的要求,包括:

判断所述条带中存在故障的所述条带单元数量是否大于2;

若判断结果为所述条带中存在故障的所述条带单元数据大于2,则判定所述 条带中存在故障的所述条带单元数量不满足使用所述RAID冗余算法进行修复 的要求;

若判断结果为所述条带中存在故障的所述条带单元数据不大于2,则判定所 述条带中存在故障的所述条带单元数量满足使用所述RAID冗余算法进行修复 的要求。

结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可 能的实施方式、第一方面的第三种可能的实施方式或者第一方面的第四种可能 的实施方式,在第五种可能的实施方式中,所述方法还包括:

记录与存在故障的所述条带单元对应的故障标记。

结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可 能的实施方式、第一方面的第三种可能的实施方式、第一方面的第四种可能的 实施方式或者第一方面的第五种可能的实施方式,在第六种可能的实施方式中,

所述记录与存在故障的所述条带单元对应的故障标记,包括:

将与存在故障的所述条带单元对应的故障标记作为数据完整性区域DIF校 验数据,将所述DIF校验数据写入存在故障的所述条带单元中;

或,

将存在故障的所述条带单元所在位置以及与存在故障的所述条带单元对应 的故障标记写入内存中预设的映射表中,以便所述内存根据所述映射表中条带 单元所在位置以及故障标记确定出存在故障的条带单元。

第二方面,提供了一种独立磁盘冗余阵列修复装置,所述装置包括:

判断模块,用于当独立磁盘冗余阵列RAID组中同一条带中的多个条带单 元存在故障时,判断所述条带中存在故障的所述条带单元数量是否满足使用 RAID冗余算法进行修复的要求;

第一修复模块,用于在所述判断模块判断所述条带中存在故障的所述条带 单元数量不满足使用所述RAID冗余算法进行修复的要求时,则对至少一个存 在故障的所述条带单元进行无效修复,直至未修复的存在故障的所述条带单元 数量满足RAID冗余算法修复的要求;

第二修复模块,用于使用所述条带中为正常条带单元的数据,以及经过无 效修复后各所述条带单元中的无效数据,利用所述RAID冗余算法,修复余下 的存在故障的条带单元。

在第二方面的第一种可能的实施方式中,所述第一修复模块,包括:

第一写入单元,用于当存在故障的所述条带单元能进行写修复时,则在存 在故障的所述条带单元中写入无效数据;

所述第二修复模块,包括:

第二写入单元,用于当存在故障的所述条带单元能进行写修复时,则将利 用所述RAID冗余算法计算出来的数据写入存在故障的所述条带单元中。

结合第二方面或者第二方面的第一种可能的实施方式,在第二种可能的实 施方式中,所述第一修复模块,包括:

第三写入单元,用于在备份的数据区写入无效数据,并将存在故障的所述 条带单元与备份的所述数据区进行映射;

所述第二修复模块,包括:

第四写入单元,用于将利用所述RAID冗余算法计算出来的数据写入备份 的数据区,并将存在故障的所述条带单元与备份的所述数据区进行映射。

结合第二方面、第二方面的第一种可能的实施方式或者第二方面的第二种 可能的实施方式,在第三种可能的实施方式中,当所述RAID组为RAID5或 RAID3时,所述判断模块,包括:

第一判断单元,用于判断所述条带中存在故障的所述条带单元数量是否大 于1;

第一判定单元,用于在所述第一判断单元的判断结果为所述条带中存在故 障的所述条带单元数据大于1时,判定所述条带中存在故障的所述条带单元数 量不满足使用所述RAID冗余算法进行修复的要求;

第二判定单元,用于在所述第一判断单元的判断结果为所述条带中存在故 障的所述条带单元数据不大于1时,判定所述条带中存在故障的所述条带单元 数量满足使用所述RAID冗余算法进行修复的要求。

结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可 能的实施方式或者第二方面的第三种可能的实施方式,在第四种可能的实施方 式中,当所述RAID组为RAID6时,所述判断模块,包括:

第二判断单元,用于判断所述条带中存在故障的所述条带单元数量是否大 于2;

第三判定单元,用于在所述第二判断单元的判断结果为所述条带中存在故 障的所述条带单元数据大于2时,判定所述条带中存在故障的所述条带单元数 量不满足使用所述RAID冗余算法进行修复的要求;

第四判定单元,用于在所述第二判断单元的判断结果为所述条带中存在故 障的所述条带单元数据不大于2时,判定所述条带中存在故障的所述条带单元 数量满足使用所述RAID冗余算法进行修复的要求。

结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可 能的实施方式、第二方面的第三种可能的实施方式第二方面的第四种可能的实 施方式,在第五种可能的实施方式中,所述装置还包括:

记录模块,用于记录与存在故障的所述条带单元对应的故障标记。

结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可 能的实施方式、第二方面的第三种可能的实施方式、第二方面的第四种可能的 实施方式或者第二方面的第一种可能的实施方式,在第六种可能的实施方式中, 所述记录模块,包括:

第五写入单元,用于将与存在故障的所述条带单元对应的故障标记作为数 据完整性区域DIF校验数据,将所述DIF校验数据写入存在故障的所述条带单 元中;

或,

第六写入单元,用于将存在故障的所述条带单元所在位置以及与存在故障 的所述条带单元对应的故障标记写入内存中预设的映射表中,以便所述内存根 据所述映射表中条带单元所在位置以及故障标记确定出存在故障的条带单元。

第三方面,提供了一种存储设备,所述存储设备包括:控制器和RAID组, 所述RAID组为RAID3、RAID5或RAID6。

控制器,用于当独立磁盘冗余阵列RAID组中同一条带中的多个条带单元 存在故障时,判断所述条带中存在故障的所述条带单元数量是否满足使用所述 RAID冗余算法进行修复的要求;

所述控制器,还在所述判断模块判断所述条带中存在故障的所述条带单元 数量不满足使用所述RAID冗余算法进行修复的要求时,则对至少一个存在故 障的所述条带单元进行无效修复,直至未修复的存在故障的所述条带单元数量 满足RAID冗余算法修复的要求;

所述控制器,还用于使用所述条带中为正常条带单元的数据,以及经过无 效修复后各所述条带单元中的无效数据,利用所述RAID冗余算法,修复余下 的存在故障的条带单元。

在第三方面的第一种可能的实施方式中,所述控制器,还用于当存在故障 的所述条带单元能进行写修复时,则在存在故障的所述条带单元中写入无效数 据;

所述控制器,还用于当存在故障的所述条带单元能进行写修复时,则将利 用所述RAID冗余算法计算出来的数据写入存在故障的所述条带单元中。

结合第三方面或者第三方面的第一种可能的实施方式,在第二种可能的实 施方式中,所述控制器,还用于在备份的数据区写入无效数据,并将存在故障 的所述条带单元与备份的所述数据区进行映射;

所述控制器,还用于将利用所述RAID冗余算法计算出来的数据写入备份 的数据区,并将存在故障的所述条带单元与备份的所述数据区进行映射。

结合第三方面、第三方面的第一种可能的实施方式或者第三方面的第二种 可能的实施方式,在第三种可能的实施方式中,当所述RAID组为RAID5或 RAID3时,所述控制器,还用于判断存在故障的所述条带单元数量是否大于1;

所述控制器,还用于在所述第一判断单元的判断结果为所述条带中存在故 障的所述条带单元数据大于1时,判定所述条带中存在故障的所述条带单元数 量不满足使用所述RAID冗余算法进行修复的要求;

所述控制器,还用于在所述第一判断单元的判断结果为所述条带中存在故 障的所述条带单元数据不大于1时,判定所述条带中存在故障的所述条带单元 数量满足使用所述RAID冗余算法进行修复的要求。

结合第三方面、第三方面的第一种可能的实施方式、第三方面的第二种可 能的实施方式或者第三方面的第三种可能的实施方式,在第四种可能的实施方 式中,当所述RAID组为RAID6时,所述控制器,还用于判断存在故障的所述 条带单元数量是否大于2;

所述控制器,还用于在所述第二判断单元的判断结果为所述条带中存在故 障的所述条带单元数据大于2时,判定所述条带中存在故障的所述条带单元数 量不满足使用所述RAID冗余算法进行修复的要求;

所述控制器,还用于在所述第二判断单元的判断结果为所述条带中存在故 障的所述条带单元数据不大于2时,判定所述条带中存在故障的所述条带单元 数量满足使用所述RAID冗余算法进行修复的要求。

结合第三方面、第三方面的第一种可能的实施方式、第三方面的第二种可 能的实施方式、第三方面的第三种可能的实施方式或者第三方面的第四种可能 的实施方式,在第五种可能的实施方式中,所述控制器,还用于记录与存在故 障的所述条带单元对应的故障标记。

结合第三方面、第三方面的第一种可能的实施方式、第三方面的第二种可 能的实施方式、第三方面的第三种可能的实施方式、第三方面的第四种可能的 实施方式或者第三方面的第五种可能的实施方式,在第六种可能的实施方式中, 所述控制器,还用于将与存在故障的所述条带单元对应的故障标记作为数据完 整性区域DIF校验数据,将所述DIF校验数据写入存在故障的所述条带单元中;

或,

所述控制器,还用于将存在故障的所述条带单元所在位置以及与存在故障 的所述条带单元对应的故障标记写入内存中预设的映射表中,以便所述内存根 据所述映射表中条带单元所在位置以及故障标记确定出存在故障的条带单元。

第四方面,还提供一种存储设备,该存储设备包括RAID组和控制器,所 述RAID组为RAID3、RAID5或RAID6;

所述控制器包括如第二方面或第二方面的各种可能的实施方式中所提供的 独立磁盘冗余阵列修复装置。

本发明实施例提供的技术方案带来的有益效果是:

通过当RAID组中同一条带中的多个条带单元存在故障时,对存在故障且 无法通过RAID冗余算法进行修复的条带单元,进行无效修复,对存在故障且 可通过RAID冗余算法进行修复的条带单元,通过条带中为正常条带单元的数 据以及经过无效修复后各条带单元中的无效数据,利用RAID冗余算法进行修 复;解决了现有技术中当RAID组中一个条带中出现多个存在故障的条带单元 时,无法对该条带中后续出现故障的条带单元进行修复,造成故障区域扩大、 数据丢失量增加的问题;对于同一个条带中出现故障的条带单元来讲,由于对 该条带中不能修复的条带单元进行了无效修复,且根据无效修复时的无效数据 以及其他条带单元中的数据,利用RAID算法对剩余可修复的条带单元进行修 复,因此在后续的使用过程中,如果在后续使用过程中,该这条带中其他条带 单元也出现故障,则可以根据这些已经修复的条带单元中的无效数据对后续出 现故障的条带单元进行成功修复,达到了可以保证后续其他磁盘出现故障时能 够被及时恢复,有效防止故障域扩大的效果。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所 需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明 的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下, 还可以根据这些附图获得其他的附图。

图1是本发明一个实施例中提供的独立磁盘冗余阵列修复方法的方法流程 图;

图2A是本发明另一个实施例中提供的独立磁盘冗余阵列修复方法的方法 流程图;

图2B是本发明一个实施例中提供的RAID5中对不可根据RAID冗余算法 修复的条带单元进行无效修复的示意图;

图2C是本发明一个实施例中提供的RAID5中对可根据RAID冗余算法修 复的条带单元进行修复的示意图;

图2D是本发明一个实施例中提供的对后续出现故障的条带单元进行修复 的示意图;

图2E是本发明部分实施例中提供的数据区域的示意图;

图3A是本发明再一个实施例中提供的独立磁盘冗余阵列修复方法的方法 流程图;

图3B是本发明一个实施例中提供的同一条带中多个条带单元存在故障的 RAID6的示意图;

图4是本发明一个实施例中提供的独立磁盘冗余阵列修复装置的结构示意 图;

图5是本发明另一个实施例中提供的独立磁盘冗余阵列修复装置的结构示 意图;

图6是本发明一个实施例中提供的存储设备的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明 实施方式作进一步地详细描述。为了便于描述,文中“故障条带单元”如无特 别说明,均指的是出现故障的条带单元。

请参见图1所示,其示出了本发明一个实施例中提供的独立磁盘冗余阵列 修复方法的方法流程图,该独立磁盘冗余阵列修复方法可以应用于RAID3、 RAID5或RAID6中。该独立磁盘冗余阵列修复方法可以包括:

101,当独立磁盘冗余阵列RAID组中同一条带中的多个条带单元存在故障 时,判断该条带中存在故障的条带单元数量是否满足使用RAID冗余算法进行 修复的要求;

对于RAID组来讲,RAID组中通常包含多个并列的磁盘,每个磁盘在距离 起始地址相同的位置对应的数据块可以看做是一个条带,而每个数据块即为一 个条带单元。

通常来讲,对于不同类型的RAID组,允许一个条带中最多存在指定个数 的有故障的条带单元,当一个条带中有故障的条带单元等于或小于指定个数时, 则可以通过RAID冗余算法进行修复,而当条带中有故障的条带单元大于指定 个数时,则无法通过RAID冗余算法进行修复。

对于RAID3或RAID5来讲,该指定个数为1,也即当RAID组中在同一个 条带中仅存在一个出现故障的条带单元时,通常可以通过该条带中其他条带单 元中的数据对该出现故障的条带单元进行修复,也即通过RAID冗余算法对该 出现故障的条带单元进行修复。而如果RAID组中同一个条带中存在两个或多 个有故障的条带单元时,则无法直接通过RAID冗余算法对这些有故障的条带 单元进行修复。

对于RAID6来讲,该指定个数为2,也即当RAID组中在同一个条带仅存 在一个或两个出现故障的条带单元时,通常可以通过与该条带中其他条带单元 中的数据对该出现故障的条带单元进行修复,也即通过RAID冗余算法对该出 现故障的条带单元进行修复。而如果RAID组中同一个条带中存在三个或三个 以上的有故障的条带单元时,则无法直接通过RAID冗余算法对这些有故障到 的条带单元进行修复。

102,如果不满足,则对至少一个存在故障的条带单元进行无效修复,直至 未修复的存在故障的条带单元数量满足RAID冗余算法修复的要求;

无效修复即通过无效数据对存在故障的条带单元进行修复。

由于存在故障的条带单元无法通过RAID冗余算法进行修复,因此只能通 过无效数据对存在故障的条带单元进行修复。这里所讲的无效数据可以为预定 的无效数据,比如对同一个条带中所有存在故障的条带单元统一预定为一个相 同的无效数据,还比如对同一个条带中所有存在故障的条带单元预定相同或不 同的无效数据;无效数据还可以为在进行无效修复时随机生成的数据。需要说 明的是,无论哪种情况下的无效数据,对于RAID控制器或系统来讲是知道每 个修复后的条带单元中写入的无效数据的。

这里所讲的预定的无效数据可以根据实际情况进行设定,比如先确定该存 在故障的条带单元的数据区所占的字节,为这些字节全部设定为0,或者为这些 字节全部设定为1,也可以为这些字节中的一部分为设置为0,另一部分设置为 1等。举例来讲,当该条带单元的数据区所占的字节为8个字节时,该预定的无 效数据可以为00000000,或者可以为11111111,或者可以为00001111,或者可 以为01001100。但不论为该条带单元设置的无效数据是多少,当为该条带单元 设置好无效数据之后,该条带单元中的数据即为确定的了,虽然这个无效数据 可能与出现故障前的数据不同,但内存可以安全读取出这个条带单元中的无效 数据。

在某些情况下,同一个条带中出现故障的条带单元的数量比较多,在对其 中一个条带单元进行修复之后,剩余的出现故障的条带单元的数量还是大于指 定数据,在这种情况下,每修复一个出现故障的条带单元之后,即判断剩余的 为修复的出现故障的条带单元的数量是否满足使用RAID冗余算法进行修复的 要求,只要不满足,则继续修复下一个出现故障的条带单元,直到未修复的存 在故障的条带单元数量满足RAID冗余算法修复的要求。

103,使用条带中为正常条带单元的数据,以及经过无效修复后各条带单元 中的无效数据,利用RAID冗余算法,修复余下的存在故障的条带单元。

通过步骤102之后,如果判定剩余的存在故障的条带单元数量满足使用 RAID冗余算法进行修复的要求,则可以通过RAID冗余算法进行修复。

在一种可能的实现方式中,可以使用该条带中为正常条带单元的数据以及 经过无效修复后各条带单元中的无效数据,利用RAID冗余算法对余下的存在 故障的条带单元进行修复。

需要说明的是,由于RAID冗余算法是通过该条带中已经修复的故障条带 单元以及该条带中无故障的条带单元中的数据对剩余的故障条带单元进行修复 的,由于该条带中已经修复的故障条带单元被写入了无效数据,因此RAID冗 余算法根据这些无效数据计算出来的数据也应该是无效的数据。但通过RAID 冗余算法计算出来的无效数据也是可以被内存安全地读取出来的。

综上所述,本发明实施例中提供的独立磁盘冗余阵列修复方法,通过当 RAID组中同一条带中的多个条带单元存在故障时,对存在故障且无法通过 RAID冗余算法进行修复的条带单元,进行无效修复,对存在故障且可通过RAID 冗余算法进行修复的条带单元,通过条带中为正常条带单元的数据以及经过无 效修复后各条带单元中的无效数据,利用RAID冗余算法进行修复;解决了现 有技术中当RAID组中一个条带中出现多个存在故障的条带单元时,无法对该 条带中后续出现故障的条带单元进行修复,造成故障区域扩大、数据丢失量增 加的问题;对于同一个条带中出现故障的条带单元来讲,由于对该条带中不能 修复的条带单元进行了无效修复,且根据无效修复时的无效数据以及其他条带 单元中的数据,利用RAID算法对剩余可修复的条带单元进行修复,因此在后 续的使用过程中,如果在后续使用过程中,该这条带中其他条带单元也出现故 障,则可以根据这些已经修复的条带单元中的无效数据对后续出现故障的条带 单元进行成功修复,达到了可以保证后续其他磁盘出现故障时能够被及时恢复, 有效防止故障域扩大的效果。

由于RAID3或RAID5中,只要同一个条带中存在2个或2个以上的故障条 带单元,就无法对这些故障条带单元进行修复,因此在这种情况下,为了避免 故障域的扩大,可以提出以下一种独立磁盘冗余阵列修复方法,具体请参见图 2A所示。

请参见图2A所示,其示出了本发明另一个实施例中提供的独立磁盘冗余阵 列修复方法的方法流程图,该独立磁盘冗余阵列修复方法可以应用于RAID3或 RAID5中。该独立磁盘冗余阵列修复方法可以包括:

201,当独立磁盘冗余阵列RAID组中同一条带中的多个条带单元存在故障 时,判断该条带中存在故障的条带单元数量是否大于1;

对于RAID组来讲,RAID组中通常包含多个并列的磁盘,每个磁盘在距离 起始地址相同的位置对应的数据块可以看做是一个条带,而每个数据块即为一 个条带单元。

通常来讲,对于不同类型的RAID组,允许一个条带中最多存在指定个数 的有故障的条带单元,当一个条带中有故障的条带单元等于或小于指定个数时, 则可以通过RAID冗余算法进行修复,而当条带中有故障的条带单元大于指定 个数时,则无法通过RAID冗余算法进行修复。

当RAID组为RAID3或RAID5时,只要该RAID组中同一个条带中存在至 少2个故障条带单元,则无法通过RAID冗余算法对这些故障条带单元全部进 行修复。此时,则需要判断存在故障的条带单元数量是否大于1。

请参见图2B所示,其示出了本发明一个实施例中提供的RAID5中对不可 根据RAID冗余算法修复的条带单元进行无效修复的示意图,其中该RAID5由 四个磁盘(磁盘1、磁盘2、磁盘3和磁盘4)组成,磁盘1和磁盘2在同一个 条带1中的条带单元均存在故障,即故障条带单元1和故障条带单元2,磁盘3 与故障条带单元1和故障条带单元2对齐的条带单元中写有有效数据1,磁盘4 与故障条带单元1和故障条带单元2对齐的条带单元中写有有效数据2。在图 2B中,条带1中存在故障的条带单元数量为2个(故障条带单元1和故障条带 单元2),其值大于1。

202,若判断结果为该条带中存在故障的条带单元数据大于1,则判定该条 带中存在故障的条带单元数量不满足使用RAID冗余算法进行修复的要求;

对于RAID5来讲,当同一个条带中存在故障的条带单元的数量为2个或2 个以上时,则可以判定该条带中存在故障的条带单元数量不满足使用RAID冗 余算法进行修复的要求。

203,若判断结果为该条带中存在故障的条带单元数据不大于1,则判定该 条带中存在故障的条带单元数量满足使用RAID冗余算法进行修复的要求;

对于RAID5来讲,如果同一条带中仅存在一个故障条带单元,则判定该条 带中存在故障的条带单元数量满足使用RAID冗余算法进行修复的要求。

204,如果不满足,则对至少一个存在故障的条带单元进行无效修复,直至 未修复的存在故障的条带单元数量满足RAID冗余算法修复的要求;

无效修复即通过无效数据对存在故障的条带单元进行修复。

由于存在故障的条带单元无法通过RAID冗余算法进行修复,因此只能通 过无效数据对存在故障的条带单元进行修复。这里所讲的无效数据可以为预定 的无效数据,比如对同一个条带中所有存在故障的条带单元统一预定为一个相 同的无效数据,还比如对同一个条带中所有存在故障的条带单元预定相同或不 同的无效数据;无效数据还可以为在进行无效修复时随机生成的数据。需要说 明的是,无论哪种情况下的无效数据,对于RAID控制器或系统来讲是知道每 个修复后的条带单元中写入的无效数据的。换句话说,当同一条带中无法通过 RAID冗余算法修复的故障条带单元的数量大于1个时,则对这些故障条带单元 修复时写入的无效数据相同或不完全相同,比如,对于同一条带中无法通过 RAID冗余算法进行修复的故障条带单元来讲,可以为这些故障条带单元添加相 同的无效数据,也可以针对不同的故障条带单元添加不同的无效数据,但这些 无效数据均是预定的无效数据或随机生成的无效数据,即不是根据RAID冗余 算法得到的数据。

这里所讲的预定的无效数据可以根据实际情况进行设定,比如先确定该存 在故障的条带单元的数据区所占的字节,为这些字节全部设定为0,或者为这些 字节全部设定为1,也可以为这些字节中的一部分为设置为0,另一部分设置为 1等。举例来讲,当该条带单元的数据区所占的字节为8个字节时,该预定的无 效数据可以为00000000,或者可以为11111111,或者可以为00001111,或者可 以为01001100。但不论为该条带单元设置的无效数据是多少,当为该条带单元 设置好无效数据之后,该条带单元中的数据即为确定的了,虽然这个无效数据 可能与出现故障前的数据不同,但内存可以安全读取出这个条带单元中的无效 数据。

在某些情况下,同一个条带中出现故障的条带单元的数量比较多,在对其 中一个条带单元进行修复之后,剩余的出现故障的条带单元的数量还是大于指 定数据,在这种情况下,每修复一个出现故障的条带单元之后,即判断剩余的 为修复的出现故障的条带单元的数量是否满足使用RAID冗余算法进行修复的 要求,只要不满足,则继续修复下一个出现故障的条带单元,直到未修复的存 在故障的条带单元数量满足RAID冗余算法修复的要求。

值得注意的是,由于条带单元出现故障的原因比较多,比如逻辑故障和物 理故障(如条带单元中的扇区发生物理损坏),当条带单元出现逻辑故障时可以 对该条带进行写修复,而当条带单元出现物理故障时则通常无法对该条带直接 进行写修复。因此在对存在故障的条带单元进行无效修复时,通常存在如下两 种情况:

在第一种情况下,当存在故障的条带单元能进行写修复时,则在存在故障 的条带单元中写入无效数据,或,在备份的数据区写入无效数据,并将存在故 障的条带单元与备份的数据区进行映射;

在第二种情况下,当存在故障的条带单元无法进行写修复时,则在备份的 数据区写入无效数据,并将存在故障的条带单元与备份的数据区进行映射。

这样,每当需要读取存在故障的条带单元中的数据时,由于该故障条带单 元无法进行写修复,而是将无效数据写入了备份的数据区,因此可以根据该故 障条带单元和备份的数据区之间的映射关系读取该备份数据区中写入的数据。 这种情况可以看作是从该故障条带单元读取数据的特例。

也就是说,在对存在故障的条带单元进行无效修复时,可以先判断存在故 障的条带单元是否能进行写修复,如果存在故障的条带单元能进行写修复,则 可以在存在故障的条带单元中写入无效数据,或者可以在备份的数据区写入无 效数据,并将存在故障的条带单元与备份的数据区进行映射,这两种方法可以 择一选用;而如果存在故障的条带单元不能进行写修复,则可以在备份的数据 区写入无效数据,并将存在故障的条带单元与备份的数据区进行映射。

举例来讲,仍旧参见图2B所示,其中为故障条带单元1添加了第一无效数 据,该第一无效数据为000,对应的磁盘3中该条带的条带单元中的有效数据1 为011,磁盘4中该条带的条带单元中的有效数据2为100。

205,使用条带中为正常条带单元的数据,以及经过无效修复后各条带单元 中的无效数据,利用RAID冗余算法,修复余下的存在故障的一个条带单元;

通过步骤204之后,如果判定剩余的存在故障的条带单元数量满足使用 RAID冗余算法进行修复的要求,则可以通过RAID冗余算法进行修复。

在一种可能的实现方式中,可以使用该条带中为非故障条带单元的数据以 及经过无效修复后各条带单元中的无效数据,利用RAID冗余算法对余下的存 在故障的条带单元进行修复。

值得注意的是,由于条带单元出现故障的原因比较多,比如逻辑故障和物 理故障(如条带单元中的扇区发生物理损坏),当条带单元出现逻辑故障时可以 对该条带进行写修复,而当条带单元出现物理故障时则通常无法对该条带直接 进行写修复。因此在使用条带中为正常条带单元的数据,以及经过无效修复后 各条带单元中的无效数据,利用RAID冗余算法,修复余下的存在故障的条带 单元时,可以包括如下两种情况:

在第一种情况下,当存在故障的条带单元能进行写修复时,则将利用RAID 冗余算法计算出来的数据写入存在故障的条带单元中,或,将利用RAID冗余 算法计算出来的数据写入备份的数据区,并将存在故障的条带单元与备份的数 据区进行映射;

在第二种情况下,当存在故障的条带单元无法进行写修复时,则将利用 RAID冗余算法计算出来的数据写入备份的数据区,并将存在故障的条带单元与 备份的数据区进行映射。

这样,每当需要读取存在故障的条带单元中的数据时,由于该故障条带单 元无法进行写修复,而是将无效数据写入了备份的数据区,因此可以根据该故 障条带单元和备份的数据区之间的映射关系读取该备份数据区中写入的数据。 这种情况可以看作是从该故障条带单元读取数据的特例。

也就是说,在利用RAID冗余算法,修复余下的存在故障的条带单元时, 可以先判断存在故障的条带单元是否能进行写修复,如果存在故障的条带单元 能进行写修复,则可以将利用RAID冗余算法计算出来的数据写入存在故障的 条带单元中,或,可以将利用RAID冗余算法计算出来的数据写入备份的数据 区,并将存在故障的条带单元与备份的数据区进行映射,这两种方法可以择一 选用;而如果存在故障的条带单元不能进行写修复,则可以将利用RAID冗余 算法计算出来的数据写入备份的数据区,并将存在故障的条带单元与备份的数 据区进行映射。

需要说明的是,由于RAID冗余算法是通过该条带中已经修复的故障条带 单元以及该条带中无故障的条带单元中的数据对剩余的故障条带单元进行修复 的,由于该条带中已经修复的故障条带单元被写入了无效数据,因此RAID冗 余算法根据这些无效数据计算出来的数据也应该是无效的数据。但通过RAID 冗余算法计算出来的无效数据也是可以被内存安全地读取出来的。

请参见图2C所示,其示出了本发明一个实施例中提供的RAID5中对可根 据RAID冗余算法修复的条带单元进行修复的示意图。结合图2B,当通过无效 数据对磁盘1中的故障条带单元1进行修复之后,可以通过RAID冗余算法对 故障条带单元2进行修复,即可以通过磁盘1中故障条带单元1中的第一无效 数据、磁盘3中的有效数据1和磁盘4中的有效数据2生成第二无效数据,且 根据该第二无效数据对故障条带单元2进行修复。举例来讲,假如故障条带单 元1中添加的无效数据是000,磁盘3中与该故障条带单元1对齐的有效数据1 为011,磁盘4中与该故障条带单元1对齐的有效数据2为100,而RAID冗余 算法计算故障条带单元2中的数据是通过有效数据2减去有效数据1、然后再减 去故障条带单元1中的数据得到的,此时计算出来的故障条带单元2中的数据 应当为001,由于通过RAID冗余算法计算出来的001是通过故障条带单元1中 的数据000得到的,而故障条带单元1中的数据是无效数据,因此计算出来的 001也应当是无效数据,然后将该无效数据001添加至故障条带单元2中。此时, 故障条带单元1中的第一无效数据为000、故障条带单元2中的第二无效数据为 001、有效数据1为011、有效数据2为100,所有的区域都填充上了数据。这 里需要说明的是,RAID冗余算法仅是进行了简单的示意性举例,在实际应用中, RAID5中的RAID冗余算法还可以通过其他方式实现,且RAID冗余算法是本 领域的普通技术人员都可以实现的,这里就不再详述。

这样,在后续使用的过程中,请参见图2D所示,其示出了本发明一个实施 例中提供的对后续出现的故障条带单元进行修复的示意图,并请结合图2C,如 果磁盘3中与故障条带单元1和故障条带单元2对齐的区域(也即磁盘3中与 故障条带单元1位于同一个条带中的条带单元)也出现故障,此时RAID冗余 算法则可以根据故障条带单元1中填充的第一无效数据000、故障条带单元2中 填充的第二无效数据001以及磁盘4中数据2的值100将磁盘3中的故障条带 单元中的数据1进行还原,得到磁盘3中故障条带单元中的数据1应当为011。

206,记录与存在故障的条带单元对应的故障标记。

由于在对故障条带单元修复时填充的数据均是无效数据,因此这些无效数 据被读取出来是不准确的,为了避免内存读取故障条带单元中的无效数据,则 可以记录与故障条带单元对应的故障标记,这样内存在读取故障条带单元所在 位置的数据时,如果发现存在与该位置对应的故障标记,则不读取对应于该位 置中的数据。

在实际应用中,在记录与故障条带单元对应的故障标记时,可以包括如下 两种情况:

第一种情况,将与故障条带单元对应的故障标记作为数据完整性区域DIF 校验数据,将DIF校验数据写入故障条带单元中;

对于有些支持DIF校验区的RAID组来讲,每一个数据区域中通常包括两 部分,分别为数据区和DIF校验区,请参见图2E所示,其示出了本发明部分实 施例中提供的数据区域的示意图,可以将故障标记作为DIF校验数据,将DIF 校验数据也写入故障条带单元。这样,当内存读取该故障条带单元的数据区域 时,可以根据DIF校验区得知该数据区域是故障条带单元,不需要读取该数据 区中的数据。

第二种情况,将故障条带单元所在位置以及与故障条带单元对应的故障标 记写入内存中预设的映射表中,以便内存根据映射表中故障条带单元所在位置 以及故障标记确定出故障条带单元。

通常,对一些不支持DIF校验区的RAID组来讲,通常可以在内存中设置 一个用于存放故障条带单元所在位置以及与该故障条带单元对应的故障标记的 映射表,这样,当内存需要读取该故障条带单元中的数据时,可以根据映射表 得知该位置为存在故障的条带单元,此时则不需要读取该位置中的数据。

综上所述,本发明实施例中提供的独立磁盘冗余阵列修复方法,通过当 RAID组中同一条带中的多个条带单元存在故障时,对存在故障且无法通过 RAID冗余算法进行修复的条带单元,进行无效修复,对存在故障且可通过RAID 冗余算法进行修复的条带单元,通过条带中为正常条带单元的数据以及经过无 效修复后各条带单元中的无效数据,利用RAID冗余算法进行修复;解决了现 有技术中当RAID组中一个条带中出现多个存在故障的条带单元时,无法对该 条带中后续出现故障的条带单元进行修复,造成故障区域扩大、数据丢失量增 加的问题;对于同一个条带中出现故障的条带单元来讲,由于对该条带中不能 修复的条带单元进行了无效修复,且根据无效修复时的无效数据以及其他条带 单元中的数据,利用RAID算法对剩余可修复的条带单元进行修复,因此在后 续的使用过程中,如果在后续使用过程中,该这条带中其他条带单元也出现故 障,则可以根据这些已经修复的条带单元中的无效数据对后续出现故障的条带 单元进行成功修复,达到了可以保证后续其他磁盘出现故障时能够被及时恢复, 有效防止故障域扩大的效果。

由于RAID6中,只要同一个条带中存在3个或3个以上的故障条带单元, 就无法对这些故障条带单元进行修复,因此在这种情况下,为了避免故障域的 扩大,可以提出以下一种独立磁盘冗余阵列修复方法,具体请参见图3A所示。

请参见图3A所示,其示出了本发明再一个实施例中提供的独立磁盘冗余阵 列修复方法的方法流程图,该独立磁盘冗余阵列修复方法可以应用于RAID6中。 该独立磁盘冗余阵列修复方法可以包括:

301,当独立磁盘冗余阵列RAID组中同一条带中的多个条带单元存在故障 时,判断该条带中存在故障的条带单元数量是否大于2;

对于RAID组来讲,RAID组中通常包含多个并列的磁盘,每个磁盘在距离 起始地址相同的位置对应的数据块可以看做是一个条带,而每个数据块即为一 个条带单元。

通常来讲,对于不同类型的RAID组,允许一个条带中最多存在指定个数 的有故障的条带单元,当一个条带中有故障的条带单元等于或小于指定个数时, 则可以通过RAID冗余算法进行修复,而当条带中有故障的条带单元大于指定 个数时,则无法通过RAID冗余算法进行修复。

当RAID组为RAID6时,只要该RAID组中同一个条带中存在至少3个故 障条带单元,则无法通过RAID冗余算法对这些故障条带单元全部进行修复。 此时,则需要判断存在故障的条带单元数量是否大于2。

请参见图3B所示,其示出了本发明一个实施例中提供的同一条带中存在多 个故障条带单元的RAID6的示意图,其中该RAID6由五个磁盘组成,磁盘1、 磁盘2和磁盘3在同一个条带1上的条带单元均存在故障,即故障条带单元1、 故障条带单元2和故障条带单元3,对应的磁盘4中该条带1上的条带单元中包 含有效数据1,磁盘5中该条带1上的条带单元中中包含有效数据2。

302,若判断结果为该条带中存在故障的条带单元数据大于2,则判定该条 带中存在故障的条带单元数量不满足使用RAID冗余算法进行修复的要求;

对于RAID6来讲,当同一个条带中存在故障的条带单元的数量为3个或3 个以上时,则可以判定该条带中存在故障的条带单元数量不满足使用RAID冗 余算法进行修复的要求。

303,若判断结果为该条带中存在故障的条带单元数据不大于2,则判定该 条带中存在故障的条带单元数量满足使用RAID冗余算法进行修复的要求;

对于RAID6来讲,如果同一条带中仅存在1个或2个故障条带单元,则判 定该条带中存在故障的条带单元数量满足使用RAID冗余算法进行修复的要求。

304,如果不满足,则对至少一个存在故障的条带单元进行无效修复,直至 未修复的存在故障的条带单元数量满足RAID冗余算法修复的要求;

无效修复即通过无效数据对存在故障的条带单元进行修复。

由于存在故障的条带单元无法通过RAID冗余算法进行修复,因此只能通 过无效数据对存在故障的条带单元进行修复。这里所讲的无效数据可以为预定 的无效数据,比如对同一个条带中所有存在故障的条带单元统一预定为一个相 同的无效数据,还比如对同一个条带中所有存在故障的条带单元预定相同或不 同的无效数据;无效数据还可以为在进行无效修复时随机生成的数据。需要说 明的是,无论哪种情况下的无效数据,对于RAID控制器或系统来讲是知道每 个修复后的条带单元中写入的无效数据的。换句话说,当同一条带中无法通过 RAID冗余算法修复的故障条带单元的数量大于2个时,则对这些故障条带单元 修复时写入的无效数据相同或不完全相同,比如,对于同一条带中无法通过 RAID冗余算法进行修复的故障条带单元来讲,可以为这些故障条带单元添加相 同的无效数据,也可以针对不同的故障条带单元添加不同的无效数据,但这些 无效数据均是预定的无效数据或随机生成的无效数据,即不是根据RAID冗余 算法得到的数据。

这里所讲的预定的无效数据可以根据实际情况进行设定,比如先确定该存 在故障的条带单元的数据区所占的字节,为这些字节全部设定为0,或者为这些 字节全部设定为1,也可以为这些字节中的一部分为设置为0,另一部分设置为 1等。但不论为该条带单元设置的无效数据是多少,当为该条带单元设置好无效 数据之后,该条带单元中的数据即为确定的了,虽然这个无效数据可能与出现 故障前的数据不同,但内存可以安全读取出这个条带单元中的无效数据。

在某些情况下,同一个条带中出现故障的条带单元的数量比较多,在对其 中一个条带单元进行修复之后,剩余的出现故障的条带单元的数量还是大于指 定数据,在这种情况下,每修复一个出现故障的条带单元之后,即判断剩余的 为修复的出现故障的条带单元的数量是否满足使用RAID冗余算法进行修复的 要求,只要不满足,则继续修复下一个出现故障的条带单元,直到未修复的存 在故障的条带单元数量满足RAID冗余算法修复的要求。

值得注意的是,由于条带单元出现故障的原因比较多,比如逻辑故障和物 理故障(如条带单元中的扇区发生物理损坏),当条带单元出现逻辑故障时可以 对该条带进行写修复,而当条带单元出现物理故障时则通常无法对该条带直接 进行写修复。因此在对存在故障的条带单元进行无效修复时,通常存在如下两 种情况:

在第一种情况下,当存在故障的条带单元能进行写修复时,则在存在故障 的条带单元中写入无效数据,或,在备份的数据区写入无效数据,并将存在故 障的条带单元与备份的数据区进行映射;

在第二种情况下,当存在故障的条带单元无法进行写修复时,则在备份的 数据区写入无效数据,并将存在故障的条带单元与备份的数据区进行映射。

这样,每当需要读取存在故障的条带单元中的数据时,由于该故障条带单 元无法进行写修复,而是将无效数据写入了备份的数据区,因此可以根据该故 障条带单元和备份的数据区之间的映射关系读取该备份数据区中写入的数据。 这种情况可以看作是从该故障条带单元读取数据的特例。

也就是说,在对存在故障的条带单元进行无效修复时,可以先判断存在故 障的条带单元是否能进行写修复,如果存在故障的条带单元能进行写修复,则 可以在存在故障的条带单元中写入无效数据,或者可以在备份的数据区写入无 效数据,并将存在故障的条带单元与备份的数据区进行映射,这两种方法可以 择一选用;而如果存在故障的条带单元不能进行写修复,则可以在备份的数据 区写入无效数据,并将存在故障的条带单元与备份的数据区进行映射。

305,使用条带中为正常条带单元的数据,以及经过无效修复后各条带单元 中的无效数据,利用RAID冗余算法,修复余下的存在故障的2个条带单元;

通过步骤204之后,如果判定剩余的存在故障的条带单元数量满足使用 RAID冗余算法进行修复的要求,则可以通过RAID冗余算法进行修复。

在一种可能的实现方式中,可以使用该条带中为非故障条带单元的数据以 及经过无效修复后各条带单元中的无效数据,利用RAID冗余算法对余下的存 在故障的条带单元进行修复。

值得注意的是,由于条带单元出现故障的原因比较多,比如逻辑故障和物 理故障(如条带单元中的扇区发生物理损坏),当条带单元出现逻辑故障时可以 对该条带进行写修复,而当条带单元出现物理故障时则通常无法对该条带直接 进行写修复。因此在使用条带中为正常条带单元的数据,以及经过无效修复后 各条带单元中的无效数据,利用RAID冗余算法,修复余下的存在故障的条带 单元时,可以包括如下两种情况:

在第一种情况下,当存在故障的条带单元能进行写修复时,则将利用RAID 冗余算法计算出来的数据写入存在故障的条带单元中,或,将利用RAID冗余 算法计算出来的数据写入备份的数据区,并将存在故障的条带单元与备份的数 据区进行映射;

在第二种情况下,当存在故障的条带单元无法进行写修复时,则将利用 RAID冗余算法计算出来的数据写入备份的数据区,并将存在故障的条带单元与 备份的数据区进行映射。

这样,每当需要读取存在故障的条带单元中的数据时,由于该故障条带单 元无法进行写修复,而是将无效数据写入了备份的数据区,因此可以根据该故 障条带单元和备份的数据区之间的映射关系读取该备份数据区中写入的数据。 这种情况可以看作是从该故障条带单元读取数据的特例。

也就是说,在利用RAID冗余算法,修复余下的存在故障的条带单元时, 可以先判断存在故障的条带单元是否能进行写修复,如果存在故障的条带单元 能进行写修复,则可以将利用RAID冗余算法计算出来的数据写入存在故障的 条带单元中,或,可以将利用RAID冗余算法计算出来的数据写入备份的数据 区,并将存在故障的条带单元与备份的数据区进行映射,这两种方法可以择一 选用;而如果存在故障的条带单元不能进行写修复,则可以将利用RAID冗余 算法计算出来的数据写入备份的数据区,并将存在故障的条带单元与备份的数 据区进行映射。

需要说明的是,由于RAID冗余算法是通过该条带中已经修复的故障条带 单元以及该条带中无故障的条带单元中的数据对剩余的故障条带单元进行修复 的,由于该条带中已经修复的故障条带单元被写入了无效数据,因此RAID冗 余算法根据这些无效数据计算出来的数据也应该是无效的数据。但通过RAID 冗余算法计算出来的无效数据也是可以被内存安全地读取出来的。

当确定同一个条带中的两个故障条带单元可以通过RAID冗余算法进行修 复时,则根据已经修复的故障条带单元中的无效数据和该条带中正常条带单元 中的数据,利用RAID冗余算法计算出两个数据,并将这两个数据分别添加至 这两个故障条带单元中。由于对于同一条带中的故障条带单元来讲,当其他的 故障条带单元均通过无效数据进行修复之后,然后根据这些无效数据以及该条 带中其他正常条带单元中的有效数据计算出来得到的数据也通常是无效的。

这样,在后续使用的过程中,如果磁盘4中的数据1的区域也出现故障, 此时RAID冗余算法则可以根据故障条带单元1、故障条带单元2、故障条带单 元3以及磁盘5中的数据进行还原,得到磁盘4中的数据。

306,记录与存在故障的条带单元对应的故障标记。

由于在对故障条带单元修复时填充的数据均是无效数据,因此这些无效数 据被读取出来是不准确的,为了避免内存读取故障条带单元中的无效数据,则 可以记录与故障条带单元对应的故障标记,这样内存在读取故障条带单元所在 的位置的数据时,如果发现存在与该位置对应的故障标记,则不读取对应于该 位置中的数据。

在实际应用中,在记录与故障条带单元对应的故障标记时,可以包括如下 两种情况:

第一种情况,将与故障条带单元对应的故障标记作为数据完整性区域DIF 校验数据,将DIF校验数据写入故障条带单元中;

对于有些支持DIF校验区的RAID组来讲,每一个数据区域中通常包括两 部分,分别为数据区和DIF校验区,仍旧参见图2E所示,可以将故障标记作为 DIF校验数据,将DIF校验数据也写入故障条带单元。这样,当内存读取该数 据区域时,可以根据DIF校验区得知该数据区域是存在故障的条带单元,不需 要读取该数据区中的数据。

第二种情况,将故障条带单元所在位置以及与故障条带单元对应的故障标 记写入内存中预设的映射表中,以便内存根据映射表中故障条带单元所在位置 以及故障标记确定出故障条带单元。

通常,对一些不支持DIF校验区的RAID组来讲,通常可以在内存中设置 一个用于存放故障条带单元所在位置以及与该故障条带单元对应的故障标记的 映射表,这样,当内存需要读取故障条带单元中的数据时,可以根据映射表得 知该位置为存在故障的条带单元,此时则不需要读取该位置中的数据。

综上所述,本发明实施例中提供的独立磁盘冗余阵列修复方法,通过当 RAID组中同一条带中的多个条带单元存在故障时,对存在故障且无法通过 RAID冗余算法进行修复的条带单元,进行无效修复,对存在故障且可通过RAID 冗余算法进行修复的条带单元,通过条带中为正常条带单元的数据以及经过无 效修复后各条带单元中的无效数据,利用RAID冗余算法进行修复;解决了现 有技术中当RAID组中一个条带中出现多个存在故障的条带单元时,无法对该 条带中后续出现故障的条带单元进行修复,造成故障区域扩大、数据丢失量增 加的问题;对于同一个条带中出现故障的条带单元来讲,由于对该条带中不能 修复的条带单元进行了无效修复,且根据无效修复时的无效数据以及其他条带 单元中的数据,利用RAID算法对剩余可修复的条带单元进行修复,因此在后 续的使用过程中,如果在后续使用过程中,该这条带中其他条带单元也出现故 障,则可以根据这些已经修复的条带单元中的无效数据对后续出现故障的条带 单元进行成功修复,达到了可以保证后续其他磁盘出现故障时能够被及时恢复, 有效防止故障域扩大的效果。

以下为本发明的装置实施例,对于其中未详尽描述的细节,可以参考上述 对应的方法实施例。

请参见图4所示,其示出了本发明一个实施例中提供的独立磁盘冗余阵列 装置的结构示意图,该独立磁盘冗余阵列装置可以包括但不限于:判断模块402、 第一修复模块404和第二修复模块406。

判断模块402,可以用于当独立磁盘冗余阵列RAID组中同一条带中的多个 条带单元存在故障时,判断该条带中存在故障的条带单元数量是否满足使用 RAID冗余算法进行修复的要求;

第一修复模块404,可以用于在判断模块402判断该条带中存在故障的条带 单元数量不满足使用RAID冗余算法进行修复的要求时,则对至少一个存在故 障的条带单元进行无效修复,直至未修复的存在故障的条带单元数量满足RAID 冗余算法修复的要求;

第二修复模块406,可以用于使用条带中为正常条带单元的数据,以及经过 无效修复后各条带单元中的无效数据,利用RAID冗余算法,修复经过第一修 复模块404修复之后余下的存在故障的条带单元。

综上所述,本发明实施例中提供的独立磁盘冗余阵列修复装置,通过当 RAID组中同一条带中的多个条带单元存在故障时,对存在故障且无法通过 RAID冗余算法进行修复的条带单元,进行无效修复,对存在故障且可通过RAID 冗余算法进行修复的条带单元,通过条带中为正常条带单元的数据以及经过无 效修复后各条带单元中的无效数据,利用RAID冗余算法进行修复;解决了现 有技术中当RAID组中一个条带中出现多个存在故障的条带单元时,无法对该 条带中后续出现故障的条带单元进行修复,造成故障区域扩大、数据丢失量增 加的问题;对于同一个条带中出现故障的条带单元来讲,由于对该条带中不能 修复的条带单元进行了无效修复,且根据无效修复时的无效数据以及其他条带 单元中的数据,利用RAID算法对剩余可修复的条带单元进行修复,因此在后 续的使用过程中,如果在后续使用过程中,该这条带中其他条带单元也出现故 障,则可以根据这些已经修复的条带单元中的无效数据对后续出现故障的条带 单元进行成功修复,达到了可以保证后续其他磁盘出现故障时能够被及时恢复, 有效防止故障域扩大的效果。

请参见图5所示,其示出了本发明另一个实施例中提供的独立磁盘冗余阵 列修复装置的结构示意图,该独立磁盘冗余阵列修复装置可以包括但不限于: 判断模块502、第一修复模块504和第二修复模块506。

判断模块502,可以用于当独立磁盘冗余阵列RAID组中同一条带中的多个 条带单元存在故障时,判断该条带中存在故障的条带单元数量是否满足使用 RAID冗余算法进行修复的要求;

第一修复模块504,可以用于在判断模块502判断该条带中存在故障的条带 单元数量不满足使用RAID冗余算法进行修复的要求时,则对至少一个存在故 障的条带单元进行无效修复,直至未修复的存在故障的条带单元数量满足RAID 冗余算法修复的要求;

第二修复模块506,可以用于使用条带中为正常条带单元的数据,以及经过 无效修复后各条带单元中的无效数据,利用RAID冗余算法,修复经过第一修 复模块504修复之后余下的存在故障的条带单元。

在本实施例中的第一种可能的实现方式中,第一修复模块504可以包括: 第一写入单元504a。

第一写入单元504a,可以用于当存在故障的条带单元能进行写修复时,则 在存在故障的条带单元中写入无效数据;

第二修复模块506可以包括:第二写入单元506a。

第二写入单元506a,可以用于将利用RAID冗余算法计算出来的数据写入 存在故障的条带单元中。

在本实施例中的第二种可能的实现方式中,第一修复模块504可以包括第 三写入单元504b。

第三写入单元504b,可以用于在备份的数据区写入无效数据,并将存在故 障的条带单元与备份的数据区进行映射;

第二修复模块506可以包括第四写入单元506b。

第四写入单元506b,可以用于将利用RAID冗余算法计算出来的数据写入 备份的数据区,并将存在故障的条带单元与备份的数据区进行映射。

在本实施例中的第三种可能的实现方式中,当RAID组为RAID5或RAID3 时,判断模块502可以包括:第一判断单元502a、第一判定单元502b和第二判 定单元502c。

第一判断单元502a,可以用于判断该条带中存在故障的条带单元数量是否 大于1;

第一判定单元502b,可以用于在第一判断单元502a的判断结果为该条带中 存在故障的条带单元数据大于1时,判定该条带中存在故障的条带单元数量不 满足使用RAID冗余算法进行修复的要求;

第二判定单元502c,可以用于在第一判断单元502a的判断结果为该条带中 存在故障的条带单元数据不大于1时,判定该条带中存在故障的条带单元数量 满足使用RAID冗余算法进行修复的要求。

在本实施例中的第四种可能的实现方式中,当RAID组为RAID6时,判断 模块502可以包括:

第二判断单元502d,可以用于判断该条带中存在故障的条带单元数量是否 大于2;

第三判定单元502e,可以用于在第二判断单元502d的判断结果为该条带中 存在故障的条带单元数据大于2时,判定该条带中存在故障的条带单元数量不 满足使用RAID冗余算法进行修复的要求;

第四判定单元502f,可以用于在第二判断单元502d的判断结果为该条带中 存在故障的条带单元数据不大于2时,判定该条带中存在故障的条带单元数量 满足使用RAID冗余算法进行修复的要求。

在本实施例中的第五种可能的实现方式中,该独立磁盘冗余阵列修复还可 以包括:记录模块508。

记录模块508,可以用于记录与存在故障的条带单元对应的故障标记。

在本实施例中的第六种可能的实现方式中,记录模块508可以包括:第五 写入单元508a和第六写入单元508b。

第五写入单元508a,可以用于将与存在故障的条带单元对应的故障标记作 为数据完整性区域DIF校验数据,将DIF校验数据写入存在故障的条带单元中;

或,

第六写入单元508b,可以用于将存在故障的条带单元所在位置以及与存在 故障的条带单元对应的故障标记写入内存中预设的映射表中,以便内存根据映 射表中条带单元所在位置以及故障标记确定出存在故障的条带单元。

综上所述,本发明实施例中提供的独立磁盘冗余阵列修复装置,通过当 RAID组中同一条带中的多个条带单元存在故障时,对存在故障且无法通过 RAID冗余算法进行修复的条带单元,进行无效修复,对存在故障且可通过RAID 冗余算法进行修复的条带单元,通过条带中为正常条带单元的数据以及经过无 效修复后各条带单元中的无效数据,利用RAID冗余算法进行修复;解决了现 有技术中当RAID组中一个条带中出现多个存在故障的条带单元时,无法对该 条带中后续出现故障的条带单元进行修复,造成故障区域扩大、数据丢失量增 加的问题;对于同一个条带中出现故障的条带单元来讲,由于对该条带中不能 修复的条带单元进行了无效修复,且根据无效修复时的无效数据以及其他条带 单元中的数据,利用RAID算法对剩余可修复的条带单元进行修复,因此在后 续的使用过程中,如果在后续使用过程中,该这条带中其他条带单元也出现故 障,则可以根据这些已经修复的条带单元中的无效数据对后续出现故障的条带 单元进行成功修复,达到了可以保证后续其他磁盘出现故障时能够被及时恢复, 有效防止故障域扩大的效果。

需要说明的是:上述实施例提供的独立磁盘冗余阵列修复装置在对故障条 带单元进行修复时,仅以上述各功能模块的划分进行举例说明,实际应用中, 可以根据需要而将上述功能分配由不同的功能模块完成,即将控制器的内部结 构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述 实施例提供的独立磁盘冗余阵列修复装置与独立磁盘冗余阵列修复装置方法实 施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

请参见图6所示,其示出了本发明一个实施例中提供的存储设备的结构示 意图,该存储设备可以包括但不限于:控制器602和RAID组604,其中控制器 602和RAID组604可以通过有线方式连接,RAID组604可以为RAID3、RAID 5或RAID6,当RAID组604为RAID3或RAID5时,则RAID组604中至少 包含三个磁盘,当RAID组604为RAID6时,则RAID组604中至少包含四个 磁盘。

控制器602,可以用于当独立磁盘冗余阵列RAID组中同一条带中的多个条 带单元存在故障时,判断该条带中存在故障的条带单元数量是否满足使用RAID 冗余算法进行修复的要求;

控制器602,还可以用于在判断该条带中存在故障的条带单元数量不满足使 用RAID冗余算法进行修复的要求时,则对至少一个存在故障的条带单元进行 无效修复,直至未修复的存在故障的条带单元数量满足RAID冗余算法修复的 要求;

控制器602,还可以用于使用条带中为正常条带单元的数据,以及经过无效 修复后各条带单元中的无效数据,利用RAID冗余算法,修复经过第一修复模 块修复之后余下的存在故障的条带单元。

在本发明的第一种可能的实现方式中,

控制器602,还可以用于当存在故障的条带单元能进行写修复时,则在存在 故障的条带单元中写入无效数据;

控制器602,还可以用于当存在故障的条带单元能进行写修复时,则将利用 RAID冗余算法计算出来的数据写入存在故障的条带单元中。

在本发明的第二种可能的实现方式中,

控制器602,还可以用于在备份的数据区写入无效数据,并将存在故障的条 带单元与备份的数据区进行映射;

控制器602,还可以用于将利用RAID冗余算法计算出来的数据写入备份的 数据区,并将存在故障的条带单元与备份的数据区进行映射。

在本发明的第三种可能的实现方式中,

当RAID组为RAID5或RAID3时,控制器602,还可以用于判断该条带中 存在故障的条带单元数量是否大于1;

控制器602,还可以用于在判断结果为该条带中存在故障的条带单元数据大 于1时,判定该条带中存在故障的条带单元数量不满足使用RAID冗余算法进 行修复的要求;

控制器602,还可以用于在判断结果为该条带中存在故障的条带单元数据不 大于1时,判定该条带中存在故障的条带单元数量满足使用RAID冗余算法进 行修复的要求。

在本发明的第四种可能的实现方式中,

当RAID组为RAID6时,控制器602,还可以用于判断该条带中存在故障 的条带单元数量是否大于2;

控制器602,还可以用于在判断结果为该条带中存在故障的条带单元数据大 于2时,判定该条带中存在故障的条带单元数量不满足使用RAID冗余算法进 行修复的要求;

控制器602,还可以用于在判断结果为该条带中存在故障的条带单元数据不 大于2时,判定该条带中存在故障的条带单元数量满足使用RAID冗余算法进 行修复的要求。

在本发明的第五种可能的实现方式中,

控制器602,还可以用于记录与存在故障的条带单元对应的故障标记。

在本发明的第六种可能的实现方式中,

控制器602,还可以用于将与存在故障的条带单元对应的故障标记作为数据 完整性区域DIF校验数据,将DIF校验数据写入存在故障的条带单元中;

或,

控制器602,还可以用于将存在故障的条带单元所在位置以及与存在故障的 条带单元对应的故障标记写入内存中预设的映射表中,以便内存根据映射表中 条带单元所在位置以及故障标记确定出存在故障的条带单元。

综上所述,本发明实施例中提供的独立磁盘冗余阵列修复装置,通过当 RAID组中同一条带中的多个条带单元存在故障时,对存在故障且无法通过 RAID冗余算法进行修复的条带单元,进行无效修复,对存在故障且可通过RAID 冗余算法进行修复的条带单元,通过条带中为正常条带单元的数据以及经过无 效修复后各条带单元中的无效数据,利用RAID冗余算法进行修复;解决了现 有技术中当RAID组中一个条带中出现多个存在故障的条带单元时,无法对该 条带中后续出现故障的条带单元进行修复,造成故障区域扩大、数据丢失量增 加的问题;对于同一个条带中出现故障的条带单元来讲,由于对该条带中不能 修复的条带单元进行了无效修复,且根据无效修复时的无效数据以及其他条带 单元中的数据,利用RAID算法对剩余可修复的条带单元进行修复,因此在后 续的使用过程中,如果在后续使用过程中,该这条带中其他条带单元也出现故 障,则可以根据这些已经修复的条带单元中的无效数据对后续出现故障的条带 单元进行成功修复,达到了可以保证后续其他磁盘出现故障时能够被及时恢复, 有效防止故障域扩大的效果。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示 例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来 实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用 和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现 所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述 的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程, 在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方 法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性 的,例如,所述单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以 有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统, 或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或 直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接, 可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为 单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者 也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部 单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中, 也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元 中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用 时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技 术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以 软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若 干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备 等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包 括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储 器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的 介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于 此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到 变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应 所述以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号