一种实现写时复制保护元数据的装置及方法

文档序号:6363030阅读:223来源:国知局
专利名称:一种实现写时复制保护元数据的装置及方法
技术领域
本发明涉及计算机应用中的数据保护技术,尤其涉及通过写时复制方式对元数据进行保护的装置及方法。
背景技术
计算机系统在结构上大致可分为CPU、存储子系统以及I/O子系统。其中,存储子系统和I/o子系统都可以统归结为数据子系统。从更抽象的层次上看,可以将计算机系统分成计算和数据两大部份。其中,对于数据部分可分为用户数据和元数据;用户数据是用户本身的数据,而元数据则是“数据的数据”,即作为了管理用户数据的那部份数据。元数据用以描述用户数据,如果在一个存储系统中元数据遭损坏,那么其影响要远远大于用户数据的损坏或丢失。可见,在计算机系统中对元数据的灾难恢复和保护具有十分重要的意义。受限于最初的硬件存储设备其速度与容量的限制,最初的存储系统,如FAT、 EXT2(不同的文件系统),对元数据采取的是灾难恢复策略,即如果机器在写入数据的时候发生断电或宕机,则在其下次启动的时候会去通过扫描整个存储设备来恢复,以保证存储设备的一致性。可以说这种方式对存储子系统的保护功能几乎是没有,而且恢复所需的扫描时间往往是令人难以接受的。为了对元数据进行保护,现有的存储系统一般有两种方法写日志和写时复制。其中,写日志是使用一个独立的磁盘或是文件作为日志,在元数据发生更改写入时,先写入日志,再去更改元数据。在发生断电或是宕机后,只需扫描这个日志文件就可以达到元数据一致性恢复的目的。这种方式将数据存储和日志分隔开,以日志的方式确保元数据的一致性。 Ext3、Ext4就是使用这种方式对元数据进行保护。写时复制是要更改数据结构中元数据的时候,先将要被更改的元数据复制一份,再去更改该元数据,依次类推;然后在该数据结构中规定的若干位置选择一个结点,写入指向最新元数据的块地址即可。在这种方式下,机器若发生断电或是宕机,则其下次启动只需扫描每个规定位置的数据块便可实现恢复。采用写时复制一般对元数据会采用类似于树形的数据结构去组织,而会有一个类似于超级块的根结点指向树的根。存储系统中存在多个这样的根结点,如图I所示,多个根结点之间以序号的大小来区分所指向的整个元数据树的新与旧。在存储系统有元数据要写入时,如果在树形结构中某个结点发生了写时复制,那么这个结点的父结点也会随之发生改变,即该父结点也会发生写时复制,这是一种连锁反应,直至这个树的根最终也发生写时复制。显然,这种方式,每一次一个结点上元数据的更改,都需要通过大量的I/O读写操作来读写大量的块,费时且费存储资源。因此,亟待加以改进和优化。目前,针对写时复制的优化大部份采用缓存机制的方式,即对数据写入操作先缓存一段时间后,再将其刷入磁盘。根据数据读写的局部性,如果一个块已被进行写时复制, 并且对这个块的二次更改和第一次更改是在同一个事务内,则不需要针对这个块的二次更改再进行写时复制,直接更改即可。这种方式减少了写时复制的I/o读写操作,但其改进和优化的效果非常有限,仍有待于进一步进行优化。

