首页> 中国专利> 一种基于磁盘阵列的数据处理方法及磁盘阵列管理器

一种基于磁盘阵列的数据处理方法及磁盘阵列管理器

摘要

本发明公开一种基于磁盘阵列的数据处理及其装置,数据存储系统中存储有用于记录发生读写失败的数据块所属条带和所在磁盘,以及对该数据块进行数据重建后重建数据块所在的热备磁盘的数据结构,磁盘阵列管理器根据数据结构对磁盘阵列进行读写;当读写失败时,在数据结构中记录发生读写失败的数据块所属条带和所在磁盘,并统计该条带中发生读写失败的数据块数量;若该数量未超过热备磁盘数量,则重建发生读写失败的数据块并将重建数据块写入热备磁盘的对应条块,并记录该重建数据块所在的热备磁盘;若该数量已超过热备磁盘数量,但所超出的数量未超过一个条带的容错能力,则重建发生读写失败的数据块。本发明可提高磁盘阵列对磁盘介质错误的容忍度。

著录项

  • 公开/公告号CN102508733A

    专利类型发明专利

  • 公开/公告日2012-06-20

    原文格式PDF

  • 申请/专利权人 杭州华三通信技术有限公司;

    申请/专利号CN201110283141.5

  • 发明设计人 张日新;

    申请日2011-09-22

  • 分类号G06F11/14(20060101);

  • 代理机构11297 北京鑫媛睿博知识产权代理有限公司;

  • 代理人龚家骅

  • 地址 310053 浙江省杭州市高新技术产业开发区之江科技工业园六和路310号华为杭州生产基地

  • 入库时间 2023-12-18 05:34:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-24

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F11/14 变更前: 变更后: 申请日:20110922

    专利权人的姓名或者名称、地址的变更

  • 2016-01-20

    授权

    授权

  • 2013-02-06

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

    实质审查的生效

  • 2012-06-20

    公开

    公开

说明书

技术领域

本发明涉及通信技术领域的数据存储技术,尤其涉及一种基于磁盘阵列的 数据处理方法及磁盘阵列管理器。

背景技术

在存储系统中,一般用磁盘阵列作为存储介质,通过RAID(Redundant  Array of Independent Disks,独立硬盘冗余阵列)算法进行数据冗余,通过热备 磁盘进行磁盘备份。

当磁盘阵列中的成员磁盘发生故障(即介质错误)时会导致数据读写失败, 存储系统用热备磁盘将出现故障的成员磁盘顶替掉,通过RAID算法进行磁盘 阵列重建,以继续保持数据冗余。在磁盘阵列重建开始后,存储系统依次将故 障磁盘的数据按条带顺序写入热备磁盘的对应条块,在所有条带完成对应的写 入后,存储系统将该故障磁盘踢出磁盘阵列,重建完成。如果存储系统中没有 多余的热备磁盘,则磁盘阵列将发生故障的成员磁盘踢出阵列并降级运行,不 再具有数据的冗余性。此时如果再有新的成员磁盘发生故障,则阵列失效,无 法继续提供存储业务。在发生阵列失效后,可以通过其他专用的数据恢复工具 将磁盘阵列中失效前已经保存的数据进行恢复,但是对失效后的数据则无能为 力。

在监控存储的应用场景中,一般而言,监控系统中配置少量热备磁盘以为 多个阵列备份,这样可以在降低成本的同时保证一定的数据冗余能力。当发生 多于一块成员磁盘故障且没有热备磁盘的情况时,将导致磁盘阵列失效而无法 继续进行监控数据保存。由于监控存储的数据流是24小时不间断写入,如果 长时间没有人工进行介入,容易造成监控数据长时间丢失。

由此可见,目前的磁盘阵列故障处理机制对磁盘介质错误的容忍度较低。

发明内容

本发明提供一种基于磁盘阵列的数据处理方法及磁盘阵列管理器,用以提 高磁盘阵列对磁盘介质错误的容忍程度。

本发明提供的基于磁盘阵列的数据处理方法,应用于数据存储系统,所述 数据存储系统中存储有数据结构,用于记录发生读写失败的数据块所属的条带 和所在的成员磁盘,以及对该数据块进行数据重建后重建数据块所在的热备磁 盘,该方法包括:

磁盘阵列管理器根据所述数据结构对磁盘阵列进行读写;

当磁盘阵列发生读写失败时,磁盘阵列管理器在所述数据结构中记录发生 读写失败的数据块所属的条带和所在的成员磁盘,并统计该条带中发生读写失 败的数据块数量;

若该条带中发生读写失败的数据块数量未超过热备磁盘数量,则根据磁盘 阵列校验算法重建发生读写失败的数据块并将重建数据块写入热备磁盘的对 应条块,并记录该重建数据块所在的热备磁盘;

若该条带中发生读写失败的数据块数量已超过热备磁盘数量,但所超出的 数量未超过一个条带所允许的发生读写失败的数据块的最大数量,则根据磁盘 阵列校验算法重建发生读写失败的数据块;

