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

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

Info

Publication number
CN102609335B
CN102609335B CN201210008357.5A CN201210008357A CN102609335B CN 102609335 B CN102609335 B CN 102609335B CN 201210008357 A CN201210008357 A CN 201210008357A CN 102609335 B CN102609335 B CN 102609335B
Authority
CN
China
Prior art keywords
write
piece
module
read
metadata
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210008357.5A
Other languages
English (en)
Other versions
CN102609335A (zh
Inventor
王旭
刘正伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Beijing Electronic Information Industry Co Ltd
Original Assignee
Inspur Beijing Electronic Information Industry Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Beijing Electronic Information Industry Co Ltd filed Critical Inspur Beijing Electronic Information Industry Co Ltd
Priority to CN201210008357.5A priority Critical patent/CN102609335B/zh
Publication of CN102609335A publication Critical patent/CN102609335A/zh
Application granted granted Critical
Publication of CN102609335B publication Critical patent/CN102609335B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明披露了一种实现写时复制保护元数据的装置及方法,其中装置包括:数据读写模块在收到数据读写请求时,将针对元数据的请求提交重映射模块处理,将针对用户数据的请求提交事务刷新模块处理;重映射模块针对该数据读写请求,根据要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,同时将该新块提交给事务刷新模块;事务刷新模块将需频繁读写的元数据块缓存在内存中,根据数据读写模块或重映射模块各自的提交定时向磁盘刷新事务中的数据。本发明将重映射的方式与原有的缓存机制结合,大大提高了写时复制的优化效果。

Description

一种实现写时复制保护元数据的装置及方法
技术领域
本发明涉及计算机应用中的数据保护技术,尤其涉及通过写时复制方式对元数据进行保护的装置及方法。
背景技术
计算机系统在结构上大致可分为CPU、存储子系统以及I/O子系统。其中,存储子系统和I/O子系统都可以统归结为数据子系统。从更抽象的层次上看,可以将计算机系统分成计算和数据两大部份。其中,对于数据部分可分为用户数据和元数据;用户数据是用户本身的数据,而元数据则是“数据的数据”,即作为了管理用户数据的那部份数据。元数据用以描述用户数据,如果在一个存储系统中元数据遭损坏,那么其影响要远远大于用户数据的损坏或丢失。可见,在计算机系统中对元数据的灾难恢复和保护具有十分重要的意义。
受限于最初的硬件存储设备其速度与容量的限制,最初的存储系统,如FAT、EXT2(不同的文件系统),对元数据采取的是灾难恢复策略,即如果机器在写入数据的时候发生断电或宕机,则在其下次启动的时候会去通过扫描整个存储设备来恢复,以保证存储设备的一致性。可以说这种方式对存储子系统的保护功能几乎是没有,而且恢复所需的扫描时间往往是令人难以接受的。
为了对元数据进行保护,现有的存储系统一般有两种方法:写日志和写时复制。其中,写日志是使用一个独立的磁盘或是文件作为日志,在元数据发生更改写入时,先写入日志,再去更改元数据。在发生断电或是宕机后,只需扫描这个日志文件就可以达到元数据一致性恢复的目的。这种方式将数据存储和日志分隔开,以日志的方式确保元数据的一致性。Ext3、Ext4就是使用这种方式对元数据进行保护。写时复制是要更改数据结构中元数据的时候,先将要被更改的元数据复制一份,再去更改该元数据,依次类推;然后在该数据结构中规定的若干位置选择一个结点,写入指向最新元数据的块地址即可。在这种方式下,机器若发生断电或是宕机,则其下次启动只需扫描每个规定位置的数据块便可实现恢复。
采用写时复制一般对元数据会采用类似于树形的数据结构去组织,而会有一个类似于超级块的根结点指向树的根。存储系统中存在多个这样的根结点,如图1所示,多个根结点之间以序号的大小来区分所指向的整个元数据树的新与旧。在存储系统有元数据要写入时,如果在树形结构中某个结点发生了写时复制,那么这个结点的父结点也会随之发生改变,即该父结点也会发生写时复制,这是一种连锁反应,直至这个树的根最终也发生写时复制。显然,这种方式,每一次一个结点上元数据的更改,都需要通过大量的I/O读写操作来读写大量的块,费时且费存储资源。因此,亟待加以改进和优化。
目前,针对写时复制的优化大部份采用缓存机制的方式,即对数据写入操作先缓存一段时间后,再将其刷入磁盘。根据数据读写的局部性,如果一个块已被进行写时复制,并且对这个块的二次更改和第一次更改是在同一个事务内,则不需要针对这个块的二次更改再进行写时复制,直接更改即可。这种方式减少了写时复制的I/O读写操作,但其改进和优化的效果非常有限,仍有待于进一步进行优化。
发明内容
本发明所要解决的技术问题是提供一种实现写时复制保护元数据的装置及方法,能够明显地减少写时复制时的I/O读写操作,从而提高写时复制的优化效果。
为了解决上述技术问题,本发明提供了一种实现写时复制保护元数据的装置,除了包括相互连接的数据读写模块和事务刷新模块外,还包括与数据读写模块连接的重映射模块,其中:
数据读写模块,用于在收到数据读写请求时,将针对元数据的请求提交重映射模块处理,将针对用户数据的请求提交事务刷新模块处理;
重映射模块,用于针对该数据读写请求,根据要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,同时将该新块提交给事务刷新模块;
事务刷新模块,用于将需频繁读写的元数据块缓存在内存中,根据数据读写模块或重映射模块各自的提交定时向磁盘刷新事务中的数据。
进一步地,
重映射模块采用一个具有哈希数组结构的映射表作为重映射记录,通过该映射表的结点记录原始块号和映射的新块号;哈希数组的大小采用可配置的方式配置。
进一步地,
重映射模块如果确认是针对元数据的读请求,根据给定块号在映射表中查找相应的块,若找到,则将该给定块号置为相应结点中映射的新块号;若没找到,则将该给定块号提交给事务刷新模块;
事务刷新模块根据重映射模块提交的给定块号在向磁盘刷新事务时从硬盘上读取相应的元数据。
进一步地,
重映射模块如果确认是元数据写请求,根据给定块号在映射表中查找相应的块,若找到,则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射的块号释放;若没找到,则在映射表中插入将该给定块号作为写复制后新块号的结点。
进一步地,
哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与重映射记录中的结点出现冲突时,则从该结点引出新结点继续重映射记录。
为了解决上述技术问题,本发明提供了一种实现写时复制保护元数据的方法,包括:
当用户提出了数据读写请求时,根据元数据的读写请求所要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系;
将需频繁读写的元数据块缓存在内存中,将新块和根据用户数据的读写请求要读写的块定时向磁盘刷新。
进一步地,在根据元数据的读写请求所要读写的块在重映射记录中查找相应的块之前,还包括:
采用一个具有哈希数组结构的映射表作为重映射记录,通过该映射表的结点记录原始块号和映射的新块号。
进一步地,根据元数据的读写请求所要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,具体包括:
如果确认是针对元数据的读请求,根据给定块号在所述映射表中查找相应的块,若找到,则将该给定块号置为相应结点中所述映射的新块号;若没找到,则直接使用该给定块号在定时向磁盘刷新事务时读取相应的元数据;
如果确认是元数据写请求,根据给定块号在所述映射表中查找相应的块,若找到,则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射块的新块号释放;若没找到,则在映射表中插入将该给定块号作为写复制后新块号的结点。
进一步地,
哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与所述重映射记录中的结点出现冲突时,则从该结点引出新结点继续所述重映射记录。
进一步地,该方法还包括:
当映射表中的映射达到预先设置的一个阀值时,统一进行写时复制刷新操作,以清空该映射表。
本发明通过在要更改元数据进行写时复制时将重映射的方式与原有的缓存机制结合,即如果需要对一个块的元数据进行更改,则只针对该块进行写时复制,同时在重映射记录中加入对旧块与新块映射关系的记录,以此避免对其它不相干的块进行写时复制操作,从而大大提高了写时复制的优化效果。
附图说明
图1是写时复制的典型磁盘数据结构;
图2是本发明的实现写时复制保护元数据的装置实施例的结构框图;
图3是图2中重映射模块所采用的Hash结构示意图;
图4是本发明的实现写时复制保护元数据的方法实施例的流程图。
具体实施方式
下面结合附图和优选实施例对本发明的技术方案进行详细地阐述。应该理解,以下列举的实施例仅用于说明和解释本发明,而不构成对本发明技术方案的限制。
本发明针对典型的采用写时复制的存储系统的磁盘结构,如图1所示;其中根结点有多个,元数据树的个数随着根结点的个数,且位置固定。在提交事务时,选择当前根结点的下一个根结点位置进行写入。在系统启动时,依次扫描每一个根结点的位置,试图找到最新的根结点。元数据树以树形结构或类似树形的结构存储元数据。
本发明在需要对一个元数据块进行更改时,则只针对该块进行写时复制,同时在重映射记录(哈希映射表)中加入对原始块与新块映射关系的记录结点,以避免对其它不相干的块进行写时复制操作。在提交事务时,重映射记录将随同根结点一同被写入磁盘。当重映射记录中的映射达到一定程度时,统一进行一次写时复制操作,以清空重映射记录。
如图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映射表中的映射达到这个阀值时,进行该写时复制刷新操作。

Claims (10)

1.一种实现写时复制保护元数据的装置,包括相互连接的数据读写模块和事务刷新模块,其特征在于,还包括分别与数据读写模块和事务刷新模块连接的重映射模块,其中:
数据读写模块,用于在收到数据读写请求时,将针对元数据的请求提交重映射模块处理,将针对用户数据的请求提交事务刷新模块处理;
重映射模块,用于针对所述数据读写请求,根据要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,同时将该新块提交给事务刷新模块;
事务刷新模块,用于将需频繁读写的元数据块缓存在内存中,根据数据读写模块或重映射模块各自的提交定时向磁盘刷新事务中的数据。
2.按照权利要求1所述的装置,其特征在于,
所述重映射模块采用一个具有哈希数组结构的映射表作为所述重映射记录,通过该映射表的结点记录原始块号和映射的新块号;所述哈希数组的大小采用可配置的方式配置。
3.按照权利要求2所述的装置,其特征在于,
所述重映射模块如果确认是针对元数据的读请求,根据给定块号在所述映射表中查找相应的块,若找到,则将该给定块号置为相应结点中所述映射的新块号;若没找到,则将该给定块号提交给事务刷新模块;
所述事务刷新模块根据所述重映射模块提交的所述给定块号在向磁盘刷新事务时从硬盘上读取相应的元数据。
4.按照权利要求2所述的装置,其特征在于,
所述重映射模块如果确认是元数据写请求,根据给定块号在所述映射表中查找相应的块,若找到,则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射的块号释放;若没找到,则在所述映射表中插入将该给定块号作为写复制后新块号的结点。
5.按照权利要求2至4任一项所述的装置,其特征在于,
所述哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与所述重映射记录中的结点出现冲突时,则从该结点引出新结点继续所述重映射记录。
6.一种实现写时复制保护元数据的方法,包括:
当用户提出了数据读写请求时,根据元数据的读写请求所要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系;
将需频繁读写的元数据块缓存在内存中,将新块和根据用户数据的读写请求要读写的块定时向磁盘刷新。
7.按照权利要求6所述的方法,其特征在于,在根据元数据的读写请求所要读写的块在重映射记录中查找相应的块之前,还包括:
采用一个具有哈希数组结构的映射表作为所述重映射记录,通过该映射表的结点记录原始块号和映射的新块号。
8.按照权利要求7所述的方法,其特征在于,所述根据元数据的读写请求所要读写的块在重映射记录中查找相应的块,并记录新块与原始块对应的映射关系,具体包括:
如果确认是针对元数据的读请求,根据给定块号在所述映射表中查找相应的块,若找到,则将该给定块号置为相应结点中所述映射的新块号;若没找到,则直接使用该给定块号在定时向磁盘刷新事务时读取相应的元数据;
如果确认是元数据写请求,根据给定块号在所述映射表中查找相应的块,若找到,则在相应结点将该块映射的新块号置为写时复制分配的块号,同时将原来映射块的新块号释放;若没找到,则在所述映射表中插入将该给定块号作为写复制后新块号的结点。
9.按照权利要求7所述的方法,其特征在于,
所述哈希数组结构采用拉链法解决哈希冲突,即当通过哈希函数取得的结果与所述重映射记录中的结点出现冲突时,则从该结点引出新结点继续所述重映射记录。
10.按照权利要求7至9任一项所述的方法,其特征在于,还包括:
当所述映射表中的映射达到预先设置的一个阀值时,统一进行写时复制刷新操作,以清空该映射表。
CN201210008357.5A 2012-01-12 2012-01-12 一种实现写时复制保护元数据的装置及方法 Active CN102609335B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210008357.5A CN102609335B (zh) 2012-01-12 2012-01-12 一种实现写时复制保护元数据的装置及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210008357.5A CN102609335B (zh) 2012-01-12 2012-01-12 一种实现写时复制保护元数据的装置及方法

Publications (2)

Publication Number Publication Date
CN102609335A CN102609335A (zh) 2012-07-25
CN102609335B true CN102609335B (zh) 2014-07-02

Family

ID=46526727

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210008357.5A Active CN102609335B (zh) 2012-01-12 2012-01-12 一种实现写时复制保护元数据的装置及方法

Country Status (1)

Country Link
CN (1) CN102609335B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103886070A (zh) * 2014-03-21 2014-06-25 华为技术有限公司 文件系统的数据回收方法及装置
CN104391802A (zh) * 2014-11-24 2015-03-04 浪潮电子信息产业股份有限公司 一种精简池元数据节点刷新一致性保护方法
CN106708665A (zh) * 2016-12-20 2017-05-24 华为技术有限公司 一种元数据修复方法和装置
KR102234725B1 (ko) * 2017-05-30 2021-04-02 에스케이하이닉스 주식회사 컨트롤러 및 메모리 시스템 및 메모리 시스템의 동작 방법
CN110928493B (zh) * 2019-10-31 2022-07-22 苏州浪潮智能科技有限公司 一种元数据模块及元数据模块处理方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101183383A (zh) * 2007-12-17 2008-05-21 中国科学院计算技术研究所 一种快照系统及其使用方法
CN101814044A (zh) * 2010-04-19 2010-08-25 中兴通讯股份有限公司 元数据处理方法及装置
CN101819544A (zh) * 2010-03-02 2010-09-01 王静 基于动态数据区的硬盘数据保护与还原方法
CN102073739A (zh) * 2011-01-25 2011-05-25 中国科学院计算技术研究所 带有快照功能的分布式文件系统中的数据读与数据写方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1955207A4 (en) * 2005-10-14 2011-08-24 Symantec Operating Corp TECHNIQUE FOR ENHANCING THE EXTENSIBILITY AND PORTABILITY OF A STORAGE MANAGEMENT SYSTEM

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101183383A (zh) * 2007-12-17 2008-05-21 中国科学院计算技术研究所 一种快照系统及其使用方法
CN101819544A (zh) * 2010-03-02 2010-09-01 王静 基于动态数据区的硬盘数据保护与还原方法
CN101814044A (zh) * 2010-04-19 2010-08-25 中兴通讯股份有限公司 元数据处理方法及装置
CN102073739A (zh) * 2011-01-25 2011-05-25 中国科学院计算技术研究所 带有快照功能的分布式文件系统中的数据读与数据写方法

Also Published As

Publication number Publication date
CN102609335A (zh) 2012-07-25

Similar Documents

Publication Publication Date Title
CN105574104B (zh) 一种基于ObjectStore的LogStructure存储系统及其数据写入方法
Stoica et al. Enabling efficient OS paging for main-memory OLTP databases
WO2016086819A1 (zh) 将数据写入叠瓦状磁记录smr硬盘的方法及装置
CN102609335B (zh) 一种实现写时复制保护元数据的装置及方法
CN101777017B (zh) 一种连续数据保护系统的快速恢复方法
CN102521330A (zh) 一种桌面虚拟化环境下的镜像分布式存储方法
CN104077380B (zh) 一种重复数据删除方法、装置及系统
CN105242871A (zh) 一种数据写入方法及装置
CN106021031B (zh) 一种btrfs文件系统的删除数据恢复方法和装置
CN107491523A (zh) 存储数据对象的方法及装置
WO2016095151A1 (en) Storing log records in a non-volatile memory
CN105302744A (zh) 高速缓存器的无效数据区
CN103019887A (zh) 数据备份方法及装置
US11144508B2 (en) Region-integrated data deduplication implementing a multi-lifetime duplicate finder
Lee et al. An efficient index buffer management scheme for implementing a B-tree on NAND flash memory
US20160188462A1 (en) Method and apparatus for partial garbage collection in filesystems
CN104616680A (zh) 基于光盘存储的重复数据删除系统及数据操作方法、装置
CN103383666A (zh) 改善缓存预取数据局部性的方法和系统及缓存访问方法
CN103942301A (zh) 一种面向多数据类型访问应用的分布式文件系统
CN106909323B (zh) 适用于dram/pram混合主存架构的页缓存方法及混合主存架构系统
CN100580669C (zh) 在Flash存储介质上的关于文件分配表的缓存实现方法
JP2007220107A (ja) 不揮発性メモリのマッピング情報管理装置及び方法
KR20210086150A (ko) 메모리 스왑 방법 및 시스템
TWI774388B (zh) 資料同步方法
CN110134551B (zh) 一种持续数据保护方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant