专利名称:一种连续数据保护系统的快照存储和数据恢复方法
技术领域:
本发明属于数据保护容灾备份技术领域,涉及一种连续数据保护系统的快照存储
和数据恢复方法,尤其涉及一种在块级连续数据保护系统中利用链表和关键节点集合来存储快照和数据恢复的方法。
背景技术:
在计算机领域,为了保护重要的数据信息,通常采用数据备份技术,在数据不可用时能从备份介质中恢复数据。但是在恢复数据时,两次备份之间的数据可能会丢失。对于一些关键的信息系统,所能容忍的数据丢失量,即恢复点目标(RPO,Recovery Point Object)要尽可能地低,这就需要应用连续数据保护(CDP, Continuous Data Protection)技术。
CDP技术的原理是将更改过的所有数据按时间顺序保存下来,每次写操作都会生成带有时间戳的数据块版本,在恢复数据时能够获取任意一个时间点的数据状态。其中,块级CDP是将一个磁盘,即逻辑单元(LUN, Logical Unit)划分为固定大小的数据块,以数据块为单位来记录数据变化,特点是与应用的耦合比较低,性能和效率优于文件级CDP。
当需要恢复数据到某个指定的时间点时,CDP系统可以从开始时间点一直到指定的时间点遍历所有已经记录的修改过的数据块,以恢复该时间点的数据状态,即获得该时间点的磁盘的每一个逻辑块地址(LBA,Logical Block Address)与CDP所记录的数据块之间的映射关系。 为了縮短遍历时间,通常需要在CDP系统中定期产生数据快照,将某个时刻的映射关系存储起来。当需要恢复快照时刻的数据时,就可以直接获得映射关系,而无需再遍历CDP日志;要恢复数据到其他时间点时,从该时间点之前的那一次快照开始,遍历CDP日志直到该时间点,即可获得映射关系,而无须从开始时间点遍历。 数据快照越密集,数据恢复所需的时间就越短,能够满足更低的数据恢复时间目标(RTO, Recovery Time 0b ject)。然而,CDP系统生成快照时需要保存每一个块地址(LBA)到日志数据块之间的映射,因此需要付出较多的存储空间。
发明内容
本发明的目的在于提供一种连续数据保护系统中的快照存储和数据恢复方法,针
对块级CDP系统,能够使用少量的存储空间就可以保存快照时刻的映射关系,从而实现支
持更密集的数据快照,有利于縮短数据恢复时间。 为实现上述目的,本发明所采用的技术方案如下 在块级连续数据保护系统中,对磁盘数据块的每一个写操作,都有一个记录该写操作的CDP元数据。将CDP元数据作为一个链表节点,该节点中除了包含数据块的块号以外,还设置前向链接、上行链接、下行链接这3个字段。在此基础上,构造一个二叉树,记录各个关键链表节点的表头,即形成关键节点集合,从这些表头出发的链表能够反映当前时刻磁盘每一个块地址(LBA)到日志数据块映射关系。
3
当CDP系统捕获到对磁盘数据块的一个写操作时,便生成一个链表节点。CDP系 统在日志数据区中记录数据块的数据内容,并在链表节点中记录数据块的块号,同时更新 本节点和相关节点的前向链接、上行链接、下行链接字段。此时,数据块和链表节点分别写 入CDP日志,同时更新二叉树,维护关键节点集合,即增加、删除集合中的节点,使之实时反 映磁盘数据块和日志数据区之间的映射状态。 当需要保存当前时刻的快照时,将二叉树中所有的节点内容作为快照的元数据。
这个二叉树和CDP元数据中的关键链表,代表了快照时刻的映射关系。 当需要恢复快照时,首先从快照的元数据中获取有效表头,再通过CDP日志中的
链表节点,从表头开始,沿着节点中的上行链接和下行链接进行搜索,从而获得所有数据块
的映射关系。 当需要恢复快照之外的其它时间点数据时,首先恢复到该时间点之前的一次快 照,获得该快照时刻的映射关系,再遍历快照时刻到该时间点之间的CDP元数据,根据元数 据内容更新映射关系。
有益效果 本发明方法,对比现有技术,具有以下优点 1)生成快照时,仅需保存二叉树即可,而不需要直接保存磁盘的所有数据块在日 志中的存储位置,从而减少了保存CDP快照所需要的存储空间,提高了快照的存储效率。
2)縮短了数据恢复时间。由于减少了快照占用的存储空间,CDP系统可以以较高 的频率(即较短的间隔)生成快照。由于快照频率的增加,两个快照之间的数据量变化相 应减少,恢复数据所必须遍历的元数据较少,因此可以较快地完成数据恢复。
图1为数据结构示意图;
图2为关键节点示意图。
具体实施例方式
下面结合附图和具体实施例对本发明作进一步详细说明。
—种连续数据保护系统中的快照存储和数据恢复方法,其技术方案如下 在块级连续数据保护系统中,对磁盘数据块的每一个写操作,都有一个记录该操
作的CDP元数据。将CDP元数据作为一个链表节点,该节点中除了包含数据块的块号以外,
还设置前向链接、上行链接、下行链接3个字段。在此技术上,构造一个二叉树,记录各个关
键链表的表头(即关键节点集合),从这些表头出发的链表能够反映当前时刻的映射关系。
下面进行具体说明。 —、CDP日志及快照中的元数据结构,如图1所示。
1. CDP日志 CDP日志包括数据区和元数据区。其中,数据区保存数据块,元数据区保存CDP元 数据(即链表节点)。 按文件系统或上层应用的最小访问粒度确定数据块的大小(例如,每个数据块的 大小为4KB),将整个磁盘划分N个数据块,块地址的范围为0到N-l。
2.链表节点 每一个链表节点对应于一个数据块写操作。链表节点作为CDP元数据,它包括4 个字段数据块的块号、前向链接、上行链接、下行链接字段。 CDP日志中的链表节点在日志元数据区中顺序存放。日志元数据区能容纳的节点 总数为M。链表节点的序号为1到M-l,节点编号记为Ck, 1《k《M-l, CDP系统不使用链 表节点0。同时,设置一个计数器,从l开始计数,每记录一个数据块写操作(即在日志中加 入一个CDP元数据)后,计数器加l。链表节点的序号就是当前时刻计数器的计数值。
对于第k个数据块写操作(S卩,计数器计数值为k时接收到的写操作),CDP系统 把要写入该数据块的数据保存到CDP日志的数据区中,块地址为k,并把这个操作的元数据 存储在链表节点Ck中。Ck中存储的内容为
Ck. L :该数据块的块号L ; Ck. V :前向链接,该数据块的下一次写操作的元数据节点序号V ; Ck. p :上行链接,该数据块的上一个数据块(即块号为L-l的数据块)的当前节点
序号P; Ck. q :下行链接,该数据块的下一个数据块(即块号为L+l的数据块)的当前节点 序号q 图2表示了 15次数据块写操作的链表节点。如图所示,共有8个数据块,块号为 0至7,其中数据块5未被写入。每个链表节点表示一次数据块写入操作,图中的横坐标是 链表节点Q至C15的时刻,纵坐标是写入的数据块块号。例如,数据块6在时刻7和时刻13 被写入,生成C7、C『图中实线箭头表示上行链接,指向左下方的虚线箭头表示下行链接,指 向右方的水平虚线箭头表示前向链接。
3. 二叉树P 设置一个二叉树P,用于保存当前时刻的关键节点集合,且P按照节点块号大小 顺序索引。关键节点集合是CDP日志中链表节点的一个子集,对于每一次数据块写入操 作,CDP系统将修改相关的链表节点并调整关键节点集合,反映当前时刻所有磁盘数据块在 CDP日志数据区的存储位置。从关键节点集合中的节点出发,沿着上行、下行链接,能够获得 所有数据块的最近的一次写入操作的节点序号。 以图2为例,时刻8的关键节点集合为{C6, C8}。沿C6的上行链接可以找到C5、 C2 和Q,而这三个节点分别是时刻8数据块3、数据块2和数据块1的最新修改。同时块C6还 可以沿下行链接找到C4,它是数据块4在该时刻的最新修改。沿C8的上行链接可以找到C7, 它是数据块6在该时刻的最新修改。 C5则不是时间点8的关键节点,因为它沿下行链接找到的是C3,而C3对应的数据 块在时间点8的最新修改由C6所记录。 图2中数据块5未被修改,因此链表节点C4和C7的下行和上行链接被置为0。
4.映射表S CDP系统在内存中设置一个映射表S, 一共N项,每一项记录一个磁盘数据块的最 后一次写入操作,即该操作的CDP元数据链表节点序号。节点序号为0时,表示该数据块未 被修改。 5.秒级索引I
5
恢复时间点可以精确到秒级,CDP系统设置一个索引表,每一秒在表的末尾增加一 项,记录当前时刻计数器的计数值。
6.快照元数据E 快照元数据包括快照名称、建立快照的时间(年、月、日、时、分、秒)、当前时刻的 计数值、二叉树P中关键节点集合。
7.磁盘原始数据区R 磁盘原始数据区的容量和要保护的磁盘相同,容纳N个数据块。在建立CDP系统 时,将磁盘上的所有数据块复制到磁盘原始数据区。 下面分别具体说明在CDP系统中的记录CDP日志、保存快照、恢复快照、恢复任意
时刻点数据的实现过程。
(1)记录数据块写入操作 CDP系统中记录一个磁盘数据块写操作(设其块号为B,O《B《N-l,要写入该块 的数据为D)的详细流程如下 1.取得当前计数器的计数值为k,计数值加1 ;k大于等于M时,日志区满,系统不 再记录数据块写操作。 2.将数据D写入到日志的数据区k。 3.构造此次数据块写操作的元数据即链表节点Ck, Ck的4个字段为Ck. L、 Ck. v、 Ck.p、Ck. q。 a) Ck. L = B,即记录该数据块对应的块号。 b)Cs[B].v = k。更新该数据块上次改写的前向链接v。从表S中取出该块上次改 写的链表节点序号S[B],使C⑩」的前向链接指向本链表节点Ck。 c)Ck. v = 0。本链表节点Ck的前向链接置空,下一次对块B的写操作才会设置 Ck. v。 d)构造上行链接。B = 0时,Ck. p = 0 ;否则Ck. p = S[B-1],本链表节点Ck的上 行链接指向上一块(B-l)的最后一次修改的链表节点。 e)构造下行链接。B = N-l时,Ck. q = 0 ;否则Ck. q = S[B+1],本链表节点Ck的
下行链接指向下一块(B+l)的最后一次修改的链表节点。 4.更新映射表S, S[B] = k。 5.更新时刻k的当前关键节点集合二叉树P。 a)将链表节点Ck插入到P。对于时刻k, Ck描述的是块B的最后更新,因此将Ck 插入二叉树P。 b)获取上行链接节点序号a = Ck. p,如果a不等于0且Ca在二叉树P中,则从树 中删除c;。因为如果写入块的上行链接指向上个时间点k-l的一个关键节点,则在时间点 k时它不再是关键节点。 c)获取上行链接节点序号b = Ck. p,如果b不等于0且Cb在二叉树P中,则从树 中删除c;。因为如果写入块的下行链接指向上个时间点k-l的一个关键节点,则在时间点 k时它不再是关键节点。
(2)保存快照 生成快照时,将快照名称、当前时间(年月日时分秒格式)、当前计数值、当前时刻的二叉树P中保存的关键节点等记录在快照元数据E中。其中二叉树P中的关键节点按照 节点中块号大小顺序存放在E中。要记录N个数据块的映射关系,映射表S需要N项,而二 叉树P只需要包含当前时刻的关键节点,它所占据的存储空间比映射表S要小。在测试中, P中保存的节点数量一般只占磁盘数据块数量N的1%左右。
(3)恢复快照时刻的磁盘数据 要恢复某一时刻k的快照,CDP系统需要根据该时间点的关键节点集合和日志构 建出该时刻的映射表S。 S的全部N项被初始化为0。对于快照时间点的关键节点集合中的每一个关键节 点Ci,执行以下操作 1.将该关键节点所记录的数据块写操作加入S,即S[Ci. L] = i。
2.从&节点出发,沿上行链接遍历,直到某个节点Cm的前向链接中的节点序号小 于k(即节点Cm所记录的块操作不是在时间点k时的最新修改),或上行链接为O,将途经 的每个节点(不包括节点Cm)加入S。 3.从&节点出发,沿下行链接遍历,直到某个节点Cn的前向链接中的节点序号小 于k(即节点Cn所记录的块操作不是在时间点k时的最新修改),或下行链接为0,将途经 的每个节点(不包括节点Cn)加入S。 计算机读取快照时刻的磁盘数据块(块号为B)时,CDP系统从映射表S中取出表 项j = S[B]。若j等于O,则该块未被修改,从原始磁盘数据区R中读取数据块(块号为 B);否则读取存CDP日志数据区中块地址为j的数据,即该快照中的磁盘数据块B的内容。
(4)恢复任意时刻的磁盘数据 用户指定一个时间(单位为秒),要构造某一时刻的映射表S, CDP系统执行以下 操作 1.在秒级索引I中获取该时刻的计数值h。 2.获取该时间点的前一个快照,按上述算法构造快照时间点k的映射表S。
3.读取CDP日志区的链表节点(序号范围为k到h),对于每一个链表节点Cj,按 顺序将Cj所记录的数据块写操作加入S,即S[Cj. L] = j。 计算机读取该时刻的磁盘数据块(块号为B)时,方法与读取快照时刻的磁盘数据 块相同。 实施例 下面结合图2进行实例说明。 在图2中,时刻11的关键节点集合为{CU,C8}。保存时刻ll的快照时,只需要将 Cn、Cs两个链表节点按块号由小到大的顺序(即Cn,C8,因为Cn. L = 3,C8. L = 8)保存。同 样,时刻10的关键节点集合为{C1Q, C6, Cn),当保存时刻10的快照时,只需要保存Q。, C6, Cu三个关键节点。 当需要恢复时刻11的快照时,将映射表S初始化为全O,并从快照元数据中读出 关键节点集合(Cn,Qj,首先取出链表节点Cn,将Cn记录的写操作加入S(即S[2] = 11)。 接着沿Cu的上行链接(图中实线箭头)在CDP的元数据区(链表节点区)中找到Q。,将 Qo加入S(S[l] = IO),又沿Q。的上行链接找到Cg并将之加入S(S[O] =9),当再次沿。9 的上行链接查找时,发现此链接为O,于是终止上行查找,转向下行查找。沿Cn的下行链接(图中虚线箭头)先后找到C6和C4并加入S,同样因为C4的下行链接为零,终止下行查找。 此时就完成了对关键节点Cu的处理,接着处理关键节点集合中的下一个节点C8。 C8的上行 链接指向C7,而C7的上行链接为0, C8的下行链接也为0,因此,对C8的处理将C8和C7加入 S, S的内容为:S[O] = 9, S[l] = 10, S[2] = 11, S[3] = 6, S[4] = 4, S[5] = 0, S[6]= 7, S[7] = 8,即为时刻11时所有块号的最新修改。 S[5] = O,表示CDP日志数据区未记录磁盘块5的修改,而时刻11数据块0、1、2、 3、4、6、7的内容可以从CDP日志数据区中的数据块9、10、11、6、4、7、8中获取。
当要恢复时刻10的快照时,步骤和恢复时刻11的快照一致,只是在对关键节点C1Q 进行下行查找时,当找到C5时稍有区别。此时C5的下行链接指向Q,但C3的前向链接(图 中双点线)指向&,而C6是在时刻10之前写入的(6 < 10),因此下行查找终止。C3的前向 链接指出了 C3不是块号3在时刻10的最新修改。
权利要求
一种连续数据保护系统中的快照存储和数据恢复方法,其特征在于在块级连续数据保护系统中,对磁盘数据块的每一个写操作,都有一个记录该写操作的CDP元数据;将CDP元数据作为一个链表节点,该节点中除了包含数据块的块号以外,还设置前向链接、上行链接、下行链接这3个字段;在此基础上,构造一个二叉树,记录各个关键链表节点的表头,即形成关键节点集合,从这些表头出发的链表能够反映当前时刻磁盘每一个块地址到日志数据块映射关系;当CDP系统捕获到对磁盘数据块的一个写操作时,便生成一个链表节点;CDP系统在日志数据区中记录数据块内容,并在链表节点中记录数据块的块号,同时更新本节点和相关节点的前向链接、上行链接、下行链接字段;此时,数据块和链表节点分别写入CDP日志,同时更新二叉树,维护关键节点集合,即增加、删除集合中的节点,使之实时反映磁盘数据块和日志数据区之间的映射状态;当需要保存当前时刻的快照时,将二叉树中所有的节点内容作为快照的元数据;这个二叉树和CDP元数据中的关键链表,代表了快照时刻的映射关系;当需要恢复快照时,首先从快照的元数据中获取有效表头,再通过CDP日志中的链表节点,从表头开始,沿着节点中的上行链接和下行链接进行搜索,从而获得所有数据块的映射关系;当需要恢复快照之外的其它时间点数据时,首先恢复到该时间点之前的一次快照,获得该快照时刻的映射关系,再遍历快照时刻到该时间点之间的CDP元数据,根据元数据内容更新映射关系。
全文摘要
本发明公开了一种连续数据保护系统中的快照存储和数据恢复方法。针对块级CDP系统,在块级连续数据保护系统中,对磁盘数据块的每一个写操作,都有一个记录该写操作的CDP元数据。将CDP元数据作为一个链表节点,该节点中除了包含数据块的块号以外,还设置前向链接、上行链接、下行链接这3个字段。在此基础上,构造一个二叉树,记录各个关键链表节点的表头,即形成关键节点集合,从这些表头出发的链表能够反映当前时刻磁盘每一个块地址到日志数据块映射关系。本方法能够使用少量的存储空间就可以保存快照时刻的映射关系,从而实现支持更密集的数据快照,有利于缩短数据恢复时间。
文档编号G06F12/06GK101777016SQ20101918501
公开日2010年7月14日 申请日期2010年2月8日 优先权日2010年2月8日
发明者周泽湘, 李虓, 王成武, 谭毓安, 郭毅 申请人:北京同有飞骥科技有限公司