一种Raid5阵列读IO失败的修复方法和装置的制作方法

文档序号:6384550阅读:879来源:国知局
专利名称:一种Raid5阵列读IO失败的修复方法和装置的制作方法
技术领域
本发明涉及存储阵列技术,尤其涉及Raid 5阵列读IO失败的修复方法和装置。
技术背景
传统的RAID5阵列在降级模式(阵列的单个磁盘损坏)下,由于条带不再具有数据冗余保护的能力,磁盘读错误的容错机制较弱,因而会出现如下问题如果在阵列重建过程中,重建流程对某个磁盘发生读错误、或者外部获取存储数据的业务对磁盘发生读错误,会造成磁盘从阵列中踢出、重建中止、阵列不可用等问题;如果处于降级状态的阵列因为系统缺乏热备盘等客观原因而尚未进入重建状态,此时外部业务对某个磁盘发生读错误,也将造成该磁盘从阵列中踢出、阵列不可用的问题。
RAID5阵列在监控存储的实际应用中,如果出现上述问题,大量的数据存储业务将会终端,对用户来说是难以接受的。发明内容
有鉴于此,本发明的目的是提供一种Raid5阵列读IO失败的修复方法和装置。
为实现上述目的,本发明提供技术方案如下
一种Raid5阵列读IO失败的修复方法,该方法应用于降级的Raid5阵列,该方法包括:A、将失败的读IO置于失败修复线程队列;B、针对失败修复线程队列中所述失败的读 10,构造内容为无效数据的写IO并执行该写IO操作,该写IO的起始位置、大小与所述失败的读IO相同;C、该写IO成功后在所述失败的读IO的数据缓存中写入所述无效数据,返回该读IO成功。
优选地,在步骤B之前进一步包括步骤D1、判断失败的读IO读取的是否为索引区,如果是,则返回读IO失败,如果否,则执行步骤B。
优选地,步骤C进一步包括如果所述写IO失败,则返回所述读IO失败。
优选地,在步骤Dl之前进一步包括步骤D2、给所述失败的读IO设置标志,用以表示该读IO经过失败修复处理;在步骤A之前进一步包括步骤D3、判断所述失败的读IO 是否设置有经过失败修复处理的标志,如果没有,执行步骤A ;如果有,则进入Raid 5阵列正常处理流程。
优选地,该步骤D3进一步包括在所述失败的读IO没有设置经过失败修复处理标志的情况下判断所述读IO失败是否由扇区损坏导致,如果是,执行步骤A ;如果否,进入 Raid 5阵列正常处理流程。
基于相同的构思,本发明还提供了一种Raid5阵列读IO失败的修复装置,该装置应用于降级的Raid5阵列,该装置包括修复准备模块和修复模块。
修复准备模块,用于将失败的读IO置于失败修复线程队列;
修复模块,用于针对失败修复线程队列中所述失败的读10,构造内容为无效数据的写IO并执行该写IO操作,该写IO的起始位置、大小与所述失败的读IO相同;该写IO成功后在所述失败的读IO的数据缓存中写入所述无效数据,返回该读IO成功。
该修复准备模块进一步用于对失败修复线程队列中的失败的读IO进行判断,判 断其读取的是否为索引区,如果是,不执行修复处理,如果否,由修复模块执行修复处理。
该修复模块在所述写IO失败时返回所述读IO失败。
该修复准备模块还用于对失败修复线程队列中的失败的读IO设置标志,用以表 示该读IO经过失败修复处理;
该修复准备模块在将失败的读IO置于失败修复线程队列前,判断所述失败的读 IO是否设置有经过失败修复处理的标志,如果没有,将该失败的读IO置于失败修复线程队 列;如果有,则进入Raid 5阵列正常处理流程。
该修复准备模块进一步用于在所述失败的读IO没有设置经过失败修复处理标志 的情况下判断所述读IO失败是否由扇区损坏导致,如果是,将该失败的读IO置于失败修复 线程队列;如果否,进入Raid 5阵列正常处理流程。
与现有技术相比,本发明实现了对降级模式RAID5阵列的录像数据区读错误的即 时修复机制。


图I是本发明实施例的流程图。
图2是本发明实施例的另一流程图。
图3是本发明实施例的第三流程图。
图4是本发明装置的逻辑结构图。
具体实施方式
仔细研究监控业务的特点可以发现对于监控的存储业务来说,磁盘出现少量坏扇 区的情况下,丢失一部分老的视频录像数据是可以接受的,因为视频监控数据虽然是海量 的,但有很多视频信息其实是重复无用的,比如某个摄像头采集到的画面可能数个小时没 有变化,或者变化很少。磁盘出现少量坏扇区但是在磁盘仍旧可以正常使用的情况下,需要 采用即时有效的错误处理机制,避免这种情况下的磁盘从阵列中踢出、重建中止、阵列不可 用等问题,保证新的录像数据可以正常存储到阵列中。为此,本发明提出了一种用于降级 Raid5阵列的读IO失败修复方法,该方法包括以下步骤
步骤A、将失败的读IO置于错误修复线程队列;
步骤B、针对错误修复线程队列中所述失败的读10,构造内容为无效数据的写IO 并执行该写10,该写IO的起始位置、大小与所述失败的读IO相同;
步骤C、在所述失败的读IO的数据缓存中写入所述无效数据,返回该读IO成功的信息。
处于降级状态的Raid阵列,当发生读IO失败时,将不立即反馈读失败信息,而是 针对读IO所指向的逻辑地址构造新的写IO命令,该新的写IO命令利用磁盘配备的坏扇区 重分配机制/磁盘坏块重映射机制,将无效数据写入到逻辑地址和上述读IO对应的逻辑地 址一致,但物理空间和上述读IO对应的物理空间不一致的扇区上。并且构造的该无效数据 作为实际读到的数据写入读缓存中。这样从处理流程上来看,本次读IO操作是成功的,虽然读到的数据本身和真实的数据不一致的(扇区的损坏导致真实数据丢失了)。但是读IO 操作的成功解决使得坏扇区所在磁盘不会被从阵列中踢出、阵列不会不可用,如果在重建 的话,重建也不会中止。
以下进一步结合附图详细描述实施例。
参图1,降级模式的RAID5阵列出现读失败10,将该读失败IO挂入错误修复线程 的IO队列。
S11、判断该读IO失败是否是扇区损坏导致;且该读失败IO没有经过失败修复处理。
S12、如果是,则将该失败的读IO挂入错误修复线程的IO队列,以进行失败修复。
S13、如果否,按照RAID5现有的处理流程进行后续处理。
参见图2,错误修复线程对读失败IO的修复流程。
S21、取出所述错误修复线程IO队列中的读失败10。
S22、给该读失败IO置上失败修复处理的标志位。
S23、判断该读失败IO读取的条带是否为索引区。
S24、如果是索引区,返回读失败10,结束对该读失败IO的失败修复。
S25、如果不是索引区,构造写10,该写IO的起始地址、长度与该读失败IO相同,该 写IO的内容为全O。
参见图3,图3为修复写IO的响应流程
S31、判断修复写IO是否写成功。
S32、如果写成功,将上述读失败IO的数据缓存进行清0,返回读成功信息。
S33、如果没有写成功,以读失败的方式进行返回。
图I 图3的处理流程展示了对一个读失败IO的修复流程。针对一个降级的 RAID5阵列,当出现读IO失败的时候,不立即反馈读IO失败使得磁盘被踢出、重建被中止, 而是针对该失败的读IO进行修复处理。读IO失败有多种原因,其中磁盘的扇区损坏是一 种读IO失败的原因。本发明主要是针对该原因导致的读IO失败进行修复处理。当由于坏 扇区导致读IO失败时,会反馈扇区损坏的错误码,据此就可以判断是由于扇区损坏导致读 IO失败的。在这种情况下,就可以对该读失败IO进行修复了。先将该读失败IO挂入失败 修复线程队列中,唤醒对该读IO的修复处理。由于在修复处理的过程中会存在修复不成功 的情况,在修复不成功时仍然返回读IO失败,但是该失败的读IO已经经过修复处理了,所 以无需再一次进行修复处理,否则就进入死循环了。所以在将读失败IO挂入失败修复线程 队列中之前还需判断该读IO失败是否已经经过失败修复处理,如果没有再将其置入失败 修复线程队列中,如果已经经过失败修复了,那么就只能按照现有Raid阵列的处理流程进 行处理了,如进行踢盘、中止重建等。
对于失败修复线程队列中的读失败10,在对其执行进一步修复处理前,给它置上 经过失败修复处理的标志位,因为后续的进一步修复处理可能会发生修复失败的状况。设 置上述标志位后,对该失败读IO读取的存储区域进行判断是数据区还是索引区,如果是 索引区将不再执行进一步的修复处理,认为修复失败,直接返回上述读IO为失败的响应。 如果是数据区的话,继续执行修复流程构造写IO (可以称为修复写10),起始地址、长度与 该读失败IO相同,数据内容为全O。之所以判断读取的是索引区还是数据区,主要原因在于索引区损坏将导致单个或者多个磁盘的所有监控录像无法使用。如果采用将写入无效 数据到索引区的修复方案,还是会导致上述问题。由于磁盘具有坏扇区重分配机制,有的存 储设备还支持自身的磁盘坏块重映射机制,所以在执行对某一逻辑地址的写IO时,在该逻 辑地址当前对应的扇区损坏时会自动分配新的扇区与该逻辑地址对应,该写IO实际将对 新分配的扇区执行写操作。写入的内容属于无效数据,可以是全O的数据,也可以是其它数 据。上述构造的写IO在执行的时候,一般情况下都会成功,但是不排除一些其它导致失败 的情况。如果没有写成功,说明针对上述读IO的修复就失败了,返回读IO失败。如果写成 功了,表明针对上述读IO的修复成功了,返回读IO成功。坏的扇区就自动被从存储业务中 隔离了,并且是即时的隔离(后续针对原先坏扇区的读IO或者写IO就变成了对上述新分配 扇区的读写操作)。修复成功后,还需要在该读IO的数据缓存中写入构造的无效数据,比如 全O。执行上述写IO的目的并不是要真正写入数据,只是为了隔离坏扇区,使得原本失败的 读IO能成功而不至于产生踢盘等后果,达到所谓的修复目的。虽然损坏扇区中的数据确实 已经丢失了,但是少量存储数据的丢失有的时候并不会对实际的业务产生影响,比如视频 存储业务。
执行了无效数据写IO的条带,需要通过后续机制更新条带校验和与数据的一致 性如果该读IO是外部业务所引发的,并且该读IO所针对的条带已经完成了重建,则需要 重新计算条带校验和,并将新校验和写入磁盘。如果读IO是外部业务引发的,并且该读IO 所针对的条带还没有开始重建,则在后续的重建过程中自然会恢复条带校验和与数据的一 致性。如果该读IO是重建所引发的,则直接利用该无效数据和其它条带的数据计算校验和 写入磁盘,保证检验和与数据的一致性。
基于相同的构思,本发明还提供了一种Raid5阵列读IO失败的修复装置,该装置 应用于降级的Raid5阵列,该装置包括修复准备模块和修复模块。
修复准备模块,用于将失败的读IO置于失败修复线程队列;
修复模块,用于针对失败修复线程队列中所述失败的读10,构造内容为无效数据 的写IO并执行该写IO操作,该写IO的起始位置、大小与所述失败的读IO相同;该写IO成 功后在所述失败的读IO的数据缓存中写入所述无效数据,返回该读IO成功。
该修复准备模块进一步用于对失败修复线程队列中的失败的读IO进行判断,判 断其读取的是否为索引区,如果是,不执行修复处理,如果否,由修复模块执行修复处理。
该修复模块在所述写IO失败时返回所述读IO失败。
该修复准备模块还用于对失败修复线程队列中的失败的读IO设置标志,用以表 示该读IO经过失败修复处理;
该修复准备模块在将失败的读IO置于失败修复线程队列前,判断所述失败的读 IO是否设置有经过失败修复处理的标志,如果没有,将该失败的读IO置于失败修复线程队 列;如果有,则进入Raid 5阵列正常处理流程。
该修复准备模块进一步用于在所述失败的读IO没有设置经过失败修复处理标志 的情况下判断所述读IO失败是否由扇区损坏导致,如果是,将该失败的读IO置于失败修复 线程队列;如果否,进入Raid 5阵列正常处理流程。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种Raid5阵列读IO失败的修复方法,该方法应用于降级的Raid5阵列,其特征在于,该方法包括 A、将失败的读IO置于失败修复线程队列; B、针对失败修复线程队列中所述失败的读10,构造内容为无效数据的写IO并执行该写IO操作,该写IO的起始位置、大小与所述失败的读IO相同; C、该写IO成功后在所述失败的读IO的数据缓存中写入所述无效数据,返回该读IO成功。
2.如权利要求I所述的方法,其特征在于,在步骤B之前进一步包括步骤D1、判断失败的读IO读取的是否为索引区,如果是,则返回读IO失败,如果否,则执行步骤B。
3.如权利要求2所述的方法,其特征在于,步骤C进一步包括如果所述写IO失败,则返回所述读IO失败。
4.如权利要求3所述的方法,其特征在于,在步骤Dl之前进一步包括 步骤D2、给所述失败的读IO设置标志,用以表示该读IO经过失败修复处理; 在步骤A之前进一步包括 步骤D3、判断所述失败的读IO是否设置有经过失败修复处理的标志,如果没有,执行步骤A ;如果有,则进入Raid 5阵列正常处理流程。
5.如权利要求4所述的方法,其特征在于,所述步骤D3进一步包括在所述失败的读IO没有设置经过失败修复处理标志的情况下判断所述读IO失败是否由扇区损坏导致,如果是,执行步骤A ;如果否,进入Raid 5阵列正常处理流程。
6.一种Raid5阵列读IO失败的修复装置,该装置应用于降级的Raid5阵列,其特征在于,该装置包括 修复准备模块,用于将失败的读IO置于失败修复线程队列; 修复模块,用于针对失败修复线程队列中所述失败的读10,构造内容为无效数据的写IO并执行该写IO操作,该写IO的起始位置、大小与所述失败的读IO相同;该写IO成功后在所述失败的读IO的数据缓存中写入所述无效数据,返回该读IO成功。
7.如权利要求6所述的装置,其特征在于,所述修复准备模块进一步用于对失败修复线程队列中的失败的读IO进行判断,判断其读取的是否为索引区,如果是,不执行修复处理,如果否,由修复模块执行修复处理。
8.如权利要求7所述的装置,其特征在于,修复模块在所述写IO失败时返回所述读IO失败。
9.如权利要求8所述的装置,其特征在于,修复准备模块还用于对失败修复线程队列中的失败的读IO设置标志,用以表示该读IO经过失败修复处理; 该修复准备模块在将失败的读IO置于失败修复线程队列前,判断所述失败的读IO是否设置有经过失败修复处理的标志,如果没有,将该失败的读IO置于失败修复线程队列;如果有,则进入Raid 5阵列正常处理流程。
10.如权利要求9所述的装置,其特征在于,所述修复准备模块进一步用于在所述失败的读IO没有设置经过失败修复处理标志的情况下判断所述读IO失败是否由扇区损坏导致,如果是,将该失败的读IO置于失败修复线程队列;如果否,进入Raid 5阵列正常处理流程。
全文摘要
本发明提供一种Raid5阵列读IO失败的修复方法,该方法应用于降级的Raid5阵列,包括A、将失败的读IO置于失败修复线程队列;B、针对失败修复线程队列中所述失败的读IO,构造内容为无效数据的写IO并执行该写IO操作,该写IO的起始位置、大小与所述失败的读IO相同;C、该写IO成功后在所述失败的读IO的数据缓存中写入所述无效数据,返回该读IO成功。本发明实现了对降级模式RAID5阵列的录像数据区读错误的即时修复机制。
文档编号G06F11/07GK102981921SQ201210550368
公开日2013年3月20日 申请日期2012年12月17日 优先权日2012年12月17日
发明者成浩, 丁强 申请人:浙江宇视科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1