专利名称:磁盘热拔除的处理方法及装置的制作方法
技术领域:
本发明涉及计算机技术领域,尤其涉及多控制器的磁盘阵列中的一种磁盘热拔除
的处理方法和装置。
背景技术:
磁盘阵列(Disk Array)是由硬盘控制器来控制多个硬盘的相互连接,使多个硬盘 的读写同步,减少错误,增加效率和可靠度的技术。其中,由两个控制器来控制多个磁盘的 磁盘阵列,称为双控磁盘阵列。通常,磁盘阵列是指廉价冗余磁盘阵列(Redundant Arrayof Inexpensive Disks,简称为RAID),其中,RAID是磁盘阵列在技术上实现的理论标准,其目 的在于减少错误、提高存储系统的性能与可靠度。具体而言,RAID是一种将多块独立的硬 盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘 更高的存储性能和提供数据备份技术。组成磁盘阵列的不同方式决定了RAID级别(RAID Levels)。目前,RAID的级别包括0、 1、0+1、2、3、4、5、6和7,其中,RAID0级别为非冗余RAID 级别。 对于硬盘来说,因为它的数据线和电源线是分开的,所以允许用户在不关闭系统、
不切断电源的情况下拔除或者更换损坏硬盘,该过程称为磁盘热拔除。支持热拔除是磁盘
阵列的基本功能之一。在双控磁盘阵列中,处于正在读写状态下的阵列,拔除一块磁盘后,
触发硬件相关驱动和双控相关驱动,并将磁盘失效通知到逻辑设备驱动层。与此同时,正在
读写的逻辑设备因找不到物理磁盘而发送磁盘失效报告,因此,逻辑设备驱动层将同时接 收到三个事件两个控制器的通知事件和读写出错事件。 在现有的技术中,由于只给出了如何发现磁盘热拔除的技术,而没有对热拔除磁 盘而引起的一系列事件及状态进行逻辑处理的技术,从而,使得系统对灾难的及时恢复能 力较弱,缺乏扩展性和灵活性。
发明内容
有鉴于此,本发明提供了一种磁盘热拔除的处理方法和装置,用以解决现有技术 在磁盘热拔除后由于没有对热拔除磁盘所引起的事件及状态进行逻辑处理,而导致系统对 灾难的及时恢复能力较弱的问题。 根据本发明的一个方面,提供了一种磁盘热拔除的处理方法,该方法用于在多控 制器的磁盘阵列中,当处于正在读写状态下的阵列被拔除一块磁盘后,对磁盘热拔除事件 进行处理。 根据本发明的磁盘热拔除的处理方法包括在逻辑设备驱动层接收到磁盘失效报 告后,在确定磁盘失效报告来自于主控制器,且当前逻辑设备处于重配置状态的情况下,判 断当前逻辑设备是否为冗余廉价冗余磁盘阵列RAID级别,如果是,则将当前被拔出磁盘对 应的磁盘组成员设置为故障状态,并继续进行重配置操作;否则,将当前被拔出磁盘所在磁 盘组的所有逻辑设备设置为故障状态,停止重配置操作,并将当前逻辑设备的状态信息发送给对端控制器。 根据本发明的另一个方面,提供了一种磁盘热拔除的处理装置,该装置应用在多 控制器的磁盘阵列中。 根据本发明的磁盘热拔除的处理装置包括接收模块、第一判断模块、第二判断模 块、第三判断模块、配置模块和发送模块。其中,接收模块,用于接收磁盘失效报告;第一判 断模块,用于判断磁盘失效报告是否来自于主控制器事件;第二判断模块,用于判断当前逻 辑设备是否处理重配置状态;第三判断模块,用于判断当前逻辑设备是否为冗余RAID级 别;配置模块,用于在第一判断模块、第二判断模块和第三判断模块的判断结果均为是情况 下,将当前被拔出磁盘对应的磁盘组成员设置为故障状态,执行重配置操作;在第一判断模 块和第二判断模块的判断结果为否、第三判断模块的判断结果为否的情况下,将当前被拔 出磁盘所在磁盘组的所有逻辑设备设置为故障状态,停止重配置操作;发送模块,用于将当 前逻辑设备的状态信息发送给对端控制器。 通过本发明的上述至少一个方案,通过对热拔除磁盘所引起的一系列事件及状态 进行逻辑处理,可以提高磁盘系统对灾难的及时恢复能力,并增强其扩展性和灵活性。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变 得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明 书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实 施例一起用于解释本发明,并不构成对本发明的限制。在附图中
图1是磁盘阵列控制器的结构示意图;
图2是逻辑设备驱动的结构示意图; 图3是本发明实施例的磁盘热拔除的处理方法的流程图;
图4是根据本发明实施例的热拔除的处理装置的结构示意图;
图5是根据本发明优选实施例的热拔除的处理装置的结构示意图;
图6是根据本发明另一优选实施例的热拔除的处理装置的结构示意图;
图7是根据本发明实施例实现双控磁盘阵列中磁盘热拔除的处理的流程图。
具体实施方式
功能概述 在多控制器中,同一磁盘被拔出后,每个控制器都会检测到磁盘被拔出,都通知到 逻辑设备层。所以,当正在读写的磁盘阵列,拔出一块磁盘后,逻辑设备驱动层,会接收到三 种磁盘失效报告。为了避免逻辑设备多次处理这三种磁盘失效报告,影响逻辑设备的处理 结果,本发明实施例提供了一种磁盘热拔除的处理方案,用于在多控制器的磁盘阵列中,当 处于正在读写状态下的阵列被拔除一块磁盘后,对磁盘热拔除事件进行处理。在本发明实 施例中,通过设置逻辑设备的成员状态和互斥锁机制,解决逻辑设备多次处理上述三种磁 盘失效报告而影响逻辑设备的处理结果的问题。在本发明实施例中,首先,对于多个控制 器,逻辑设备只接收主控制器的磁盘失效报告,对于从控的失效报告,直接返回,等主控处理完成后,通知从控,并同步状态。对于主控上的第一次磁盘失效报告进入互斥锁内,将失 效磁盘置为故障,并将逻辑设备置为需重建状态。当由拔出同一磁盘而引起的第二次失效 报告进入后,判断磁盘是故障状态或正在重建状态,直接返回。 在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。 以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实
施例仅用于说明和解释本发明,并不用于限定本发明。 在对本发明实施例提供的技术方案进行说明之前,为了便于理解,先对磁盘阵列 控制器及逻辑设备驱动进行简单介绍。 图l是磁盘阵列控制器的结构示意图,如图l所示,磁盘阵列控制器包括硬件和软 件两部分,硬件支持的环境有I0P342处理器,X86、PPC等多核多路系统或多处理节点系统, 支持DMA、 X0R等硬件加速器;软件的体系结构支持li皿x操作系统,在li皿x内核的基础 上,实现对磁盘阵列的数据处理,所有处理都在内核态实现。软件主要包括硬件相关驱动, 双控相关驱动,逻辑设备驱动和cache相关处理等。 图2是逻辑设备驱动的结构示意图,如图2所示,逻辑设备驱动主要分为以下部 分磁盘管理、磁盘组管理和逻辑设备的处理,其中,阵列中的多个磁盘组成磁盘组,逻辑设 备建立在磁盘上,磁盘组为逻辑设备分配空间。 根据本发明实施例,首先提供了一种磁盘热拔除的处理方法,用于在多控制器的 磁盘阵列中,当处于正在读写状态下的阵列被拔除一块磁盘后,对磁盘热拔除事件进行处理。 图3是本发明实施例提供的磁盘热拔除的处理方法的流程图,如图3所示,在具体 实施过程中,在逻辑设备驱动层接收到磁盘失效报告后,该方法主要包括以下步骤
步骤301,确定磁盘失效报告来自于主控制器,且当前逻辑设备处于重配置状态;
步骤302,判断当前逻辑设备是否为冗余RAID级别,如果是,则执行步骤303 ;否 则,执行步骤304; 步骤303,将当前被拔出磁盘对应的磁盘组成员设置为故障状态,并继续进行重配 置操作; 步骤304,将当前被拔出磁盘所在磁盘组的所有逻辑设备设置为故障状态,停止重 配置操作; 步骤305,将当前逻辑设备的状态信息发送给对端控制器。 在具体实施过程中,在确定在确定磁盘失效报告来自主控制器时,如果当前逻辑 设备不处于重配置状态,则上述方法还可以包括以下步骤 步骤l,判断当前逻辑设备是否为冗余RAID级别,如果否,则将磁盘组的所有逻辑 设备设置为故障状态,并结束流程,否则,执行步骤2 ; 在具体实施过程中,在结束流程之前,还可以将当前逻辑设备的状态信息发送给 对端控制器。 步骤2,增加互斥锁,判断磁盘组是否处于正常状态,如果是,则修改磁盘组的状态 为故障状态,并将当前被拔出磁盘对应的磁盘组成员设置为故障状态,增加磁盘组的失效 磁盘的个数,执行步骤4 ;否则,执行步骤3 ; 步骤3,判断磁盘组中失效磁盘的状态,如果失效磁盘的状态为磁盘正常或磁盘正
6在重建状态,则执行步骤6 ;否则,增加磁盘组的失效磁盘个数,执行步骤4 ; 步骤4,判断磁盘组的失效磁盘个数是否超过预设值,如果是,将磁盘组上的所有
逻辑设备置为故障状态,执行步骤6 ;否则,执行步骤5 ; 步骤5,释放互斥锁,将磁盘组的状态修改为待重建状态; 步骤6 ,释放所述互斥锁,结束流程。 在具体实施过程中,在执行上述步骤5之后,还可以进一步查询系统中是否有能
够使用的热备盘,如果是,则将热备盘加入到磁盘组,并将磁盘组的成员设置为正在重建状
态,对磁盘组进行重配置;否则,将当前逻辑设备置为降级运行模式,结束流程。 并且,在对磁盘组进行重配置完成后,上述磁盘组可以进一步更新该磁盘组的配
置信息,并将该磁盘组的状态以及其成员的状态发送给对端控制器。 根据本发明实施例,还提供了一种热拔除的处理装置,该装置应用于多控制器的 磁盘阵列中。 图4是根据本发明实施例的热拔除的处理装置的结构示意图,如图4所示,上述装 置包括接收模块40、第一判断模块41、第二判断模块42、第三判断模块43、配置模块44和 发送模块45,其中,接收模块40,用于接收磁盘失效报告;第一判断模块41,用于判断磁盘 失效报告是否来自于主控制器事件;第二判断模块42,用于判断当前逻辑设备是否处理重 配置状态;第三判断模块43,用于判断当前逻辑设备是否为冗余RAID级别;配置模块44, 用于在第一判断模块41、第二判断模块42和第三判断模块43的判断结果均为是情况下,将 当前被拔出磁盘对应的磁盘组成员设置为故障状态,执行重配置操作;在第一判断模块41 和第二判断模块42的判断结果为否、第三判断模块43的判断结果为否的情况下,将当前被 拔出磁盘所在磁盘组的所有逻辑设备设置为故障状态,停止重配置操作;发送模块45,用 于将当前逻辑设备的状态信息发送给对端控制器。 具体地,配置模块44还可以用于在第一判断模块41的判断结果为是、第二判断模 块42和第三判断模块43的判断结果为否的情况下,将磁盘组的所有逻辑设备设置为故障 状态。 具体地,图5是根据本发明优选实施例的热拔除的处理装置的结构示意图,如图5 所示,上述装置还可以进一步包括第四判断模块46、计数器47和第五判断模块48,其中,
第四判断模块46,用于在第一判断模块41和第三判断模块43的判断结果为是、第 二判断模块42的判断结果为否的情况下,判断磁盘组是否处于正常状态;上述配置模块44 还可以用于在第四判断模块46的判断结果为是情况下,将磁盘组的状态修改为故障状态, 并将当前被拔出磁盘对应的磁盘组成员设置为故障状态; 计数器47,用于计算磁盘组的失效磁盘的个数,在第四判断模块46的判断结果为 否的情况下,增加其计算的失效磁盘的个数; 第五判断模块48,用于判断计数器47的值是否超过预设值;上述配置模块44还 用于在第五判断模块48的判断结果为否的情况下,将磁盘组的状态修改为待重建状态。
具体地,图6是根据本发明另一优选实施例的热拔除的处理装置的结构示意图, 如图6所示,上述装置还可以包括查询模块49,用于在配置模块44将磁盘组的状态修改 为待重建状态之后,查询系统中是否有能够使用的热备盘;上述配置模块44还可以用于将 查询模块49查找到的热备盘加入磁盘组,并将磁盘组的成员设置为正在重建状态,对磁盘组进行重配置。 下面结合具体实施例对本发明实施例提供的技术方案的具体实现过程进行说明。
在本实施例中,将逻辑设备驱动层分为三层磁盘管理层,磁盘组管理层和逻辑设 备层,其中,磁盘管理层向磁盘阵列系统导入磁盘并管理磁盘,磁盘组管理层将多个磁盘组 成一个组,并对磁盘组作为整体进行空间管理,逻辑设备层创建在磁盘组上,从磁盘组分配 空间,实现具体的RAID的数据管理。此外,磁盘组的状态定义为G00D、FAIL、REBUILD_NEED 和REBUILDING,分别表示磁盘组正常、磁盘组故障、待重建状态和正在重建;其成员定义为 PD_0K、 PD_FAIL、 PD_REBUILDING,表示磁盘正常、磁盘故障和磁盘正在重建。
图7是本实施例中实现双控磁盘阵列中磁盘热拔除的处理的流程图。如图7所示, 在本实施例对热拔除磁盘进行处理的过程主要包括以下步骤
步骤701、磁盘组管理层接收磁盘管理层的失效报告; 步骤702,判断当前接收到的报告是否为主控制器事件,如果是,则进入步骤703, 否则,正常返回,对端控制器由本端通知,结束流程; 步骤703、判断当前的逻辑设备是否正处于变级、迁移或者扩容等重配置操作状 态,如果正在进行重配置,则进入步骤704,否则,进入步骤710 ; 步骤704、判断逻辑设备是否为冗余RAID级别,如果是RAID1、 RAIDIO、 RAID3、 RAID5、 RAID6级别,则确定该逻辑设备为冗余RAID级别,进入步骤705,否则,进入步骤 707 ; 步骤705,将被拔除磁盘对应的磁盘组成员状态置为PD_FAIL,并将逻辑设备置为 降级模式; 步骤706,继续执行重配置操作; 步骤707,如果是RAIDO,将当前被拔除磁盘所在磁盘组的所有逻辑设备置为故障 状态; 步骤708,停止重配置操作,报告重配置操作失败; 步骤709,将当前逻辑设备的状态通知到对端控制器,对端控制器处理完成状态信 息更新后,发送应答完成消息,结束流程; 步骤710、判断当前逻辑设备是否为冗余RAID级别,如果是RAID1、RAID10、RAID3、 RAID5、 RAID6级别,则确定当前逻辑设备为冗余RAID级别,进入步骤711,否则,进入步骤 722 ; 步骤711,增加互斥锁; 步骤712,判断磁盘组当前是否处于正常状态,如果为GOOD,则进入步骤713,否 则,如果磁盘组为FAIL,进入步骤721 ; 步骤713,修改磁盘组状态为FAIL,并将被拔除的磁盘对应的成员置为PD_FAIL, 增加该磁盘组的故障个数,进入步骤714 ; 步骤714、判断磁盘组的失效磁盘的个数是否大于预设值(即冗余最大个数),如 果是,则进入步骤715,否则,进入步骤717 ; 具体地,对于不同级别的冗余RAID级别,上述冗余最大个数的取值不同,例如,如 果RAIDl成员失效个数大于n-l(n为总的成员个数)、RAID10成员失效个数大于n/2、RAID5 成员失效个数大于1、 RAID6成员失效个数大于2,则认为磁盘组上失效的磁盘个数超过冗余最大个数,则进入步骤715,否则,认为磁盘组的失效个数小于冗余最大个数,则进入步骤 717。 步骤715,将磁盘组上所有逻辑设备置为FAIL(即故障状态);
步骤716,释放互斥锁,结束流程; 步骤717,释放互斥锁,将磁盘的状态设置为REBUILD_NEED,进入重建准备阶段;
步骤718,查询系统中是否有热备盘可用,如果有,则执行步骤719,否则,将逻辑 设备置为降级运行模式,并结束流程; 步骤719、将热备盘加入到磁盘组,并将磁盘组中成员置为REBUILDING,更新原数
据,并将当前磁盘组的成员设置为正在重建状态,对磁盘组进行重配置; 步骤720、重建完成后,磁盘组更新元数据,并将当前磁盘组状态及磁盘组成员状
态发送给对端控制器,对端控制器处理完成后,结束流程; 步骤721,判断热拔除报告中对应的磁盘组失效磁盘的状态,如果磁盘组中成员为 PD_OK和PD_REBUILDING,则表明正处于正常处理状态,释放互斥锁,结束流程,否则,进入 步骤713 ; 步骤722,如果逻辑设备的冗余RAID级别为RAIDO,将磁盘组上所有逻辑设备置为 FAIL状态,然后结束流程。 以上步骤完成了双控磁盘阵列中磁盘热拔除的处理的全部过程。 综上所述,借助本发明实施例提供的上述技术方案,能够保持控制器之间的配置
信息和数据的同步,还能够避免磁盘阵列的重复处理和保证冗余阵列在降级模式下继续进 行读写操作,从而,提高了磁盘阵列系统的灵活性、可靠性和安全性。 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种磁盘热拔除的处理方法,用于在多控制器的磁盘阵列中,当处于正在读写状态下的阵列被拔除一块磁盘后,对磁盘热拔除事件进行处理,其特征在于,在逻辑设备驱动层接收到磁盘失效报告后,所述方法包括在确定所述磁盘失效报告来自于主控制器,且当前逻辑设备处于重配置状态的情况下,判断所述当前逻辑设备是否为冗余RAID级别,如果是,则将当前被拔出磁盘对应的磁盘组成员设置为故障状态,并继续进行重配置操作;否则,将当前被拔出磁盘所在磁盘组的所有逻辑设备设置为故障状态,停止重配置操作,并将所述当前逻辑设备的状态信息发送给对端控制器。
2. 根据权利要求1所述的方法,其特征在于,在确定所述磁盘失效报告来自主控制器时,如果所述当前逻辑设备不处于重配置状态,则所述方法还包括判断所述当前逻辑设备是否为冗余RAID级别,如果否,则将所述磁盘组的所有逻辑设备设置为故障状态,结束流程。
3. 根据权利要求2所述的方法,其特征在于,在将所述磁盘组的所有逻辑设备设置为故障状态之后,所述方法还包括将所述当前逻辑设备的状态信息发送给对端控制器。
4. 根据权利要求2所述的方法,其特征在于,如果所述当前逻辑设备为冗余RAID级别,则所述方法还包括步骤1 ,增加互斥锁,判断所述磁盘组是否处于正常状态,如果是,则修改所述磁盘组的状态为故障状态,并将当前被拔出磁盘对应的磁盘组成员设置为故障状态,增加所述磁盘组的失效磁盘的个数,执行步骤3 ;否则,执行步骤2 ;步骤2,判断所述磁盘组中失效磁盘的状态,如果失效磁盘的状态为磁盘正常或磁盘正在重建状态,则执行步骤5 ;否则,增加所述磁盘组的失效磁盘个数,执行步骤3 ;步骤3,判断所述磁盘组的失效磁盘个数是否超过预设值,如果是,将所述磁盘组上的所有逻辑设备置为故障状态,执行步骤5 ;否则,执行步骤4 ;步骤4,释放所述互斥锁,将所述磁盘组的状态修改为待重建状态;步骤5,释放所述互斥锁,结束流程。
5. 根据权利要求4所述的方法,其特征在于,在将所述磁盘组的状态修改为待重建状态之后,所述方法还包括查询系统中是否有能够使用的热备盘,如果是,则将所述热备盘加入到所述磁盘组,并将所述磁盘组的成员设置为正在重建状态,对所述磁盘组进行重配置;否则,将所述当前逻辑设备置为降级运行模式,结束流程。
6. 根据权利要求5所述的方法,其特征在于,在对所述磁盘组进行重配置完成后,所述方法还包括所述磁盘组更新所述磁盘组的配置信息,并将所述磁盘组的状态以及所述磁盘组的成员的状态发送给所述对端控制器。
7. —种磁盘热拔除的处理装置,应用在多控制器的磁盘阵列中,其特征在于,所述装置包括接收模块,用于接收磁盘失效报告;第一判断模块,用于判断所述磁盘失效报告是否来自于主控制器事件;第二判断模块,用于判断当前逻辑设备是否处理重配置状态;第三判断模块,用于判断所述当前逻辑设备是否为冗余RAID级别;配置模块,用于在所述第一判断模块、所述第二判断模块和所述第三判断模块的判断结果均为是情况下,将当前被拔出磁盘对应的磁盘组成员设置为故障状态,执行重配置操作;在所述第一判断模块和所述第二判断模块的判断结果为否、所述第三判断模块的判断结果为否的情况下,将当前被拔出磁盘所在磁盘组的所有逻辑设备设置为故障状态,停止重配置操作;发送模块,用于将所述当前逻辑设备的状态信息发送给对端控制器。
8. 根据权利要求7所述的装置,其特征在于,所述配置模块配置模块还用于在所述第一判断模块的判断结果为是、所述第二判断模块和所述第三判断模块的判断结果为否的情况下,将所述磁盘组的所有逻辑设备设置为故障状态。
9. 根据权利要求7所述的装置,其特征在于,所述装置还包括第四判断模块,用于在所述第一判断模块和所述第三判断模块的判断结果为是、所述第二判断模块的判断结果为否的情况下,判断所述磁盘组是否处于正常状态;所述配置模块还用于在所述第四判断模块第四判断模块的判断结果为是情况下,将所述磁盘组的状态修改为故障状态,并将当前被拔出磁盘对应的磁盘组成员设置为故障状态;计数器,用于计算所述磁盘组的失效磁盘的个数,在所述第四判断模块第四判断模块的判断结果为否的情况下,增加其计算的失效磁盘的个数;第五判断模块,用于判断所述计数器计数器的值是否超过预设值;所述配置模块还用于在所述第五判断模块第五判断模块的判断结果为否的情况下,将所述磁盘组的状态修改为待重建状态。
10. 根据权利要求9所述的装置,其特征在于,所述装置还包括查询模块,用于在所述配置模块将所述磁盘组的状态修改为待重建状态之后,查询系统中是否有能够使用的热备盘;所述配置模块还用于将所述查询模块查找到的热备盘加入所述磁盘组,并将所述磁盘组的成员设置为正在重建状态,对所述磁盘组进行重配置。
全文摘要
本发明公开了一种磁盘热拔除的处理方法和装置,该方法用于在多控制器的磁盘阵列中,当处于正在读写状态下的阵列被拔除一块磁盘后,对磁盘热拔除事件进行处理,该方法包括在逻辑设备驱动层接收到磁盘失效报告后,在确定磁盘失效报告来自于主控制器,且当前逻辑设备处于重配置状态的情况下,判断当前逻辑设备是否为冗余廉价冗余磁盘阵列RAID级别,如果是,则将当前被拔出磁盘对应的磁盘组成员设置为故障状态,并继续进行重配置操作;否则,将当前被拔出磁盘所在磁盘组的所有逻辑设备设置为故障状态,停止重配置操作,并将当前逻辑设备的状态信息发送给对端控制器。根据本发明,可以提高磁盘阵列系统对灾难的恢复能力和灵活性。
文档编号G06F3/06GK101699389SQ200910209620
公开日2010年4月28日 申请日期2009年10月30日 优先权日2009年10月30日
发明者甘春闰 申请人:中兴通讯股份有限公司