若该条带中发生读写失败的数据块数量已超过热备磁盘数量,且所超出的 数量超过一个条带所允许的发生读写失败的数据块的最大数量,则设置该条带 失效。

本发明提供的磁盘阵列管理器,应用于数据存储系统,所述数据存储系统 中存储有数据结构,用于记录发生读写失败的数据块所属的条带和所在的成员 磁盘,以及对该数据块进行数据重建后重建数据块所在的热备磁盘,该磁盘阵 列管理器包括:读写模块、数据结构维护模块、处理模块和数据重建模块,其 中:

读写模块,用于根据所述处理模块的指示对磁盘阵列进行读写;

数据结构维护模块,用于当磁盘阵列发生读写失败时,在所述数据结构中 记录发生读写失败的数据块所属的条带和所在的成员磁盘;以及,根据所述处 理模块的指示,在所述读写模块将重建数据块写入热备磁盘后,在所述数据结 构中记录该重建数据块所属的条带和所在的成员磁盘以及该热备磁盘;

数据重建模块,用于按照所述处理模块的指示,根据磁盘阵列校验算法重 建发生读写失败的数据块;

处理模块,用于当磁盘阵列发生读写失败时,统计该条带中发生读写失败 的数据块数量;若该条带中发生读写失败的数据块数量未超过热备磁盘数量, 则指示所述数据重建模块根据磁盘阵列校验算法重建发生读写失败的数据块, 并指示所述读写模块将重建数据块写入热备磁盘的对应条块,以及指示数据结 构维护模块在该数据结构中记录该重建数据块所属的条带和所在的成员磁盘 以及该热备磁盘;若该条带中发生读写失败的数据块数量已超过热备磁盘数 量,但未超过一个条带所允许的发生读写失败的数据块的最大数量,则指示所 述数据重建模块根据磁盘阵列校验算法重建发生读写失败的数据块;若该条带 中发生读写失败的数据块数量已超过热备磁盘数量,且超过一个条带所允许的 发生读写失败的数据块的最大数量,则指示所述数据结构维护模块在该数据结 构中设置所述条带失效。

与现有技术相比,本发明具有如下有益技术效果:

在磁盘阵列发生读写失败时,由于在相应条带中发生读写失败的数据块数 量未超过热备磁盘数量的情况下,通过在热备磁盘对该条带数据进行数据重建 后将该热备磁盘加入该磁盘阵列,这样还能够保证该条带的冗余性,因此仍然 将发生读写失败的成员磁盘保持在磁盘阵列中,提高了磁盘阵列的容错能力。 即便磁盘阵列中有超过热备磁盘数量的多个成员磁盘发生读写失败,只要任意 条带中发生读写失败的数据块数量超出热备磁盘数量的部分未超过该磁盘阵 列所允许的容错能力,即使在磁盘阵列没有热备磁盘可用的情况下,仍然能够 通过热备磁盘参与数据重建来保证相应条带的数据完整性,即保证磁盘阵列数 据的完整性,存储系统可继续提供数据存储服务,从而提高了磁盘阵列的容错 能力。

附图说明

图1为本发明实施例提供的基于磁盘阵列的数据处理流程示意图;

图2为本发明实施例提供的采用Hash表组织存储条块映射表的示意图;

图3A为本发明实施例中有一个磁盘发生介质错误并进行重建的示意图;

图3B为本发明实施例中有两个磁盘发生介质错误并进行重建的示意图;

图3C为本发明实施例中有三个磁盘发生介质错误并进行重建的示意图;

图3D、图3E、图3F为本发明实施例中加入新盘后的磁盘阵列重建的示 意图;

图4A为现有技术中在有热备磁盘时发生磁盘介质错误时的示意图;

图4B为现有技术中在没有热备磁盘时发生磁盘介质错误时的示意图;

图5为本发明实施例提供的磁盘阵列管理器的结构示意图;

图6A、图6B和图6C分别为图5所示的磁盘阵列管理器中的处理模块的 结构示意图;

图7A和图7B分别为图5所示的磁盘阵列管理器中的数据重建模块的结 构示意图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

本发明实施例中,需要在存储系统中建立和维护条块映射表,该映射表用 于记录发生读写失败的数据块(以下将“发生读写失败的数据块”简称为“坏 块”)所属的条带和所在的成员磁盘。该条块映射表是磁盘阵列管理器能够正 确对磁盘阵列进行数据读写的依据,还是对磁盘阵列进行重建的依据。条块映 射表可存储在内存、NVRAM(Non-Volatile Random Access Memory,非易失性 随机访问存储器)或其他永久存储介质中,通常可在存储系统初始化时创建条 块映射表,在存储系统重新启动后,可从NVRAM或其他永久存储介质中读取 该条块映射表并在内存中重建,以便磁盘阵列管理器根据该条块映射表进行数 据读写。

例如,在磁盘阵列类型为RAID5且仅有一个热备磁盘(该热备磁盘的磁 盘编号为n+1)的情况下,条带映射表的结构可如表1所示。

