写请求的处理方法及装置的制作方法

文档序号:6356480阅读:206来源:国知局
专利名称:写请求的处理方法及装置的制作方法
技术领域
本发明涉及存储技术,尤其涉及一种写请求的处理方法及装置。
背景技术
写空(Write hole)是一种独立冗佘磁盘阵列(Redundant Array of Independent Disk, RAID)数据不一致问题。以RAID5为例,硬盘中会保存数据块和校验块,存储冗佘和 一致性体现在P = Dl Λ D2 Λ D3 Λ 04,其中,八表示异或运算,01、02、03、04为数据块,P 为校验块。假设新写请求准备更新Dl和D2,新写请求携带了数据ND1和ND2,如果新数据 能够成功写入分条,则新的数据块包括ND1、ND2、D3、D4。为了计算新的校验块NP,可以采 用大写方式和小写方式,其中,大写方式为NP = NDl Λ ND2 Λ D3 Λ D4,需要读取D3、D4 ; 小写方式为NP = P Λ Dl Λ D2 Λ NDl Λ ND2,需要读取D1、D2、P。在分条数据一致的情况 下,选择大写和小写都可以,为了保证性能,哪种方式读的数据少,就用哪种方式。未完成的分条写请求,比如正在写数据的控制器故障了,会导致该次写涉及的数 据盘、校验盘内相关分条单元数据不确定。假设一个分条写携带了 ND1、ND2数据,则该次 写未完成会引发以下问题xDl、xD2、xP的数据不能确定,可能是旧的、可能是新的、可能 是新旧相加的。D3、D4的数据没有改动。此时,分条数据将处于不一致状态,即xP != xDl Λ xD2 AD3A D4。当分条处于该状态下,后续的分条写前计算就会出现错误。这种分 条数据不一致的问题称为Write Hole问题。为了解决^^切Hole问题,需要重建写异常后的分条,可以把分条数据恢复到写 数据操作之前或者正确写之后,例如,恢复到写数据操作之前需要保存写数据操作之前的 数据D1、D2、P ;恢复到正确写之后需要保存ND1、ND2、NP。不论是恢复到哪种状态,都需要 增加一个设备来保存相应的数据,额外增加的设备无疑会增加成本,并且重建写异常后的 分条实现的算法较为复杂。