发明内容
本发明所要解决的技术问题是提供一种实现写时复制保护元数据的装置及方法, 能够明显地减少写时复制时的I/O读写操作,从而提高写时复制的优化效果。为了解决上述技术问题,本发明提供了一种实现写时复制保护元数据的装置,除了包括相互连接的数据读写模块和事务刷新模块外,还包括与数据读写模块连接的重映射模块,其中数据读写模块,用于在收到数据读写请求时,将针对元数据的请求提交重映射模块处理,将针对用户数据的请求提交事务刷新模块处理;重映射模块,用于针对该数据读写请求,根据要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,同时将该新块提交给事务刷新模块;事务刷新模块,用于将需频繁读写的元数据块缓存在内存中,根据数据读写模块或重映射模块各自的提交定时向磁盘刷新事务中的数据。进一步地,重映射模块采用一个具有哈希数组结构的映射表作为重映射记录,通过该映射表的结点记录原始块号和映射的新块号;哈希数组的大小采用可配置的方式配置。进一步地,重映射模块如果确认是针对元数据的读请求,根据给定块号在映射表中查找相应的块,若找到,则将该给定块号置为相应结点中映射的新块号;若没找到,则将该给定块号提交给事务刷新1 块;事务刷新模块根据重映射模块提交的给定块号在向磁盘刷新事务时从硬盘上读取相应的元数据。进一步地,重映射模块如果确认是元数据写请求,根据给定块号在映射表中查找相应的块, 若找到,则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射的块号释放;若没找到,则在映射表中插入将该给定块号作为写复制后新块号的结点。进一步地,哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与重映射记录中的结点出现冲突时,则从该结点引出新结点继续重映射记录。为了解决上述技术问题,本发明提供了一种实现写时复制保护元数据的方法,包括当用户提出了数据读写请求时,根据元数据的读写请求所要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系;将需频繁读写的元数据块缓存在内存中,将新块和根据用户数据的读写请求要读写的块定时向磁盘刷新。进一步地,在根据元数据的读写请求所要读写的块在重映射记录中查找相应的块之前,还包括采用一个具有哈希数组结构的映射表作为重映射记录,通过该映射表的结点记录原始块号和映射的新块号。
进一步地,根据元数据的读写请求所要读写的块在重映射记录中查找相应的块, 并记录新块与原始块对应的映射关系,具体包括如果确认是针对元数据的读请求,根据给定块号在所述映射表中查找相应的块, 若找到,则将该给定块号置为相应结点中所述映射的新块号;若没找到,则直接使用该给定块号在定时向磁盘刷新事务时读取相应的元数据;如果确认是元数据写请求,根据给定块号在所述映射表中查找相应的块,若找到, 则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射块的新块号释放;若没找到,则在映射表中插入将该给定块号作为写复制后新块号的结点。进一步地,哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与所述重映射记录中的结点出现冲突时,贝1J从该结点引出新结点继续所述重映射记录。进一步地,该方法还包括当映射表中的映射达到预先设置的一个阀值时,统一进行写时复制刷新操作,以清空该映射表。本发明通过在要更改元数据进行写时复制时将重映射的方式与原有的缓存机制结合,即如果需要对一个块的元数据进行更改,则只针对该块进行写时复制,同时在重映射记录中加入对旧块与新块映射关系的记录,以此避免对其它不相干的块进行写时复制操作,从而大大提高了写时复制的优化效果。