表1

其中,“条带状态”字段用于记录整个条带的状态,为可选字段,该字段 的值可包括:

冗余,表示对应条带能实现数据冗余,在该条带中的坏块数量不超过热备 磁盘数量时,设置该状态值。如,对于仅有1个热备磁盘的RAID5,在1个条 带中有1个坏块的情况下,可使用热备磁盘和该条带上未发生读写失败的数据 块重建该条带数据,从而能够根据磁盘阵列的成员磁盘和热备磁盘实现该条带 的数据冗余,此时将该条带状态为冗余;

非冗余,表示对应条带不能实现数据冗余,在该条带中的坏块数量超过热 备磁盘数量,但所超出的数值未超过该磁盘阵列所允许的最大磁盘错误数量 (即未超过一个条带所允许的最大坏块数量)时,设置该状态值。如,对于仅 有1个热备磁盘的RAID5,在1个条带中有2个坏块的情况下,可根据热备磁 盘中的重建数据和该条带上未发生读写失败的成员磁盘恢复出发生读写失败 的数据,但无法实现该条带的数据冗余(RAID5所允许的一个条带中最多只能 有1个坏块,多于1个坏块时该条带的数据无法恢复),此时设置该条带状态 为非冗余;

失效,表示对应条带失效,在该条带中的坏块数量超过热备磁盘数量,且 所超出的数值已超过该磁盘阵列所允许的最大磁盘错误数量(即已超过一个条 带所允许的最大坏块数量)时,设置该状态值。如,对于仅有1个热备磁盘的 RAID5,在1个条带中有超过2个坏块的情况下,即使使用成员磁盘和热备磁 盘中的重建数据也无法恢复出发生读写失败的数据,此时设置该条带状态为失 效。

“成员磁盘对应的条带状态”字段用于记录成员磁盘在相应条带上是否发 生读写失败,若发生读写失败则在对应表格中记录“错误”或类似标识。进一 步的,如果对该发生读写失败的数据块进行了重建并存储在了热备磁盘上,则 还可记录该重建后的数据块所在的热备磁盘,如表1中记录有成员磁盘1在条 带1上发生读写失败,并在磁盘n+1中重建该数据;若未发生读写失败,则在 对应的表格中记录“OK”或类似标识。

需要说明的是,以上条带映射表仅为一种具体实例,本领域技术人员应该 能够理解,凡是能够记录发生读写失败的数据块所属的条带和所在的成员磁盘 以及重建数据块所在的热备磁盘的数据结构,都应该在本发明的保护范围之 内。

根据本发明实施例提供的条块映射表或类似数据结构,本发明实施例提供 的数据处理流程可如图1所示(图1以条块映射表为例描述),磁盘阵列管理 器对磁盘阵列进行读写,当磁盘阵列发生介质错误导致读写失败时,其处理流 程可包括:

步骤101,磁盘阵列管理器在条块映射表中记录发生读写失败的数据块所 属的条带和所在的成员磁盘,并统计该条带中发生读写失败的数据块数量。

在具体实施时,磁盘阵列管理器可在如表1所示的条块映射表中相应的条 带下,在发生读写失败的成员磁盘所在的表格中记录“错误”,以表示该成员 磁盘的该条带发生了读写失败。

步骤102,磁盘阵列管理器根据条带中发生读写失败的数据块数量、热备 磁盘数量和一个条带的容错能力(即在能够保证数据完整性的情况,一个条带 所允许的最大坏块数量,或者说一个条带所允许的介质错误磁盘的最大数量), 确定对应的处理方式。由于不同磁盘阵列类型所采用的容错算法不同,因此容 错能力可能不同,如RAID5允许一个条带中最多有1个坏块,RAID10允许一 个条带中有2个坏块。

具体的,若该条带中发生读写失败的数据块数量未超过热备磁盘数量,则 转入步骤103;若该条带中发生读写失败的数据块数量已超过热备磁盘数量, 但所超出的数量未超过一个条带所允许的最大坏块数量,则转入步骤104;若 该条带中发生读写失败的数据块数量已超过热备磁盘数量,且所超出的数量已 超过一个条带所允许的最大坏块数量,则转入步骤105。

步骤103,磁盘阵列管理器使用热备磁盘参与条带重建,即,根据磁盘阵 列校验算法重建发生读写失败的数据块并将重建数据块写入热备磁盘的对应 条块,并在条块映射表中记录该重建数据块所在的热备磁盘。

具体实施时,磁盘阵列管理器可在如表1所示的条块映射表中相应的条带 中,在发生读写失败的成员磁盘所在的表格中记录热备磁盘的磁盘号,表示在 相应磁盘中已经针对该发生读写失败的数据块对应写入了重建数据。进一步 的,还可在“条带状态”字段记录“冗余”,表示该条带中的某成员磁盘虽然 发生读写失败,但通过在热备磁盘中进行数据块重建,还可根据该条带中未发 生读写失败的成员磁盘和热备磁盘中重建的数据块实现该条带的数据冗余。

