连续数据保护系统在远程备份设备临时异常时的保护方法转让专利

申请号 : CN200810225597.4

文献号 : CN101408855B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 鞠秀芳生拥宏刘宏鞠大鹏徐学雷汪东升李泓

申请人 : 北京威视数据系统有限公司清华大学

摘要 :

本发明涉及连续数据保护系统在远程备份设备临时异常时的保护方法,属于计算机数据存储技术领域,包括:判断被保护卷的写操作:写数据复制:根据当前工作状态将创建的写请求包进行本地缓存或远程发送;将接收到的写请求包先在内存中进行缓存,当写请求包缓存到预先设定的数量后,将内存中缓存的请求包写到本地磁盘上;如果发送失败,定期检查远程备份设备的运行状况。本发明适用于块级连续数据保护系统的实现,在系统将变化数据通过网络发送到远程数据备份设备时,如果远程备份设备发生异常,采用本方法能保证连续变化的数据内容不会丢失,为连续数据保护系统的任意点数据恢复提供保障。

权利要求 :

1.一种连续数据保护系统在远程备份设备临时异常时的保护方法,其特征在于,包括以下步骤:

1)判断被保护卷的写操作:从文件系统驱动层发往磁盘驱动层的I/O请求包中判断出被保护卷的写操作的请求包,提取请求包中写数据和存放地址;

2)写数据复制:创建一份新的写请求包,将步骤1)提取的内容置入所述新创建的写请求包中,再将新创建的写请求包置入等待队列;

3)根据当前工作状态进行不同的操作,将步骤2)中创建的写请求包进行本地缓存或远程发送;若进行本地缓存则进入步骤4),若进行数据远程发送进入步骤5);

4)将接收到的写请求包先在内存中进行缓存,当写请求包缓存到预先设定的数量后,将内存中缓存的请求包写到本地磁盘上;然后转入步骤6);

5)如果本地磁盘或内存中有写请求包,先将本地缓存的写请求包发送到远程备份中心后,再将新接收的写请求包发送到远程备份设备,发送成功后进入步骤1);如果发送失败,进入步骤6);

6)定期检查远程备份设备的运行状况,一旦检测到远程备份设备恢复正常,转入步骤1);

所述步骤2)包括以下步骤:

(21)获取被保护卷的设备锁;

(22)根据远程备份设备的设备栈信息,创建新的写请求包;

(23)将被保护卷写请求包中的关键字、偏移、长度、主功能、次功能域值赋给新创建的写请求包中的对应域;

(24)按被保护卷写请求包中的数据长度大小申请内存空间,将被保护卷中的数据内容复制至新申请的内存中;将新创建的写请求包的数据指针指向所述内存空间;

(25)设置新创建的写请求包的完成例程;

(26)将新创建的写请求包置入等待队列中;

(27)释放被保护卷的设备锁;

所述步骤3)中,所述工作状态设有以下5种,各工作状态之间的转换为:初始状态:刚加载时,工作状态为初始状态;如果发现远程备份设备初始化异常,则进入日志状态,如果远程备份设备初始化完毕,则进入正常工作状态;

正常工作状态:在该工作状态下,将新创建的写请求包写入远程备份设备;如果远程备份设备发生异常,则进入日志状态;

日志状态:在该工作状态下,按顺序将新创建的写请求包按照多日志文件存储策略进行日志缓存;如果远程备份设备恢复正常,进入恢复状态;

恢复状态:在该工作状态下,清空日志文件中的写请求包,直至最后一个日志;如果在恢复状态下远程备份设备发生异常,则进入日志状态;在清空日志文件至只剩下一个日志文件时,进入中间状态;

中间状态:在该工作状态下,新创建的写请求包不写入日志文件,临时缓存在本地内存中,即使新产生的写请求包数量满足写日志的条件也不写日志文件;本地缓存的请求包发送完,进入正常工作状态。

2.如权利要求1所述的方法,其特征在于,所述步骤1)包括以下步骤:(11)在接收到一个写请求包时,判断该请求包是否是写往被保护卷,如果是则进行步骤(12);如果不是,则直接转入步骤(14);

(12)如果提取请求包的标志类型为DO_BUFFERED_IO,从系统缓存中提取数据内容;如果提取请求包的标志类型为DO_DIRECT_IO,从非分页内存中提取数据内容,转入步骤(13),否则按NEITHER进行处理后转入步骤(13);

(13)从ByteOffset域值中提取写地址内容;

(14)将被保护卷写请求包通过IoCallDriver函数发送到端口驱动程序。

3.如权利要求1所述的方法,其特征在于,所述多日志文件存储策略为:将被保护卷当前内存缓存的多个写请求包按日志文件预先设定值顺序组织成多个日志文件写入本地磁盘。