图I是写时复制的典型磁盘数据结构;图2是本发明的实现写时复制保护元数据的装置实施例的结构框图;图3是图2中重映射模块所采用的Hash结构示意图;图4是本发明的实现写时复制保护元数据的方法实施例的流程图。
具体实施例方式下面结合附图和优选实施例对本发明的技术方案进行详细地阐述。应该理解,以下列举的实施例仅用于说明和解释本发明,而不构成对本发明技术方案的限制。本发明针对典型的采用写时复制的存储系统的磁盘结构,如图I所示;其中根结点有多个,元数据树的个数随着根结点的个数,且位置固定。在提交事务时,选择当前根结点的下一个根结点位置进行写入。在系统启动时,依次扫描每一个根结点的位置,试图找到最新的根结点。元数据树以树形结构或类似树形的结构存储元数据。本发明在需要对一个元数据块进行更改时,则只针对该块进行写时复制,同时在重映射记录(哈希映射表)中加入对原始块与新块映射关系的记录结点,以避免对其它不相干的块进行写时复制操作。在提交事务时,重映射记录将随同根结点一同被写入磁盘。当重映射记录中的映射达到一定程度时,统一进行一次写时复制操作,以清空重映射记录。如图2所示,是本发明的实现写时复制保护元数据的装置实施例,除了包括相互连接的数据读写模块和事务刷新模块外,还包括分别与数据读写模块和事务刷新模块连接的重映射模块,其中
数据读写模块,用于在有数据读写请求时,若判断该请求是针对元数据,则提交重映射模块处理,若判断该请求是针对用户数据,则提交事务刷新模块处理;重映射模块,用于针对数据读写请求,根据要读写的新块在重映射记录中查找相应的原始块,并记录新块与原始块对应的映射关系,同时将新块号提交给事务刷新模块;事务刷新模块,用于将需频繁读写的元数据块缓存在内存中,并根据数据读写模块和重映射模块的提交,定时向磁盘刷新事务中的数据。在上述装置实施例中,重映身模块采用一个具有Hash数组结构的映射表作为重映射记录,如图3所示, 通过该Hash映射表的结点记录原始块序号和新块映射号;Hash数组的大小采用可配置的方式配置,在默认情况下只使用5%的低端内存。Hash数组结构采用拉链法解决Hash冲突,即当通过Hash算法(函数)取得的结果与记录中的结点出现冲突时,则从记录中的该结点引出新结点继续重映射记录。Hash数组的N值随着不同物理机的低端内存大小而变化;Hash函数采用Knuth的黄金幻数,即接近于232的最大素数。在上述装置实施例中,重映射模块如果确认是元数据读请求,进行重映射读处理,即根据给定块号在 Hash映射表中查找相应的块,若找到,则将该给定块号置为相应结点中映射的新块号;否则,将该给定块号提交给事务刷新模块;事务刷新模块根据该提交的给定块号在向磁盘刷新事务时从硬盘上读取相应的元数据。在上述装置实施例中,重映射模块如果确认是元数据写请求,进行重映射写处理,即根据给定块号在 Hash映射表中查找相应的块,若找到,则在相应结点将该块映射的块块号置为写时复制分配的块号,同时将原来映射的块号释放;若没找到,则在Hash映射表中插入将该给定块号作为写复制后新块号的结点。事务刷新模块在一段固定时间内会在内存中缓存一些需频繁读写的块,直至提交事务。如果在此期间内对缓存的块进行了写操作,则不会使用写时复制,而是直接写硬盘。本发明针对上述装置实施例,相应地还提供了实现写时复制保护元数据的方法实施例,其流程如图4所示,包括如下步骤110 :用户提出了数据读写请求;120:判断该请求是否是针对元数据的,是则继续执行下一步骤,否则执行步骤 150 ;130 :判断该请求是否为写请求,是则执行下一步骤,否则执行步骤160 ;140 :进行写元数据重映射处理;采用一个具有Hash结构的映射表作为重映射记录,通过该Hash映射表的结点记录旧块序号和新块序号。重映射写处理即在Hash映射表中根据给定块号查找相应的块,若找到,则将该块对应的映射块的新块号置为写时复制分配的块号,同时将原来映射块的块号释放。150 :进行事务刷新处理,结束流程;
事务刷新处理即将需频繁读写的元数据块缓存在内存中,并定时向磁盘刷入用户数据和/或元数据。160 :进行读元数据重映射处理,转步骤150执行。重映射读处理即在Hash映射表中根据给定块号查找相应的块,若找到则将该给定块号置为相应结点中映射的新块号;否则,直接使用该给定块号读取数据。事务刷新处理根据读取数据的块号从硬盘上读取相应位置的元数据。上述方法实施例还包括当Hash映射表中的映射达到一定程度时,统一进行一次写时复制刷新操作,以清空该Hash映射表。例如在系统内设置了一个阀值(譬如为2*Hasn映射表内结点数),当 Hash映射表中的映射达到这个阀值时,进行该写时复制刷新操作。
权利要求
1.一种实现写时复制保护元数据的装置,包括相互连接的数据读写模块和事务刷新模块,其特征在于,还包括分别与数据读写模块和事务刷新模块连接的重映射模块,其中数据读写模块,用于在收到数据读写请求时,将针对元数据的请求提交重映射模块处理,将针对用户数据的请求提交事务刷新模块处理;重映射模块,用于针对所述数据读写请求,根据要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,同时将该新块提交给事务刷新模块;事务刷新模块,用于将需频繁读写的元数据块缓存在内存中,根据数据读写模块或重映射模块各自的提交定时向磁盘刷新事务中的数据。
2.按照权利要求I所述的装置,其特征在于,所述重映射模块采用一个具有哈希数组结构的映射表作为所述重映射记录,通过该映射表的结点记录原始块号和映射的新块号;所述哈希数组的大小采用可配置的方式配置。
3.按照权利要求2所述的装置,其特征在于,所述重映射模块如果确认是针对元数据的读请求,根据给定块号在所述映射表中查找相应的块,若找到,则将该给定块号置为相应结点中所述映射的新块号;若没找到,则将该给定块号提交给事务刷新模块;所述事务刷新模块根据所述重映射模块提交的所述给定块号在向磁盘刷新事务时从硬盘上读取相应的元数据。
4.按照权利要求2所述的装置,其特征在于,所述重映射模块如果确认是元数据写请求,根据给定块号在所述映射表中查找相应的块,若找到,则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射的块号释放;若没找到,则在所述映射表中插入将该给定块号作为写复制后新块号的结点。
5.按照权利要求2至4任一项所述的装置,其特征在于,所述哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与所述重映射记录中的结点出现冲突时,贝1J从该结点引出新结点继续所述重映射记录。
6.一种实现写时复制保护元数据的方法,包括当用户提出了数据读写请求时,根据元数据的读写请求所要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系;将需频繁读写的元数据块缓存在内存中,将新块和根据用户数据的读写请求要读写的块定时向磁盘刷新。
7.按照权利要求6所述的方法,其特征在于,在根据元数据的读写请求所要读写的块在重映射记录中查找相应的块之前,还包括采用一个具有哈希数组结构的映射表作为所述重映射记录,通过该映射表的结点记录原始块号和映射的新块号。
8.按照权利要求7所述的方法,其特征在于,所述根据元数据的读写请求所要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,具体包括如果确认是针对元数据的读请求,根据给定块号在所述映射表中查找相应的块,若找到,则将该给定块号置为相应结点中所述映射的新块号;若没找到,则直接使用该给定块号在定时向磁盘刷新事务时读取相应的元数据;如果确认是元数据写请求,根据给定块号在所述映射表中查找相应的块,若找到,则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射块的新块号释放;若没找到,则在所述映射表中插入将该给定块号作为写复制后新块号的结点。
9.按照权利要求7所述的方法,其特征在于,所述哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与所述重映射记录中的结点出现冲突时,贝1J从该结点引出新结点继续所述重映射记录。
10.按照权利要求7至9任一项所述的方法,其特征在于,还包括当所述映射表中的映射达到预先设置的一个阀值时,统一进行写时复制刷新操作,以清空该映射表。
全文摘要
本发明披露了一种实现写时复制保护元数据的装置及方法,其中装置包括数据读写模块在收到数据读写请求时,将针对元数据的请求提交重映射模块处理,将针对用户数据的请求提交事务刷新模块处理;重映射模块针对该数据读写请求,根据要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,同时将该新块提交给事务刷新模块;事务刷新模块将需频繁读写的元数据块缓存在内存中,根据数据读写模块或重映射模块各自的提交定时向磁盘刷新事务中的数据。本发明将重映射的方式与原有的缓存机制结合,大大提高了写时复制的优化效果。
文档编号G06F11/14GK102609335SQ20121000835
公开日2012年7月25日 申请日期2012年1月12日 优先权日2012年1月12日
发明者刘正伟, 王旭 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1