步骤104,磁盘阵列管理器根据磁盘阵列校验算法重建发生读写失败的数 据块。

具体实施时,磁盘阵列管理器还可在如表1所示的条块映射表中相应的条 带的“条带状态”字段记录“未冗余”,表示该条带中虽然有超过1个的成员 磁盘发生读写失败,但通过在热备磁盘中进行数据块重建,还可根据该条带中 未发生读写失败的成员磁盘和热备磁盘中重建的数据块保证该条带的数据完 整性,但已无法实现该条带的数据冗余。

步骤105,磁盘阵列管理器设置该发生数据读写失败的数据块所属的条带 为失效状态。

具体实施时,磁盘阵列管理器可在如表1所示的条块映射表中相应的条带 的“条带状态”字段记录“失效”,表示该条带的数据已经无法保证完整性, 该条带已经不能再使用。

上述流程中,磁盘阵列管理器在对磁盘阵列进行读写时,需要依据本发明 实施例提供的条块映射表。具体的,磁盘阵列管理器在读写某个条带上的数据 时,若根据条块映射表发现该条带正常(即条块映射表中的对应条带下未记录 有发生读写失败的数据块),则按照常规方式进行读写;若根据条块映射表发 现该条带的状态为“冗余”或“非冗余”,则根据其中记录的重建数据块所在 的热备磁盘,通过该热备磁盘上的该条带上的数据块和磁盘阵列中该条带中未 发生读写失败的数据块进行数据读写;若根据条块映射表发现该条带的状态为 “失效”,则返回读写失败响应。

进一步的,为了提高对磁盘阵列进行读写的过程中,对条块映射表的查询 效率,可在存储系统内存中用快速的查询算法组织条块映射表,例如使用红黑 树或者Hash表等。图2示出了一种采用Hash表组织存储条块映射表的示意图。

通过以上流程可以看出,在磁盘阵列发生读写失败时,由于在相应条带中 发生读写失败的数据块数量未超过热备磁盘数量的情况下,通过在热备磁盘对 该条带数据进行数据重建后将该热备磁盘加入该磁盘阵列,这样还能够保证该 条带的冗余性,因此仍然将发生读写失败的成员磁盘保持在磁盘阵列中。如果 磁盘阵列中发生读写失败的数据块所属的条带中发生读写失败的数据块数量 都未超过热备磁盘数量,那么对于整个磁盘阵列来说,依然能够保持数据的冗 余性,整个过程不需要新的热备磁盘参与。而在现有技术中,由于重建后发生 读写失败的磁盘被踢出,如果没有新的热备磁盘参与重建,则磁盘阵列无法保 持数据的冗余性。

进一步的,本发明实施例中,即便磁盘阵列中有超过热备磁盘数量的多个 成员磁盘发生读写失败,只要任意条带中发生读写失败的数据块数量超出热备 磁盘数量的部分未超过该磁盘阵列所允许的容错能力,即使在磁盘阵列没有热 备磁盘可用的情况下,仍然能够通过热备磁盘参与数据重建来保证相应条带的 数据完整性,即保证磁盘阵列数据的完整性,存储系统可继续提供数据存储服 务,但此时不能保证数据的冗余性。而在现有技术中,在相同的情况下,磁盘 阵列就会失效。

由此可见,本发明实施例提供的数据处理方式与现有技术相比,提高了磁 盘阵列对磁盘介质错误的容忍程度。

为了避免占用存储系统内存过多,以导致查询效率过低,以及重新运行磁 盘阵列时恢复速度过慢,考虑到磁盘阵列的实际应用场合,可以设置磁盘阵列 允许发生介质错误的条带数量的上限。相应的,上述流程可以改进为:当磁盘 阵列发生读写失败时,磁盘阵列管理器根据条块映射表判断发生读写失败的条 带数量是否达到该设定的上限,并在判断发生读写失败的条带数量达到该设定 的上限时,设置磁盘阵列失效;在判断发生读写失败的条带数量还未达到该设 定的上限时,按照图1所示的流程执行。

在磁盘阵列发生介质错误后,采用本发明实施例可一定程度上提高系统的 容错能力。但为了避免磁盘阵列中存在过多的有介质错误的磁盘,导致磁盘阵 列的可靠性变差,可在发生介质错误的磁盘数量超过一定值,或者发生介质错 误的条带数量超过一定值的情况下,新增加热备磁盘,并用新增加的热备磁盘 或原热备磁盘顶替磁盘阵列中发生介质错误的磁盘,优选的,优先顶替介质错 误造成的坏块数量最多的磁盘。

具体实施时,可通过人工介入方式进行磁盘阵列重建,即允许用户通过管 理命令进行重建,重建完成后踢出含有介质错误的磁盘。为保证存储系统的可 靠性,踢盘前要求磁盘阵列的所有条带至少保证数据的完整性,如不存在状态 为“失效”的条带。重建后踢盘存在以下几种情况:

情况一:踢盘前没有发生过热备磁盘加入阵列的情况,阵列的磁盘为该阵 列创建时的磁盘;

