一种基于软raid的磁盘坏块处理方法

文档序号:6436340阅读:474来源:国知局
专利名称:一种基于软raid的磁盘坏块处理方法
技术领域
本发明涉及一种磁盘坏块处理方法,具体涉及一种软RAID环境下的磁盘坏块处理方法,属于计算机数据存储技术领域。
背景技术
在大容量数据存储中,磁盘是广泛采用的存储介质。物理上讲,每个硬盘都有自己的“CHS”参数,即磁头数(Heads),柱面数(Cylinders)和扇区数(Sectors),每个扇区一般是512个字节。老式磁盘每个磁道的扇区数相等,利用这三个参数即可实现对任意扇区的随机访问,但这种方式外柱面的记录密度要远低于内柱面,会造成磁盘空间的浪费,已经被多数磁盘厂商所摒弃,转而采用等密度结构生产硬盘,采用这种结构后,寻址方式也改为线性寻址,即以扇区为单位进行寻址,LBA方式就是其中的一种。LBA全称是Logical Block Addressing,即逻辑块寻址,该方式从0开始为物理扇区一一编号,建立逻辑块与物理扇区之间的映射关系,从这种意义上说,块和扇区其实是对同一事物的不同称谓,只不过块的说法层次较高一些,更加适用于比较抽象的场合。
磁盘在出厂前有一个自检过程,该过程会统计并记录磁盘上存在的坏扇区,这些坏扇区在后继使用中不会被映射,也就没有对应的逻辑块地址;磁盘的可用扇区在正式使用前由操作系统按照一定规则,建立逻辑块和物理扇区之间的映射关系,以后操作系统就可以根据逻辑块地址对具体的扇区进行操作。磁盘在使用过程中,由于各种原因仍有可能导致某个逻辑块无法访问的情况,也就是产生了坏块,具体情况可以分两种一种是偶尔的读错误,经过写验证后可以修复的扇区,该逻辑块仍然有效,可以被继续使用;一种是无法修复的坏扇区,对于这种情况多数磁盘厂商采取的策略是对这个逻辑块地址进行重新映射,将该地址对应到另一块可用的备用扇区。
在坏块产生时,保证逻辑块的可用性仅仅是其中的一方面,如何恢复坏块的原有内容往往是实际应用中更为关注的话题。各种灾备方案是不错的选择,但那是更高层次的解决方案,且一般造价不菲。从底层存储的具体架构来讲,为了使存储的数据具有容错性, 提高数据存储可靠性,改善存储系统性能,一般采用各种类型的RAID进行数据存储,其全称是Redundant Arrays of Independent Disks,称作独立磁盘冗余阵列,简称磁盘阵列。比较常用的RAID有RAIDO、RAIDU RAID5、RAID6、RAIDlO等。其中RAIDO是为了单纯的提高读写性能,不具有冗余能力,RAIDl则对磁盘做了镜像,有效使用空间仅为总容量的一半。其它三种阵列分别由多个磁盘组成,它们以条带的方式向阵列中的磁盘写数据,奇偶校验数据存放在阵列中的各个磁盘上。RAID5的每个条带含有1个校验块,支持任意损坏其中一个磁盘、通过其它磁盘上的奇偶校验块来重建数据;RAID6的每个条带含有2个校验块,支持任意损坏其中两个磁盘、通过其它磁盘上的奇偶校验块来重建数据。采用RAID进行数据存储,在多数情况下可以为坏块产生时的数据重建提供解决方案。
从实现方式来讲,磁盘阵列可以分成“软件RAID”和“硬件RAID”两种。硬件RAID 是使用专门的磁盘阵列卡等硬件设备来实现的,性能要高于软件RAID,但成本也比较高;软件RAID —般是通过集成在操作系统中的功能软件实现对磁盘的管理,成本低廉,操作简单。现在的磁盘阵列厂商在开发磁盘阵列产品时,所开发的磁盘阵列一般由针对该磁盘阵列开发的存储操作系统进行控制管理。目前多数采用软RAID的磁盘阵列产品,是在对应的存储操作系统中集成RAID管理功能,用这些功能软件构建常见级别的RAID,但这些采用软 RAID的阵列产品在数据可靠性上存在一个较为普遍的问题,那就是它们无法对磁盘在使用过程中产生的坏块进行处理,无法利用RAID的特点对坏块原有内容进行数据重建,致使在磁盘产生一个坏块时就需要更换该磁盘对整个RAID进行重建,浪费了存储资源,也降低了数据存储的可靠性。发明内容
本发明的目的在于提供一种软RAID环境下的磁盘坏块处理方法,以达到在坏块产生时有条件地进行数据重建的效果。
本方法主要应用于磁盘阵列对应的存储操作系统中。该存储操作系统要求包括以下技术特征
操作系统为Linux操作系统,具备软RAID的创建、维护和删除功能;系统采用U盘作为存储介质,被制作成USB启动盘格式,制作好的U盘以配件形式安装在磁盘阵列的主板或控制器上。存储操作系统是一个层级结构,在物理硬件上依次构建了内核模式程序和用户模式程序,并应用逻辑卷管理机制对底层磁盘进行管理。本方法在内核模式下实现,是对 Linux操作系统内核驱动的修改和扩展。
该磁盘阵列,对盘阵内每个物理磁盘做了特殊处理,预留一部分磁盘空间作为备用扇区区域,并用磁盘空间最末端的一块区域存放DDF (Disk Data format是SNIA的技术, SNIA的全称是Morage Networking Industry Association,中文名称是全球网络存储工业协会,DDF是由该协会针对RAID而定义的一种标准数据结构,用来描述通用RAID磁盘数据格式,采用DDF结构对RAID进行描述,可以方便不同厂商磁盘产品之间的数据迁移。)结构的RAID信息。备用扇区区域中预留了若干地址连续的扇区作为备用扇区,用来在本磁盘上产生坏块时进行重新映射,备用扇区按照LBA地址从小到大进行排序,被分配使用时按照排序结果依次进行,系统有一个备用扇区定期检查模块,用来定期检测备用扇区的可用情况,以便在备用扇区中出现坏块时,及时更新备用扇区相关信息;最末端以DDF结构描述的RAID信息区域存放着一个自定义的表结构,用来保存本磁盘上的重映射关系,供操作系统上层的数据读写使用,其称作“坏块重映射表”。该表由表头和数据部分组成,表头包含一个统计位和地址位,分别记录了本磁盘上备用扇区已使用的个数和当前首个可用的备用扇区LBA地址,当备用扇区全部用光时,该地址字段被设为无效数值;数据部分由若干条记录组成,初值为零条,随着备用扇区的使用而增加,最大记录数等于备用扇区个数,每个记录包含两个数据位,分别用来保存坏块的逻辑块地址和重新映射后备用扇区的LBA地址。
针对上述特点的磁盘阵列和对应的存储操作系统,本发明提供一种软RAID环境下的磁盘坏块处理方法,包括以下步骤
步骤一在磁盘使用过程中产生的坏块被访问到时,检索坏块重映射表的数据部分,判断坏块的逻辑块地址是否已经在表中,依据检索结果处理如下
(1)如果坏块的逻辑块地址不在表中,则产生介质访问错误,并反馈给内核驱动;
(2)如果坏块的逻辑块地址已经在表中,则依据该条记录访问坏块重新映射后对应的备用扇区LBA地址,倘若访问正常,则结束当前操作,倘若仍然不能访问,则产生介质访问错误,并反馈给内核驱动;
步骤二系统读取底层硬盘驱动器发来的错误信息,获得坏块的LBA地址,并判断是否读错误,如果是读错误,由步骤三继续处理,否则是写错误,转向步骤六处理;
步骤三对于读错误,判断坏块所在驱动器是否处于冗余状态,如果是冗余状态, 由步骤四继续处理,如果该驱动器没有采用RAID或者处于RAIDO等非冗余状态,致使没有可用的参考点而无法进行数据重建,将该块标记为坏块,并将介质访问错误的信息返回给内核驱动后即可完成操作;
步骤四对于数据存在冗余,并且参考点状态正常的情况,则依据驱动器所处RAID 级别调用对应接口进行数据重建操作,重建成功后,由步骤五继续处理,如果重建失败,将该块标记为坏块,并将介质访问错误的信息返回给内核驱动后即可完成操作;
步骤五将重建成功的数据写入到坏块对应的LBA地址,并刷新系统缓存,保证数据完全写入到对应物理扇区,然后检验写入的数据是否可读,如果可读,表明该扇区是可以修复的,并且已经被修复,结束当前操作即可,如果写入失败或者写入的数据无法读取,表明该坏块对应的扇区无法修复,由步骤六继续处理;
步骤六对于写错误,首先读取本驱动器上坏块重映射表的表头,判断是否还有剩余的备用扇区可用,如果没有剩余,表明该驱动器上的坏块无法重新映射,将该块标记为坏块,并将该驱动器标记为重映射失败状态,即结束当前操作,如果有剩余,由步骤七继续处理;
步骤七向磁盘发送重映射命令,判断所用磁盘本身是否支持重映射操作,如果不支持,转向步骤八进行处理,如果支持,分情况处理如下
(1)调用磁盘驱动对应接口进行坏块重映射和数据写入操作,如果操作成功,则表明坏块被磁盘自身的重映射机制修复,结束当前操作即可;
(2)在调用磁盘驱动对应接口进行坏块重映射或者数据写入时,如果其中某个操作失败,则表明坏块无法被磁盘本身的重映射机制修复,交由步骤八进行后继处理;
步骤八检索坏块重映射表的表头,获取当前可用的备用扇区LBA地址,检索坏块重映射表的数据部分,判断坏块的逻辑块地址是否已经在表中,依据检索结果处理如下
(1)如果坏块的逻辑块地址不在表中,则直接在表中添加一条记录,记录坏块重新映射后对应备用扇区的LBA地址,然后更新表头的统计位和地址位,之后执行步骤九;
(2)如果坏块的逻辑块地址已经在表中,则更新该条记录,记录坏块重新映射后对应新备用扇区的LBA地址,然后更新表头的统计位和地址位,之后执行步骤九;
步骤九按照坏块重映射表,将欲写入的数据写入到备用扇区中,并检测写入操作是否成功,依据操作结果处理如下
(1)如果失败,表明备用扇区中存在坏块,调用系统的备用扇区定期检测模块对备用扇区当前情况进行更新,然后由步骤六进行处理;
(2)如果成功,表明坏块重映射操作完成,结束当前操作即可,此后对坏块的访问由坏块重映射表处理,自动重定向为对备用扇区的访问。
有益效果
本发明的有益效果是
(1)提高了软RAID环境下的数据可靠性。该方法解决了多数软RAID产品在磁盘产生一个坏块时就需要更换该磁盘对整个RAID进行重建的问题,依据坏块所在磁盘的具体使用情况对坏块进行处理,提供了坏块发生时的处理策略,提高了软RAID产品的数据可靠性。
(2)处理效率较高。软RAID相对于硬件RAID比较明显的弊端是处理速度问题,该方法基于自主研发的存储操作系统构建,多数操作在内核层实现,可以更好的利用系统资源,更为高效透明的实现具体功能。
(3)处理方式比较灵活。对坏块的处理,依据磁盘本身是否支持坏块重映射分情况处理,这样即可以有效利用存储空间,也便于坏块的灵活处理,提高重映射成功的几率。