4.如权利要求1所述的方法,其特征在于,所述步骤4)包括以下步骤:(41)获取写请求包所在的队列锁;

(42)判断写请求包的数量是否达到预先设定的数目,如果是,进入步骤(43);不是,进入步骤(45);

(43)将预先设定数目的写请求包写入本地磁盘中的一个新的日志文件;

(44)将写入日志文件的写请求包从队列中释放;

(45)释放写请求包所在的队列锁,进入步骤6)。

5.如权利要求1所述的方法,其特征在于,所述步骤5)包括以下步骤:(51)若当前处于“正常工作状态”或“中间状态”,获取写请求包缓存队列的互斥锁,得到队列的操作权,然后调用远程备份设备的底层驱动,逐一将写请求包发送至远程备份设备,然后进入步骤(53);否则进入步骤(52);

(52)如果处于“恢复状态”,则将磁盘日志文件中存储的写请求包发往远程备份设备;如果不是,转入步骤(51);

(53)数据发往远程备份设备后,在写请求包关联的完成例程中判断数据是否发送成功;

(54)如果数据发送不成功,将设备异常的信息上报至上层控制,同时终止自身的继续执行,进入步骤6);

(55)如果数据发送成功,则回到步骤1)。

说明书 :

技术领域

本发明属于计算机数据存储技术领域,主要解决连续数据保护系统中远程数据备份设备异常时,被保护的系统不能及时将自身变化数据内容通过网络发送到远程备份的问题。

背景技术

连续数据保护是一种数据的连续时间点的保护技术,其根本作用是能在故障瞬间完成任何时间点的故障恢复,从根本上解决传统备份中低恢复能力和非精细时间策略的先天弱点。连续数据保护系统能够捕捉被保护系统一切的数据改动,并提供记录着所有历史数据状态的数据变化。例如,如果物理上的同一地址的数据变化10次,连续数据保护系统将这10次数据变化全部记录下来,并发送到远程的备份服务器。这样连续保护系统能够在被保护系统发生故障时,能够通过远程数据备份设备保证被保护系统在任意时间点恢复。
从操作方式来看,连续数据保护系统的实现方法可以分为基于块的,基于文件的,或者是基于应用的。基于块的实现方法是位于物理储存或逻辑卷管理层之上。当数据块被写入主存储器时,写入的数据副本就被连续数据保护系统捕获并存储到一个独立地点中。与此类似的是,基于文件的连续数据保护系统的实现方法正好位于文件系统之上,它可以捕获文件系统数据和元数据事件,如文件创建、修改或删除等。基于应用的连续数据保护系统的实现方法则直接位于受保护的特定应用之中,这类应用提供深层的集成,并且作为应用自身的内置功能。
已公布的美国专利申请US 2005/0251540描述了一种用于数据保护和灾难恢复的数据管理系统,其中公布了在各主机中的一种特殊设备驱动器,该驱动器捕获数据修改和应用级事件并且将它们保存到日志以保证数据复制应用一致性。该专利未提及远程备份设备临时异常情况下,被保护系统如何将自身的数据变化内容进行存储的解决方法。在实际的应用中,远程备份系统异常是不可避免的,如网络中断造成远程备份系统连接不上。如果不能够在远程备份设备临时异常的情况下很好的保存被保护系统的数据变化,则连续数据保护系统就不能提供任意历史时刻点的数据恢复。

发明内容

本发明的目的是解决远程备份设备临时异常情况下,连续数据保护系统能够将捕获的数据变化内容不丢失的问题,提出一种连续数据保护系统在远程备份设备临时异常时的保护方法。本发明适用于块级连续数据保护系统的实现,在系统将变化数据通过网络发送到远程数据备份设备时,如果远程备份设备发生异常,采用本方法能保证连续变化的数据内容不会丢失,为连续数据保护系统的任意点数据恢复提供保障。
本发明提出的连续数据保护系统在远程备份设备临时异常时的保护方法,包括以下步骤:
1)判断被保护卷的写操作:从文件系统驱动层发往磁盘驱动层的I/O请求包中判断出被保护卷的写操作的请求包,提取请求包中写数据和存放地址;
2)写数据复制:创建一份新的写请求包(IRP,I/O request Package),将步骤1)提取的内容置入所述新创建的写请求包中,再将新创建的写请求包置入等待队列;
3)根据当前工作状态进行不同的操作,将步骤2)中创建的写请求包进行本地缓存或远程发送;若进行本地缓存则进入步骤4),若进行数据远程发送进入步骤5);
4)将接收到的写请求包先在内存中进行缓存,当写请求包缓存到预先设定的数量后,将内存中缓存的请求包写到本地磁盘上;然后转入步骤6)
5)如果本地磁盘或内存中有写请求包,先将本地缓存的写请求包发送到远程备份中心后,再将新接收的写请求包发送到远程备份设备,发送成功后进入步骤1);如果发送失败,进入步骤6);
6)定期检查远程备份设备的运行状况,一旦检测到远程备份设备恢复正常,转入步骤1)。
本发明的技术特点和效果:
本发明能够及时发现远程备份设备的临时异常,本发明提出的多日志文件缓存方法能够缓存变化的数据内容,在缓存满时能够按照一定的格式在本地物理硬盘上存放。系统能够及时监测到远程备份设备的重新恢复,在远程备份设备恢复后及时将硬盘和内存中的数据按原来的接受顺序发送到远程备份设备。
本发明提出的在远程备份设备情况下将变化的数据在本地缓存和有效组织的方法,可以解决远程备份设备临时异常带来的数据丢失。在数据缓存策略上采用了独特的多日志文件存储策略,避免了单日志文件不支持同时从文件头写数据、文件尾读数据以及读完数据后截断文件的问题。在控制策略上,使用了控制状态机,满足系统在各种复杂状态的使用。方法中引入的远程备份设备状态监控方法,能及时发现远程备份设备的状态,在远程备份设备状态发生变化时能及时调整控制策略。该设计方法在文件系统下层实现,与上层应用无关,具有很强的通用性。
经过实验证明,该方法能解决连续数据保护系统在远程备份设备临时异常情况下对被保护卷变化数据的保护,为连续数据保护系统的任意历史点恢复提供数据保障。