情况二:踢盘前发生过热备磁盘加入阵列的情况,阵列的磁盘包含创建时 的磁盘和加入后的热备磁盘,但是仅被重建的磁盘有介质错误;

情况三:踢盘前发生过热备磁盘加入阵列的情况,阵列的磁盘包含创建时 的磁盘和加入后的热备磁盘,除被重建磁盘外,还有其他数据盘有介质错误。

对于情况一,可采用和现有技术实现相同的方法进行重建后踢盘,唯一不 同的是由于本发明实施例允许有介质错误的磁盘保留在阵列中,因此重建完 后,阵列中仍然可能有其他有介质错误的磁盘,此时除非继续重建,否则阵列 仍然处于不保证数据冗余性的状态。

对于情况二,只需要把被重建盘踢出阵列即可。

对于情况三,当使用热备磁盘替换发生读写失败的磁盘并增加新的热备磁 盘进行磁盘阵列重建时,一种具体实现是:磁盘阵列管理器根据条块映射表, 将原热备磁盘中除该被替换成员磁盘以外的其它成员磁盘的数据写入新的热 备磁盘中的相应条带,在该新的热备磁盘的其余条带中写入除该被替换成员磁 盘以外的一个发生读写失败的成员磁盘的相应条带的数据;磁盘阵列管理器根 据条块映射表,将被替换成员磁盘中未发生读写失败的数据块写入原热备磁盘 中的相应条带,然后使用原热备磁盘替换被替换成员磁盘,并将被替换成员磁 盘踢出磁盘阵列。

为了进一步对本发明的上述实施例的实现过程进行详细说明,下面以磁盘 阵列类型为RAID5、存储系统中仅有1个热备磁盘为例,描述上述流程的具体 实现过程。其中,RAID5中包括3个成员磁盘(磁盘1、磁盘2、磁盘3),磁 盘4为热备磁盘。

初始时,RAID5中的各成员磁盘工作正常,未发生介质错误,此时条块映 射表中没有记录。

RAID5中条带1上的磁盘1发生介质错误(即数据块D3发生读写失败), 如图3A所示,阵列管理器在条块映射表中添加条目0,记录条带1上的成员 磁盘1发生介质错误。由于条带1当前发生介质错误的成员磁盘数为1,未超 过热备磁盘数量,则阵列管理器通过RAID5冗余算法计算得到读写失败的数 据块D3’,并将该数据块D3’存储到磁盘4中的条带1的位置,从而实现重建, 然后在条块映射表中相应位置记录热备磁盘(磁盘4),并将条带1的状态设为 “冗余”,此时的条块映射表可如表3A所示。

表3A

如图3A所示,由于磁盘1发生介质错误后,仍然保持在磁盘阵列中,在 重建后,需要维护重建盘(即磁盘4)和被重建盘(即磁盘1)的关系,后续 其他成员磁盘再次发生介质错误时,该关系仍然保持不变(该关系用于重建后 的踢盘处理)。具体的,热备磁盘第一次重建时,对磁盘1的条块全部重建, 即,磁盘阵列管理器可在将重建数据块存储到磁盘4后,将磁盘1上的未发生 读写失败的数据块复制到磁盘4的对应条带,如图中所示,将磁盘1上的数据 块D1......Dm中的数据写入磁盘4的数据块D1’......Dm’。

使用热备磁盘重建完成后,磁盘1后续的写IO操作,除了要写磁盘1外, 还要写与之对应的重建盘(这里是磁盘4)中对应的条带数据。例如,在写图 3A所示的磁盘1的数据块D1、Dm时,还要写磁盘4的数据块D1’、Dm’。

之后,RAID5中条带j上的磁盘2发生介质错误(即图中磁盘2的数据块 Pj),如图3B所示,阵列管理器在条块映射表中添加条目1,记录条带j上的 成员磁盘2发生介质错误。由于条带j当前发生介质错误的成员磁盘数为1, 未超过热备磁盘数量,则阵列管理器通过RAID5冗余算法计算得到读写失败 的数据块Pj’,并将该数据块Pj’存储到磁盘4中的条带j的位置,从而实现重 建,然后在条块映射表中相应位置记录热备磁盘(磁盘4),并将条带j的状态 设为“冗余”,此时的条块映射表可如表3B所示。

表3B

可以看出,后续发生介质错误,热备磁盘再次重建时,仅重建发生介质错 误的条带,重建完成后所有条带保持冗余性,也即阵列保持冗余性。

使用热备磁盘重建完成后,磁盘1后续的写IO操作,除了要写磁盘1外, 还要写与之对应的重建盘(这里是磁盘4)中对应的条带数据。但是在写Dj 时,由于磁盘2的数据块Pj已经发生了介质错误,因此不能写磁盘4的Pj’。

之后,如图3C所示,磁盘3在条带p上发生介质错误,其处理方式同前 所述,此时的条块映射表可如表3C所示。

表3C