图1为系统体系结构图2为坏块重映射表数据结构示意图3为坏块处理流程图。
具体实施方式
下面结合附图及实施例对本发明做进一步说明。
本方法所涉及的功能软件集成于某磁盘阵列对应的存储操作系统中,整个系统的体系结构如附图1所示。该存储操作系统自主研发,是一个内核版本为2. 6的Linux操作系统,实现了软RAID的创建、维护和删除等功能;该系统采用自主设计的U盘作为存储介质, 被制作成USB启动盘格式;制作好的U盘以配件形式安装在该磁盘阵列的主板或控制器上, 便于插拔和替换。存储操作系统是一个层级结构,在物理硬件上依次构建了内核模式程序和用户模式程序,并应用逻辑卷管理机制对底层磁盘进行管理。本方法所涉及的功能软件主要在内核模式下实现,是对Linux操作系统内核驱动的修改和扩展。
该磁盘阵列,对盘阵内每个物理磁盘做了特殊处理,预留U8MB的磁盘空间作为备用扇区区域,并用磁盘空间最末端的64MB存放DDF结构的RAID信息。备用扇区区域由 256个地址连续的扇区作为备用扇区,备用扇区按照LBA地址从小到大进行排序,被分配使用时按照排序结果依次进行,系统有一个备用扇区定期检查模块,用来定期检测备用扇区的可用情况,以便在备用扇区中出现坏块时,及时更新备用扇区相关信息;最末端以DDF结构描述的RAID信息区域中存放有一个“坏块重映射表”。如附图2所示,该表由表头和数据部分组成,表头包含2字节的统计位“cnt”和8字节的地址位“addr”,分别记录了本磁盘上备用扇区已使用的个数和当前首个可用的备用扇区LBA地址,当备用扇区全部用光时,该地址字段被设为无效数值;数据部分由若干条记录组成,初值为零条,随着备用扇区的使用而增加,最大记录数为256个,每个记录包含两个8字节的数据位,分别用来保存坏块的逻辑块地址和重新映射后备用扇区的LBA地址。
以该磁盘阵列和对应的存储操作系统为基础,本实施例实现了一种软RAID环境下的磁盘坏块处理方法,如附图3所示,包括以下步骤
步骤一在磁盘使用过程中产生的坏块被访问到时,检索坏块重映射表的数据部分,判断坏块的逻辑块地址是否已经在表中,依据检索结果处理如下
(1)如果坏块的逻辑块地址不在表中,则产生介质访问错误,并反馈给内核驱动;
(2)如果坏块的逻辑块地址已经在表中,则依据该条记录访问坏块重新映射后对应的备用扇区LBA地址,倘若访问正常,则结束当前操作,倘若仍然不能访问,则产生介质访问错误,并反馈给内核驱动;
步骤二系统读取底层硬盘驱动器发来的错误信息,获得坏块的LBA地址,并判断是否读错误,如果是读错误,由步骤三继续处理,否则是写错误,转向步骤六处理;
步骤三对于读错误,判断坏块所在驱动器是否处于冗余状态,如果是冗余状态, 由步骤四继续处理,如果该驱动器没有采用RAID或者处于RAIDO等非冗余状态,致使没有可用的参考点而无法进行数据重建,将该块标记为坏块,并将介质访问错误的信息返回给内核驱动后即可完成操作;
步骤四对于数据存在冗余,并且参考点状态正常的情况,则依据驱动器所处RAID 级别调用对应接口进行数据重建操作,重建成功后,由步骤五继续处理,如果重建失败,将该块标记为坏块,并将介质访问错误的信息返回给内核驱动后即可完成操作;
步骤五将重建成功的数据写入到坏块对应的LBA地址,并刷新系统缓存,保证数据完全写入到对应物理扇区,然后检验写入的数据是否可读,如果可读,表明该扇区是可以修复的,并且已经被修复,结束当前操作即可,如果写入失败或者写入的数据无法读取,表明该坏块对应的扇区无法修复,由步骤六继续处理;
步骤六对于写错误,首先读取本驱动器上坏块重映射表的表头,判断是否还有剩余的备用扇区可用,如果没有剩余,表明该驱动器上的坏块无法重新映射,将该块标记为坏块,并将该驱动器标记为重映射失败状态,即结束当前操作,如果有剩余,由步骤七继续处理;
步骤七向磁盘发送重映射命令,判断所用磁盘本身是否支持重映射操作,如果不支持,转向步骤八进行处理,如果支持,分情况处理如下
(1)调用磁盘驱动对应接口进行坏块重映射和数据写入操作,如果操作成功,则表明坏块被磁盘自身的重映射机制修复,结束当前操作即可;
(2)在调用磁盘驱动对应接口进行坏块重映射或者数据写入时,如果其中某个操作失败,则表明坏块无法被磁盘本身的重映射机制修复,交由步骤八进行后继处理;
步骤八检索坏块重映射表的表头,获取当前可用的备用扇区LBA地址,检索坏块重映射表的数据部分,判断坏块的逻辑块地址是否已经在表中,依据检索结果处理如下
(1)如果坏块的逻辑块地址不在表中,则直接在表中添加一条记录,记录坏块重新映射后对应备用扇区的LBA地址,然后更新表头的统计位和地址位,之后执行步骤九;
(2)如果坏块的逻辑块地址已经在表中,则更新该条记录,记录坏块重新映射后对应新备用扇区的LBA地址,然后更新表头的统计位和地址位,之后执行步骤九;
步骤九按照坏块重映射表,将欲写入的数据写入到备用扇区中,并检测写入操作是否成功,依据操作结果处理如下
(1)如果失败,表明备用扇区中存在坏块,调用系统的备用扇区定期检测模块对备用扇区当前情况进行更新,然后由步骤六进行处理;
(2)如果成功,表明坏块重映射操作完成,结束当前操作即可,此后对坏块的访问由坏块重映射表处理,自动重定向为对备用扇区的访问。
本发明不仅限于以上实施例,凡是利用本发明的设计思路,做一些简单变化的设计,都应计入本发明的保护范围之内。
权利要求
1. 一种基于软RAID的磁盘坏块处理方法,它应用于磁盘阵列对应的存储操作系统中, 该存储操作系统要求包括以下技术特征其中,操作系统为Linux操作系统,具备软RAID的创建、维护和删除功能;系统采用U盘作为存储介质,被制作成USB启动盘格式,制作好的 U盘以配件形式安装在磁盘阵列的主板或控制器上;存储操作系统是一个层级结构,在物理硬件上依次构建了内核模式程序和用户模式程序,并应用逻辑卷管理机制对底层磁盘进行管理;本方法在内核模式下实现,是对Linux操作系统内核驱动的修改和扩展;该磁盘阵列,对盘阵内每个物理磁盘做了特殊处理,预留一部分磁盘空间作为备用扇区区域,并用磁盘空间最末端的一块区域存放DDF结构的RAID信息;备用扇区区域中预留了若干地址连续的扇区作为备用扇区,用来在本磁盘上产生坏块时进行重新映射,备用扇区按照LBA地址从小到大进行排序,被分配使用时按照排序结果依次进行,系统有一个备用扇区定期检查模块,用来定期检测备用扇区的可用情况,以便在备用扇区中出现坏块时,及时更新备用扇区相关信息;最末端以DDF结构描述的RAID信息区域存放着一个自定义的表结构,用来保存本磁盘上的重映射关系,供操作系统上层的数据读写使用,其称作“坏块重映射表”,该表由表头和数据部分组成,表头包含一个统计位和地址位,分别记录了本磁盘上备用扇区已使用的个数和当前首个可用的备用扇区LBA地址,当备用扇区全部用光时,该地址字段被设为无效数值;数据部分由若干条记录组成,初值为零条,随着备用扇区的使用而增加,最大记录数等于备用扇区个数,每个记录包含两个数据位,分别用来保存坏块的逻辑块地址和重新映射后备用扇区的LBA地址,其特征在于包括以下步骤步骤一在磁盘使用过程中产生的坏块被访问到时,检索坏块重映射表的数据部分,判断坏块的逻辑块地址是否已经在表中,依据检索结果处理如下(1)如果坏块的逻辑块地址不在表中,则产生介质访问错误,并反馈给内核驱动;(2)如果坏块的逻辑块地址已经在表中,则依据该条记录访问坏块重新映射后对应的备用扇区LBA地址,倘若访问正常,则结束当前操作,倘若仍然不能访问,则产生介质访问错误,并反馈给内核驱动;步骤二系统读取底层硬盘驱动器发来的错误信息,获得坏块的LBA地址,并判断是否读错误,如果是读错误,由步骤三继续处理,否则是写错误,转向步骤六处理;步骤三对于读错误,判断坏块所在驱动器是否处于冗余状态,如果是冗余状态,由步骤四继续处理,如果该驱动器没有采用RAID或者处于RAIDO等非冗余状态,致使没有可用的参考点而无法进行数据重建,将该块标记为坏块,并将介质访问错误的信息返回给内核驱动后即可完成操作;步骤四对于数据存在冗余,并且参考点状态正常的情况,则依据驱动器所处RAID级别调用对应接口进行数据重建操作,重建成功后,由步骤五继续处理,如果重建失败,将该块标记为坏块,并将介质访问错误的信息返回给内核驱动后即可完成操作;步骤五将重建成功的数据写入到坏块对应的LBA地址,并刷新系统缓存,保证数据完全写入到对应物理扇区,然后检验写入的数据是否可读,如果可读,表明该扇区是可以修复的,并且已经被修复,结束当前操作即可,如果写入失败或者写入的数据无法读取,表明该坏块对应的扇区无法修复,由步骤六继续处理;步骤六对于写错误,首先读取本驱动器上坏块重映射表的表头,判断是否还有剩余的备用扇区可用,如果没有剩余,表明该驱动器上的坏块无法重新映射,将该块标记为坏块,并将该驱动器标记为重映射失败状态,即结束当前操作,如果有剩余,由步骤七继续处理;步骤七向磁盘发送重映射命令,判断所用磁盘本身是否支持重映射操作,如果不支持,转向步骤八进行处理,如果支持,分情况处理如下(1)调用磁盘驱动对应接口进行坏块重映射和数据写入操作,如果操作成功,则表明坏块被磁盘自身的重映射机制修复,结束当前操作即可;(2)在调用磁盘驱动对应接口进行坏块重映射或者数据写入时,如果其中某个操作失败,则表明坏块无法被磁盘本身的重映射机制修复,交由步骤八进行后继处理;步骤八检索坏块重映射表的表头,获取当前可用的备用扇区LBA地址,检索坏块重映射表的数据部分,判断坏块的逻辑块地址是否已经在表中,依据检索结果处理如下(1)如果坏块的逻辑块地址不在表中,则直接在表中添加一条记录,记录坏块重新映射后对应备用扇区的LBA地址,然后更新表头的统计位和地址位,之后执行步骤九;(2)如果坏块的逻辑块地址已经在表中,则更新该条记录,记录坏块重新映射后对应新备用扇区的LBA地址,然后更新表头的统计位和地址位,之后执行步骤九;步骤九按照坏块重映射表,将欲写入的数据写入到备用扇区中,并检测写入操作是否成功,依据操作结果处理如下(1)如果失败,表明备用扇区中存在坏块,调用系统的备用扇区定期检测模块对备用扇区当前情况进行更新,然后由步骤六进行处理;(2)如果成功,表明坏块重映射操作完成,结束当前操作即可,此后对坏块的访问由坏块重映射表处理,自动重定向为对备用扇区的访问。
全文摘要
本发明涉及一种基于软RAID的磁盘坏块处理方法。本方法集成于磁盘阵列对应的存储操作系统中,在磁盘阵列的每个磁盘内预留了若干备用扇区以备本磁盘的坏块重映射使用,自定义了坏块重映射表用来保存本磁盘上的坏块重映射关系,然后主要修改存储操作系统的内核驱动,依据所用磁盘是否处于冗余状态,以及磁盘本身是否支持坏块重映射操作等具体特点,分情况对磁盘坏块进行处理。本发明可以提高软RAID环境下的数据可靠性,且处理方式比较灵活,处理效率较高。
文档编号G06F11/00GK102508724SQ201110326370
公开日2012年6月20日 申请日期2011年10月25日 优先权日2011年10月25日
发明者周泽湘, 张伟涛, 张恒, 李艳国, 武志民, 潘兴旺, 王道邦, 章珉 申请人:北京同有飞骥科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1