附图说明

图1为本发明的方法流程图。
图2为本发明的判断被保护卷的写操作的方法流程图。
图3为本发明的写数据复制流程图。
图4为本发明的数据在本地缓存的流程图。
图5为本发明的数据在本地缓存的组织结构图。
图6为本发明状态控制策略图。
图7为本发明的数据远程发送流程图。
图8为本发明的网络状态监控流程图。

具体实施方式

本发明提出的远程备份设备临时异常情况下将变化的数据在本地缓存和有效组织的方法结合附图及实施例进一步说明如下:
本发明的方法流程如图1所示,包括以下步骤:
1)判断被保护卷的写操作:从文件系统驱动层发往磁盘驱动层的I/O请求包中判断出被保护卷的写操作的请求包,提取请求包中写数据和存放地址;
2)写数据复制:创建一份新的写请求包(IRP,I/O request Package),将步骤1)提取的内容置入所述新创建的写请求包中,再将新创建的写请求包置入等待队列;
3)根据当前工作状态进行不同的操作,将步骤2)中创建的写请求包进行本地缓存或远程发送;若进行本地缓存则进入步骤4),若进行数据远程发送进入步骤5);
4)将接收到的写请求包先在内存中进行缓存,当写请求包缓存到预先设定的数量后,将内存中缓存的请求包写到本地磁盘上;然后转入步骤6)
5)如果本地磁盘或内存中有写请求包,先将本地缓存的写请求包发送到远程备份中心后,再将新接收的写请求包发送到远程备份设备,发送成功后进入步骤1);如果发送失败,进入步骤6);
6)定期检查远程备份设备的运行状况,一旦检测到远程备份设备恢复正常,转入步骤1)。
本发明的方法各步骤的具体实施例分别详细说明如下:
上述步骤1)的判断被保护卷的写操作具体实现方法如图2所示,包括以下步骤:
(11)在接收到一个写请求包时,判断该请求包是否是写往被保护卷,如果是则进行步骤(12);如果不是,则直接转入步骤(14);
(12)如果提取请求包的标志类型为DO_BUFFERED_IO,从系统缓存中提取数据内容;如果提取请求包的标志类型为DO_DIRECT_IO,从非分页内存中提取数据内容,转入步骤(13),否则按NEITHER进行处理后转入步骤(13);
(13)从ByteOffset域值中提取写地址内容;
(14)将被保护卷写请求包通过IoCallDriver函数发送到端口驱动程序。
上述步骤2)的具体实现方法如图3示,包括以下步骤:
(21)获取被保护卷的设备锁;
(22)根据远程备份设备的设备栈信息,创建新的写请求包;
(23)将被保护卷写请求包中的关键字、偏移、长度、主功能、次功能域值赋给新创建的写请求包中的对应域;
(24)按被保护卷写请求包中的数据长度大小申请内存空间,将被保护卷中的数据内容复制至新申请的内存中;将新创建的写请求包的数据指针指向所述内存空间;
(25)设置新创建的写请求包的完成例程(完成例程用于进行该请求包执行完远程备份设备写后判断是否写成功);
(26)将新创建的写请求包置入等待队列中;
(27)释放被保护卷的设备锁。
上述步骤3)中,根据当前工作状态进行不同的操作,工作状态说明如图4所示,具体说明如下:
工作状态设有5种,各工作状态的功能及之间的转换分别说明如下:
初始状态:刚加载时,工作状态为初始状态(一般远程备份设备的卷加载滞后于被保护卷);如果发现远程备份设备初始化异常1,则进入日志状态,如果远程备份设备初始化完毕2,则进入正常工作状态;
正常工作状态:在该工作状态下,将新创建的写请求包写入远程备份设备;如果远程备份设备发生异常3,则进入日志状态;
日志状态:在该工作状态下,按顺序将新创建的写请求包按照多日志文件存储策略进行日志缓存;如果远程备份设备恢复正常,进入恢复状态4;
恢复状态:在该工作状态下,清空日志文件中的写请求包,直至最后一个日志;如果在恢复状态下远程备份设备发生异常5,则进入日志状态;在清空日志文件至只剩下一个日志文件时6,进入中间状态;
中间状态:在该工作状态下,新创建的写请求包不写入日志文件,临时缓存在本地内存中,即使新产生的写请求包数量满足写日志的条件也不写日志文件;本地缓存的请求包发送完7,进入正常工作状态;
上述步骤4)的具体实现方法如图5示,包括以下步骤:
(41)获取写请求包所在的队列锁;
(42)判断写请求包的数量是否达到预先设定的数目,如果是,进入步骤(43);不是,进入步骤(45);
(43)将预先设定数目的写请求包写入本地磁盘中的一个新的日志文件;
(44)将写入日志文件的写请求包从队列中释放;
(45)释放写请求包所在的队列锁,进入步骤6);
上述步骤4)将接收到的写请求包先在本地内存中进行缓存,当写请求包缓存到预先设定的数量后,将请求包写到本地磁盘上;数据在本地缓存的组织结构如6所示,具体说明如下:
本发明写请求包在本地缓存的组织结构采用了多日志文件存储策略,如图6所示,当远程备份设备异常,进入日志状态,在日志状态下将被保护卷当前内存缓存的多个写请求包(IRP、IRP、……IRP)按日志文件预先设定值(可根据具体情况进行设定,如10M)顺序组织成多个日志文件。写入本地磁盘的多个日志文件依次为1.log,2.log,……,n.log,n为自然数。然后清空内存中的写请求包;
当远程设备恢复正常后,进入恢复状态,将本地磁盘存储的日志文件陆续发送至远程设备。当本地磁盘存储的最后一个日志文件发送完成时,进入中间状态。这时新的写请求包不再写入本地磁盘日志文件,临时存放在内存中等候发送(即使新产生的写请求包的数量满足写日志的条件也不写日志文件);在发送完内存缓存的写请求包后,进入正常工作状态;进入正常状态之后,所有后续产生的写请求包直接发往远程备份设备。
上述这种存储策略与通常采用单日志文件的明显优先是避免了单日志文件不能同时支持从文件头写、文件尾读和截断操作的问题。如果采用一个大日志文件的存储方案,会存在以下问题:
首先,当系统处于恢复状态时,缓存线程负责写入,发送线程负责读出。如果只有一个日志文件,那么会同时读写一个文件。两个线程同时读写一个文件,如果不使用锁,则可能出现死锁或不一致。如果使用锁,则增加了不必要的开销,影响到系统运行的效率;
其次,如果单日志文件,已经读出的内容不容易被截断。从文件头部读出的写请求包,如果成功发送到远程备份设备,则需要将相应的数据内容从日志文件中截断。操作系统不支持将文件中的某一段单独截断。
本发明采用的多日志文件存储策略避免了同时读写一个文件的问题,而且清除起来十分方便,只有删除文件的开销,并且不会有同时读写文件控制难的问题。
上述步骤5)的具体实现方法如图7所示,包括以下步骤:
(51)若当前处于“正常工作状态”或“中间状态”,获取写请求包缓存队列的互斥锁,得到队列的操作权,然后调用远程备份设备的底层驱动,逐一将写请求包发送至远程备份设备,然后进入步骤(53);否则进入步骤(52);
(52)如果系统处于“恢复状态”,则将磁盘日志文件中存储的写请求包发往远程备份设备;如果不是,转入步骤(51);
(53)数据发往远程备份设备后,在写请求包关联的完成例程中判断数据是否发送成功;
(54)如果数据发送不成功(即远程备份异常),将设备异常的信息上报至上层控制,同时终止自身的继续执行,进入步骤6);
(55)如果数据发送成功,则回到步骤1)。
上述步骤6)的具体实现方法如图8所示,包括以下步骤:
(61)首先清空远程备份设备在本地的缓存数据(避免引入误读);
(62)向远程备份设备预先设定地址发读请求,如果读成功,则将远程备份设备恢复正常的信息上报至上层控制,同时终止自身执行,转步骤1);
(63)如果读不成功,休眠30ms后,转入步骤(62)。