之后,加入热备磁盘5进行重建。如图3C中的阵列的磁盘1、2、3都有 介质错误的坏块,现在根据重建盘(磁盘4)和被重建盘(磁盘1)的关系, 在有新的热备磁盘的情况下,可以踢出磁盘1。由图3C可以看出,考虑阵列 允许发生介质错误的条带数量的上限和阵列的全部条带数量的比例,磁盘4上 的条块大部份是磁盘1的条块的备份(例如图3C中的磁盘4中除了条块Pj’、 Pp’),因此在重建时仅需要重建磁盘4上的部分条块,这些条块不是磁盘1的 备份,然后将磁盘4顶替磁盘1作为阵列的成员磁盘,将磁盘1踢出阵列,然 后继续将热备磁盘重建完成。

其中,如图3D所示,首先,将磁盘4的条块Pj和Pp′被拷贝到磁盘5的 对应位置;然后,如图3E所示,将磁盘1的条块Dj和Dp拷贝到磁盘4的对 应位置(即步骤1中的条块Pj′和Pp′)。此时如果Dj也发生了介质错误,则需 要通过Dk、Pj′来通过RAID5算法计算得到条块Dj的数据;最后,如图3F所 示,重建完成后用磁盘4顶替磁盘1,将磁盘1踢出阵列,从有介质错误的多 块磁盘中选择一块,例如这里选择磁盘2,然后继续对磁盘2进行重建,重建 完成后整个重建踢盘过程结束。此时的条块映射表可如表3F所示。

表3F

现有技术中,如图4A所示,当磁盘1的D3发生介质错误后,热备磁盘 磁盘4顶替重建,重建完后磁盘阵列踢出磁盘1,此时磁盘2的Pj又发生介质 错误,阵列降级。如图4B所示,磁盘1发生介质错误后,磁盘1从阵列中踢 出,磁盘2再发生介质错误后,导致阵列失效。

通过以上对比可以看出,在相同数量的热备磁盘的情况下,当RAID5阵 列中的磁盘发生介质错误后,只要发生介质错误的条块不属于同一个条带,那 么通过本发明实施例可以得到磁盘阵列的更高的数据冗余度。在RAID5阵列 没有热备磁盘可用的情况下,只要任意条带中发生介质错误的条块个数小于2, 仍然可以保证阵列的数据的完整性,继续为监控业务提供数据存储服务。

基于相同的技术构思,本发明实施例还提供了一种可应用于上述流程的磁 盘阵列管理器。

参见图5,为本发明实施例提供的磁盘阵列管理器的结构示意图。如前所 述,该磁盘阵列管理器应用于数据存储系统,该数据存储系统中存储有数据结 构,用于记录发生读写失败的数据块所属的条带和所在的成员磁盘,以及对该 数据块进行数据重建后重建数据块所在的热备磁盘。该数据结构可为前述的条 块映射表。该磁盘阵列管理器包括:读写模块501、数据结构维护模块502、 处理模块503和数据重建模块504,进一步的,该磁盘阵列管理器还可与显示 设备和输入设备连接,其中:

读写模块501,用于根据处理模块503的处理结果(即处理指示)对磁盘 阵列进行读写;

具体的,读写模块501在根据处理模块503的处理结果对磁盘阵列进行读 写的过程中,若处理模块503根据对所述数据结构的处理,发现当前数据块所 属条带存在有读写失败的数据块并对应记录有重建数据块所在的热备磁盘,则 根据该条带中未发生读写失败的成员磁盘和该热备磁盘进行数据读写。例如, 在读写某个条带上的数据时,若根据条块映射表发现该条带正常(即条块映射 表中的对应条带下未记录有发生读写失败的数据块),则按照常规方式进行读 写;若根据条块映射表发现该条带的状态为“冗余”或“非冗余”,则根据其 中记录的重建数据块所在的热备磁盘,通过该热备磁盘上的该条带上的数据块 和磁盘阵列中该条带中未发生读写失败的数据块进行数据读写;若根据条块映 射表发现该条带的状态为“失效”,则返回读写失败响应。

数据结构维护模块502,用于根据处理模块503的指示维护该数据结构, 包括:当磁盘阵列发生读写失败时,在该数据结构中记录发生读写失败的数据 块所属的条带和所在的成员磁盘;以及,在读写模块501将重建数据块写入热 备磁盘后,在该数据结构中记录该重建数据块所属的条带和所在的成员磁盘以 及该热备磁盘,并记录磁盘阵列各条带发生读写失败的数据块数量。