发明内容
本发明实施例是提供一种写请求的处理方法及装置,用以解决现有技术中在解决 Write Hole问题时需要额外增加设备造成的成本增加问题。本发明实施例提供了一种写请求的处理方法,包括当独立冗佘磁盘阵列RAID的文件单元中写入新的数据时,将所述新的数据保存 在第一文件单元中,所述第一文件单元与第二文件单元不同,其中,所述第二文件单元用于 保存旧的数据,所述新的数据用于更新所述旧的数据,所述RAID采用文件方式进行管理;在所述RAID对应的文件被关闭或者所述第一文件单元所在条带全部写完后,删 除所述旧的数据。本发明实施例提供了写请求的处理装置,包括写入模块,用于当独立冗佘磁盘阵列RAID的文件单元中写入新的数据时,将所述 新的数据保存在第一文件单元中,所述第一文件单元与第二文件单元不同,其中,所述第二文件单元用于保存旧的数据,所述新的数据用于更新所述旧的数据,所述RAID采用文件方 式进行管理;删除模块,用于在所述RAID对应的文件被关闭或者所述第一文件单元所在条带 全部写完后,删除所述旧的数据。由上述技术方案可知,本发明实施例通过采用文件级RAID,可以将新的数据保存 在与旧的数据不同的文件单元中,可以按照文件的内在属性来解决写空问题,不需要增加 另外的存储设备,可以降低成本,并且实现算法简单。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本 领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他 的附图。图1为本发明第一实施例的方法流程示意图;图2为本发明实施例中块级RAID层次结构与文件级RAID层次结构的对比图;图3为本发明第二实施例的方法流程示意图;图4为本发明实施例中RAID5或RAID6的示意图;图5为本发明实施例中RAIDl的示意图;图6为本发明实施例中写入新的数据的示意图。图7为本发明实施例中写文件单元的示意图;图8为本发明第三实施例的装置结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明第一实施例的方法流程示意图,包括步骤11 当RAID的文件单元中写入新的数据时,将所述新的数据保存在第一文件 单元中,所述第一文件单元与第二文件单元不同,其中,所述第二文件单元用于保存旧的数 据,所述新的数据用于更新所述旧的数据,所述RAID采用文件方式进行管理;步骤12 在所述RAID对应的文件被关闭或者所述第一文件单元所在条带全部写 完后,删除所述旧的数据。本发明实施例中,为了降低成本,采用文件级RAID方式替代现有的块级RAID方式 来解决Write hole问题。本实施例通过采用文件级RAID,可以将新的数据保存在与旧的数据不同的文件单 元中,可以按照文件的内在属性来解决写空问题,不需要增加另外的存储设备,可以降低成 本。图2为本发明实施例中块级RAID层次结构与文件级RAID层次结构的对比图,参
5见图2,块级RAID层次结构包括应用层、文件系统、块级RAID和硬盘,而文件级RAID层次 结构包括应用、文件系统、文件级RAID、单盘文件系统和硬盘。相对于块级RAID,文件级 RAID在每个硬盘上以文件方式组织RAID (包括单盘文件系统),利用文件的内在属性来解 决^^切hole,例如,文件的内在属性包括一个文件可以包括多个文件单元,因此,新的数 据和旧的数据可以保存在不同的文件单元中。图3为本发明第二实施例的方法流程示意图,包括步骤31 源于不同文件的分条数据被依次写入各个硬盘中。例如,图4为本发明实施例中RAID5或RAID6的示意图,参见图4,源于文件0的数 据写入硬盘0的DO位置,源于文件1的数据写入硬盘1的Dl位置,源于文件2的数据写入 硬盘2的D2位置。在RAID5或RAID6中,以校验块实现冗佘,例如,PO、QO为校验块。图5为本发明实施例中RAIDl的示意图,参见图5,采用镜像方式实现冗余,例如, 硬盘0和硬盘1中保存相同的数据。本发明实施例采用文件方式对RAID管理,因此在硬盘 上可以以文件单元为单位存储数据,利用文件单元的属性进行处理。步骤32 当新的数据写入文件单元后,将新的数据写入与旧的数据不同的文件单 元中,即新的数据不覆盖旧的数据。例如,参见图4,当更新DO时,在硬盘0的另外的文件单元处写入新的数据,而不是 覆盖文件单元0中的DO。具体地,参见图6,图6为本发明实施例中写入新的数据的示意图,假设旧的数据 已经写入文件单元0和文件单元1,当写入新的数据时,该新的数据写入文件单元1’中。步骤33 当文件被关闭或者文件单元所在条带全部写完,删除旧数据。其中,对于RAID1,文件单元所在条带是指镜像对的条带。可以采用如下方式确定条带是否全部写完图7为本发明实施例中写文件单元的示意图,参见图7,每当写文件单元之前,先 写一个幻数(magic number)(比如数据开始写入文件单元的时间)到该文件单元扩展属性 A中;幻数用来标记文件或者协议的格式,当写入数据操作完成后,再将相同的幻数写入该 文件单元扩展属性B中。只有幻数相等才认为该文件单元完整。S卩,写流程应该包括1、写文件单元的扩展属性A2、写文件单元内容3、写文件单元的扩展属性B例如,要写数据“ 1234567890ABCDEre”,在写入这个数据到文件单元前,先写入当 前时间“20110131085731”,然后写入这个数据,写完成之后再写入“20110131085731”。如 果下次读取时,发现数据前后的幻数相同,则说明数据写入操作已经完成,因为最先写入的 和最后写入的内容相同,那么中间写入的内容也应当完成;否则说明出现了数据丢失。步骤34:当读写文件级RAID某个条带时,发现该条带所属文件单元出现新旧文件 单元并存的现象,则说明该条带可能出现Write hole,需要将该条带进行恢复处理。具体地,在新旧文件单元并存的情况下,在后续计算过程中可能出现错误,此时, 包含新旧文件单元的该条带就可能出现write hole问题。为了解决write hole问题,需 要将所述条带对应的数据恢复到数据写入操作之前或者数据写入操作完成之后,即需要将该条带对应的数据恢复到写数据操作之前或者正确写之后,对该条带进行恢复处理。其中,由于写数据采用的是日志方式,即修改某个文件单元前,比如该文件单元的 文件名为ABC. data,将先修改这个文件单元的文件名,比如修改为ABC. data, bak ;然后将 新写入的数据重新写到文件名为ABC. data中。当文件单元所在的文件被关闭或者文件单 元所在条带全部写完或者用户主动要求同步Cache中的内容到硬盘(比如系统需要下电 等),将删除旧数据,即删除ABC. data, bak。如果某个时刻(一般都发生在系统上电后第一 次访问某个文件的某个文件单元)发现保存数据的硬盘上存在新旧文件单元并存,即ABC. data, bak和ABC. data都存在,那么说明条带可能出现write hole。具体地,对于RAID1,选取文件单元修改时间最新且扩展属性A = B的文件单元进 行恢复镜像对。其中,恢复镜像对为用所选取的文件单元的内容覆盖该文件单元的镜像文 件单元,即重新让这组文件单元镜像对数据一致。对于RAID5或者RAID6,如果最新且完整的文件单元能满足大写方式,将采用大写 方式重新恢复条带一致性,即恢复原始数据;如果最新且完整的文件单元不能满足大写方 式,将采用小写方式重新恢复条带一致性,即恢复原始数据。也就是说,当新数据正确时就 采用大写方式恢复条带一致性,当旧数据正确时就用小写方式重新恢复条带一致性。当条带一致性恢复成功后,将删除不用的文件单元。图8为本发明第三实施例的装置结构示意图,包括写入模块81和删除模块82 ; 写入模块81用于当RAID的文件单元中写入新的数据时,将所述新的数据保存在第一文件 单元中,所述第一文件单元与第二文件单元不同,其中,所述第二文件单元用于保存旧的数 据,所述新的数据用于更新所述旧的数据,所述RAID采用文件方式进行管理;删除模块82 用于在所述RAID对应的文件被关闭或者所述第一文件单元所在条带全部写完后,删除所 述旧的数据。所述删除模块82采用如下方式判断第一文件单元所在条带全部写完如果所述 RAID的文件单元的扩展属性中记录的第一幻数和第二幻数相同,则所述第一文件单元所在 条带全部写完,其中,所述第一幻数为数据开始写入所述RAID的文件单元时的属性,所述 第二幻数为数据写完时写入扩展属性中的与所述第一幻数相同的值。例如,要写数据“ 1234567890ABCDEre”,在写入这个数据到文件单元前,先写入当 前时间“20110131085731”,然后写入这个数据,写完成之后再写入“20110131085731”。如 果下次读取时,发现数据前后的幻数相同,则说明数据写入操作已经完成,因为最先写入的 和最后写入的内容相同,那么中间写入的内容也应当完成;否则说明出现了数据丢失。本实施例还可以包括恢复模块,用于如果RAID中被读写的条带存在包括新的数 据和旧的数据的文件单元,对该被读写的条带进行恢复处理,将所述被读写的条带对应的 数据恢复到数据写入操作之前或者数据写入操作完成之后;所述恢复处理包括如果采用 RAID1,则选择文件单元修改时间最新且第一幻数和第二幻数相同的文件单元进行镜像对 恢复;如果采用RAID5或RAID6,如果最新且完整的文件单元能满足大写方式,将采用大写 方式重新恢复,否则采用小写方式恢复。本实施例通过采用文件级RAID,可以将新的数据保存在与旧的数据不同的文件单 元中,可以按照文件的内在属性来解决写空问题,不需要增加另外的存储设备,可以降低成 本。
可以理解的是,上述方法及设备中的相关特征可以相互参考。另外,上述实施例中 的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在 执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光 盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
权利要求
1.一种写请求的处理方法,其特征在于,包括当独立冗佘磁盘阵列RAID的文件单元中写入新的数据时,将所述新的数据保存在第 一文件单元中,所述第一文件单元与第二文件单元不同,其中,所述第二文件单元用于保存 旧的数据,所述新的数据用于更新所述旧的数据,所述RAID采用文件方式进行管理;在所述RAID对应的文件被关闭或者所述第一文件单元所在条带全部写完后,删除所 述旧的数据。
2.根据权利要求1所述的方法,其特征在于,所述第一文件单元所在条带全部写完,包括如果所述RAID的文件单元的扩展属性中记录的第一幻数和第二幻数相同,则所述第 一文件单元所在条带全部写完,其中,所述第一幻数为数据开始写入所述RAID的文件单元 时的属性,所述第二幻数为数据写完时写入扩展属性中的与所述第一幻数相同的值。
3.根据权利要求1或2所述的方法,其特征在于,还包括如果所述RAID中被读写的条带中存在包括新的数据和旧的数据的文件单元,则对所 述被读写的条带进行恢复处理,将所述被读写的条带的数据恢复到数据写入操作之前或者 数据写入操作完成之后。
4.根据权利要求3所述的方法,其特征在于,所述恢复处理包括如果采用RAID1,则选择文件单元修改时间最新且第一幻数和第二幻数相同的文件单 元进行镜像对恢复;如果采用RAID5或RAID6,如果最新且完整的文件单元能满足大写方式,将采用大写方 式重新恢复,否则采用小写方式恢复。
5.根据权利要求2所述的方法,其特征在于,所述幻数为数据开始写入文件单元的时间。
6.一种写请求的处理装置,其特征在于,包括写入模块,用于当独立冗佘磁盘阵列RAID的文件单元中写入新的数据时,将所述新的 数据保存在第一文件单元中,所述第一文件单元与第二文件单元不同,其中,所述第二文件 单元用于保存旧的数据,所述新的数据用于更新所述旧的数据,所述RAID采用文件方式进行管理;删除模块,用于在所述RAID对应的文件被关闭或者所述第一文件单元所在条带全部 写完后,删除所述旧的数据。
7.根据权利要求6所述的装置,其特征在于,所述删除模块采用如下方式判断第一文 件单元所在条带全部写完如果所述RAID的文件单元的扩展属性中记录的第一幻数和第二幻数相同,则所述第 一文件单元所在条带全部写完,其中,所述第一幻数为数据开始写入所述RAID的文件单元 时的属性,所述第二幻数为数据写完时写入扩展属性中的与所述第一幻数相同的值。
8.根据权利要求6或7所述的装置,其特征在于,还包括恢复模块,用于如果所述RAID中被读写的条带存在包括新的数据和旧的数据的文件 单元,对所述被读写的条带进行恢复处理,将所述被读写的条带对应的数据恢复到数据写 入操作之前或者数据写入操作完成之后;所述恢复处理包括如果采用RAID1,则选择文 件单元修改时间最新且第一幻数和第二幻数相同的文件单元进行镜像对恢复;如果采用RAID5或RAID6,如果最新且完整的文件单元能满足大写方式,将采用大写方式重新恢复, 否则采用小写方式恢复。
全文摘要
本发明提供一种写请求的处理方法及装置。该方法包括当RAID的文件单元中写入新的数据时,将所述新的数据保存在第一文件单元中,所述第一文件单元与第二文件单元不同,其中,所述第二文件单元用于保存旧的数据,所述新的数据用于更新所述旧的数据,所述RAID采用文件方式进行管理;在所述RAID对应的文件被关闭或者所述第一文件单元所在条带全部写完后,删除所述旧的数据。
文档编号G06F3/06GK102122236SQ20111006792
公开日2011年7月13日 申请日期2011年3月21日 优先权日2011年3月21日
发明者张巍, 魏明昌 申请人:成都市华为赛门铁克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1