处理模块503,用于当磁盘阵列发生读写失败时,统计该条带中发生读写 失败的数据块数量;若该条带中发生读写失败的数据块数量未超过热备磁盘数 量,则指示数据重建模块504根据磁盘阵列校验算法重建发生读写失败的数据 块并将数据重建模块504所重建的数据块通过读写模块501写入热备磁盘的对 应条块,以及指示数据结构维护模块502在该数据结构中记录该重建数据块所 属的条带和所在的成员磁盘以及该热备磁盘;若该条带中发生读写失败的数据 块数量已超过热备磁盘数量,但未超过一个条带所允许的发生读写失败的数据 块的最大数量,则指示数据重建模块504根据磁盘阵列校验算法重建发生读写 失败的数据块;若该条带中发生读写失败的数据块数量已超过热备磁盘数量, 且超过一个条带所允许的发生读写失败的数据块的最大数量,则指示数据结构 维护模块502在所述数据结构中设置所述条带失效,并可进一步发送读写失败 响应。具体地,处理模块503可将读写失败响应返回给数据读写请求的发起者 (如相关业务模块),还可发送给显示设备进行显示,或者根据读写失败响应 生成响应告警信息并发送给显示设备进行显示,以使系统管理员通过显示设备 所显示输出的内容及时发现磁盘阵列存在的问题,并及时采取相应措施。

处理模块503在统计条带中发生读写失败的数据块数量时,可通过查询数 据结构中记录的数据进行统计(如图5中的虚线所示);在数据结构维护模块 记录有磁盘阵列各条带发生读写失败的数据块数量时,也可通过数据结构维护 模块502获得统计值。

数据重建模块504,用于按照处理模块503的指示,根据磁盘阵列校验算 法重建数据块,并将重建数据块通过读写模块501写入热备磁盘。处理模块503 在指示数据重建模块504进行数据块重建时,可在指示中携带条块等参数,数 据重建模块504可根据该参数确定重建哪个条块以及将重建数据块写入热备磁 盘的哪个条块。

其中,处理模块503的一种结构可如图6A所示,包括:失败处理单元602、 统计单元603、第一判断单元604,其中:

失败处理单元602,用于当磁盘阵列发生读写失败时,指示数据结构维护 模块502在所述数据结构中记录发生读写失败的数据块所属的条带和所在的成 员磁盘,并指示统计单元603在数据结构维护模块502记录发生读写失败的数 据块所属的条带和所在的成员磁盘后,统计该条带中发生读写失败的数据块数 量;

统计单元603,用于根据所述失败处理单元602的指示,在数据结构维护 模块502记录发生读写失败的数据块所属的条带和所在的成员磁盘后,统计该 条带中发生读写失败的数据块数量,如前所述,统计单元603可通过查询数据 结构或根据数据结构维护模块502进行统计;统计单元603在统计出发生读写 失败的数据块数量后,触发第一判断单元604进行处理;

第一判断单元604,用于当统计单元603统计出的数据块数量未超过热备 磁盘数量时,指示数据重建模块504重建发生读写失败的数据块,并指示数据 结构维护模块502在读写模块501将数据重建模块504所重建的数据块写入热 备磁盘后,在所述数据结构中记录该重建数据块所属的条带和所在的成员磁盘 以及该热备磁盘;当统计单元603统计出的数据块数量已超过热备磁盘数量, 但未超过一个条带所允许的发生读写失败的数据块的最大数量时,指示数据重 建模块504重建发生读写失败的数据块;当统计单元603统计出的数据块数量 已超过热备磁盘数量,且超过一个条带所允许的发生读写失败的数据块的最大 数量时,指示数据结构维护模块502将该条带标记为失效,直接返回读写失败 响应。

处理单元503的另一种结构可如图6B所示,即在图6A所示的结构的基 础上增加第二判断单元606。相应的,统计单元603在磁盘阵列发生读写失败 时,根据数据结构维护模块502的记录统计发生读写失败的条带数量;第二判 断单元606判断统计单元603统计出的发生读写失败的条带数量是否达到设定 阈值,若判断发生读写失败的条带数量达到设定阈值,则设置该磁盘阵列失效, 进一步的,第二判断单元606可讲磁盘阵列失效的信息输出给显示设备进行显 示输出;若判断发生读写失败的条带数量未达到设定阈值,则指示第一判断单 元603进行处理。第一判断单元603的具体处理过程如前所述,此处略。

进一步的,在图6A或6B所示的处理模块503中还可包括第三判断单元 607。图6C示出了在图6A的基础上增加第三判断单元607的示意图,该第三 判断单元用于判断是否第一次将重建数据块写入热备磁盘中的相应条块(可根 据数据结构维护模块502的记录,或者根据数据结构维护模块502所维护的数 据结构进行判断),若是,则指示读写模块501将本次发生读写失败的数据块 所在成员磁盘中未发生读写失败的各条带的数据块对应写入该热备磁盘中的 相应条块;以及,当向该成员磁盘再次写入数据时,还根据所述数据结构或根 据数据结构维护模块502的记录,判断热备磁盘中的对应条块是否存储有该成 员磁盘的数据,并在判断为是时,指示读写模块501向该热备磁盘中的该条块 写入相同的数据。如果判断为否,则说明热备磁盘中的对应条块存储有其它成 员磁盘的重建数据块,此种情况下,不重写热备磁盘中的该条块。

进一步的,上述磁盘阵列管理器中的数据重建模块504还可在接收到使用 热备磁盘替换发生读写失败的磁盘并增加新的热备磁盘进行磁盘阵列重建的 指示后,根据所述数据结构,指示读写模块501将原热备磁盘中除该被替换成 员磁盘以外的其它成员磁盘的数据写入新的热备磁盘中的相应条块,在该新的 热备磁盘的其余条块中写入除该被替换成员磁盘以外的一个发生读写失败的 成员磁盘的相应条带的数据;根据所述数据结构,指示读写模块501将被替换 成员磁盘中未发生读写失败的数据块写入原热备磁盘中的相应条带;以及,在 将原热备磁盘替换被替换成员磁盘后,将被替换成员磁盘踢出磁盘阵列。

如图7A所示,数据重建模块504具体包括:接收单元701、重建单元703、 踢盘处理单元704,其中:

接收单元701,用于接收处理模块503发出的重建指示。该重建指示包括 磁盘错误数据块重建指示或磁盘阵列重建指示。

进一步地,当所述重建指示为磁盘错误数据块指示时,该指示中可以包含 以下参数:重建条带的编号、错误磁盘的编号、重建错误条块的目标热备磁盘 的编号等,以便数据重建模块504可根据该等参数确定重建哪个条块以及将重 建数据块写入热备磁盘的哪个条块。

当所述重建指示为磁盘阵列重建指示时,该指示中可包含以下参数:被替 换的成员磁盘的编号(该参数可选),新的热备磁盘的编号,以及新的与热备 磁盘对应的成员磁盘的编号,该新的与热备磁盘对应的成员磁盘可以是原磁盘 阵列中除当前被替换的成员磁盘以外的一个存在坏块的磁盘,为保证数据可靠 性,该磁盘上应没有失效状态的数据块。用户可通过与磁盘阵列管理器的处理 模块503连接的输入设备发出磁盘阵列重建指示,处理模块503在接收到磁盘 阵列重建指示后,向接收单元701发送磁盘阵列重建指示。

重建单元703,用于根据接收单元701接收到的具体重建指示,进行磁盘 错误数据块重建或者进行磁盘阵列的重建,具体地,

当重建指示为磁盘上错误数据块重建,则重建单元703根据磁盘阵列校验 算法重建数据块,由于在重建过程在前面已做详细描述,在此略。

当重建指示为使用热备磁盘替换发生读写失败的磁盘并增加新的热备磁 盘进行磁盘阵列重建的指示时,则重建单元703根据所述数据结构或数据结构 维护模块503的记录,指示读写模块501将原热备磁盘中除该被替换成员磁盘 以外的其它成员磁盘的数据写入新的热备磁盘中的相应条块,在该新的热备磁 盘的其余条块中写入除该被替换成员磁盘以外的一个发生读写失败的成员磁 盘的相应条带的数据(如可根据磁盘阵列重建指示中的与热备磁盘对应的成员 磁盘的编号来确定该“除该被替换成员磁盘以外的一个发生读写失败的成员磁 盘”);以及,根据所述数据结构或数据结构维护模块503的记录,指示读写模 块501将被替换成员磁盘中未发生读写失败的数据块写入原热备磁盘中的相应 条带;

踢盘处理单元704,用于在将原热备磁盘替换被替换成员磁盘后,将被替 换成员磁盘踢出磁盘阵列。具体的,重建单元703完成磁盘阵列重建后可指示 踢盘处理单元704进行踢盘处理。

进一步地,如图7B所示,数据重建模块504还可进一步包括选择单元702, 用于在接收单元701接收到磁盘阵列重建指示后,在该指示中没有携带被替换 的成员磁盘的编号的情况下,根据所述数据结构或数据结构维护模块502的记 录,选择出发生读写失败的数据块最多的成员磁盘作为被替换成员磁盘;如果 该指示中包含有被替换的成员磁盘的编号,则选择单元702可根据该参数选择 被替换成员磁盘。选择单元702将选择出的被替换成员磁盘的编号通知重建单 元703以便重建单元703进行磁盘阵列重建。

综上所述,本发明实施例通过优化数据存储系统,提高了对磁盘介质错误 进行容忍的程度,降低磁盘发生介质错误后磁盘阵列失效的概率,更好的贴近 监控存储的用户需求,具体的,对于RAID5来说:

(1)允许磁盘阵列中存在多于一块发生介质错误的磁盘,只要磁盘阵列 中任意条带不超过2块条块发生介质错误,且磁盘阵列能够使用一块热备磁盘, 则保证数据的冗余性;

(2)允许磁盘阵列中存在多于一块发生介质错误的磁盘,只要磁盘阵列 中任意条带不超过2块条块发生介质错误,即使磁盘阵列没有热备磁盘可用的 情况下,仍然保证系统继续提供数据存储服务,但不保证数据的冗余性;

(3)上述优化是在阵列没有热备磁盘可用的情况下进行介质错误容忍, 当有热备磁盘可用时,仍然可以选择在重建后踢盘。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明 可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很 多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上 或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机 软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以 是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述 的方法。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通 技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰, 这些改进和润饰也应视本发明的保护范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号