本发明属于信息安全领域中的数据保护领域,涉及云计算领域内的虚拟机保护领域,具体的说,是涉及一种虚拟机备份和逆向恢复方法。
背景技术:
虚拟机备份通常有完全备份、增量备份、差异备份等备份类型。在恢复时,用户首先选择恢复的时间点,备份系统按照这个时间点查找备份链,从备份链中提取出恢复该时间点的完全备份、增量备份或差异备份,然后按照顺序,先恢复完全备份,然后按照时间先后顺序,依次恢复增量备份或差异备份,至到恢复到用户选择的时间点。如果恢复点相距完全备份点的时间越长,则需要恢复的备份点就越多,则需要恢复的时间就越长。而在大多数恢复场景下,用户最需要恢复最新的备份点,因此,该恢复方式在实际使用中存在恢复数据量大、等待时间较长的缺陷。
技术实现要素:
本发明的目的在于提供一种虚拟机备份和逆向恢复方法,解决了现有虚拟机备份恢复存在恢复数据量大、等待时间长的问题。
为了实现上述目的,本发明采用的技术方案如下:
一种虚拟机备份和逆向恢复方法,包括步骤:虚拟机备份、逆向恢复;
虚拟机备份
在T0时刻,安全备份F0和增量备份K1通过逆向增量计算后,生成新的安全备份F1和逆向增量备份R0,并在T1~Tn时刻的每次增量备份中,均进行逆向增量计算,到Tn时刻时,生成安全备份Fn,逆向增量R0~R(n-1),保持最新时刻点Tn数据为安全备份;
逆向恢复
恢复最新时刻点Tn数据时,直接恢复安全备份Fn;
恢复次新时刻点T(n-1)数据时,首先恢复安全备份Fn,再恢复逆向增量R(n-1);
然后,在恢复每个时刻点的数据时,均首先恢复安全备份Fn,再依次恢复逆向增量;
直至恢复时刻点T0数据时,首先恢复安全备份Fn,再依次恢复逆向增量R(n-1)、R(n-2)、…、R0;
具体地,所述虚拟机备份中,各时刻点备份数据表示为:
T0时刻数据:完全备份Fn⊙逆向增量R(n-1)…⊙逆向增量R3⊙逆向增量R2⊙逆向增量R1⊙逆向增量R0;
T1时刻数据:完全备份Fn⊙逆向增量R(n-1)…⊙逆向增量R3⊙逆向增量R2⊙逆向增量R1;
T2时刻数据:完全备份Fn⊙逆向增量R(n-1)…⊙逆向增量R3⊙逆向增量R2;
T3时刻数据:完全备份Fn⊙逆向增量R(n-1)…⊙逆向增量R3;
…
Tn-1时刻数据:完全备份Fn⊙逆向增量R(n-1);
Tn时刻数据:完全备份Fn;
其中运算符⊙表示逆向增量计算。
进一步地,所述虚拟机备份中安全备份的流程包括步骤:
定义虚拟磁盘中数据块大小S,S应为512字节的倍数。
定义虚拟磁盘中数据块的个数C。
定义虚拟磁盘的存储容量Z,Z=S×C,存储容量单位为字节。
定义xBitMap,用于描述虚拟磁盘中每个块的使用情况,为了表述方便,xBitMap用一个byte描述。xBitMap的含义为:0表示未占用;1表示已占用;2表示制备为0;3表示数据和上次备份相比较未发生变化。
定义数组xBitMap[C],用于描述虚拟磁盘的使用情况。数组xBitMap[C]存储到文件中,称为虚拟磁盘元文件。Fm表示完全备份的虚拟磁盘元文件,其中xBitMap[C]的别名为FxBitMap[C],Rm表示逆向增量备份的虚拟磁盘元文件,其中xBitMap[C]的别名为RxBitMap[C]。
虚拟磁盘数据在备份端存储为文件,该文件称为虚拟磁盘数据文件。Fs表示完全备份的虚拟磁盘数据文件,Rs表示逆向增量备份的虚拟磁盘数据文件。虚拟磁盘的各备份数据,使用一个虚拟磁盘元文件和一个虚拟磁盘数据文件描述。
Q101、接收虚拟磁盘大小Z、数据块大小S,计算数据块个数 C=Z/S;
Q102、初始化完全备份数据文件Fs、完全备份元文件Fm,设n=0,对虚拟磁盘进行快照操作;初始化过程为新建文件Fs和Fm,对虚拟磁盘执行快照操作通常通过Hypervisor的API进行或者通过备份代理进行;
Q103、判断n是否等于C,如是,执行步骤Q111;否则执行步骤Q104;
Q104、从Hypervisor/备份代理中读第n块数据D;
Q105、判断数据D是否为空,如是,执行步骤Q106;否则执行步骤Q108;
Q106、设置FxBitMap[n]=0;
Q107、设置n=n+1,执行步骤Q103;
Q108、判断数据D是否为全0,如是,执行步骤Q109;否则执行步骤Q110;
Q109、设置FxBitMap[n]=2,执行步骤Q107;
Q110、设置FxBitMap[n]=1,将数据D写入完全备份数据文件Fs偏移量为n*S处,执行步骤Q107;
Q111、关闭完全备份数据文件Fs、写入FxBitMap[C]到完全备份元文件Fm,删除虚拟磁盘快照。
更进一步地,所述逆向增量计算过程包括步骤:
Q201、初始化逆向增量元文件Rm、逆向增量备份数据文件Rs,得到虚拟磁盘大小Z、数据块大小S、数据块数C;
Q202、初始化逆向增量元文件Rm中数组RxBitMap[C]中每个记录的值为3;
Q203、打开完全备份元文件Fm,读出FxBitMap[C]到内存,打开完全备份数据文件Fs;
Q204、通过Hypervisor/备份代理对虚拟磁盘进行快照,获得增量数据块个数M,设m=0;
Q205、判断m==M,如是,执行步骤Q213;否则执行步骤Q206;
Q206、通过Hypervisor/备份代理获得第m块增量数据D及偏移量Ds;增量数据D的长度为S;
Q207、判断FxBitMap[Ds/S]==0,如是,执行步骤Q208;否则执行步骤Q210;本步骤判断完全备份数据中第Ds/S块是否已经占用;
Q208、设置FxBitMap[Ds/S]=1,RxBitMap[Ds/S]=0,将数据D写入完全备份数据文件Fs偏移量Ds处;
Q209、设置m=m+1,转步骤Q205;
Q210、判断FxBitMap[Ds/S]==1,如是执行步骤Q211;否则执行步骤Q212;
Q211、设置RxBitMap[Ds/S]=1,将完全备份数据文件Fs偏移量Ds开始,长度为S的数据读出,追加到逆向增量备份数据文件Rs中,将数据D写入完全备份数据文件Fs偏移量Ds处,执行步骤Q209;
Q212、设置FxBitMap[Ds/S]=1,RxBitMap[Ds/S]=2,将数据D写入完全备份数据文件Fs偏移量为Ds处,执行步骤Q209;
Q213、通过Hypervisor/备份代理删除虚拟磁盘快照,将FxBitMap[C]写入到完全备份元文件Fm中,关闭Fm,将RxBitMap[C]写入到逆向增量备份元文件Rm中,关闭Rm,关闭Fs、关闭Rs。
再进一步地,所述逆向恢复的流程过程包括步骤:
逆向恢复流程可以完成1个完全备份和P个逆向增量备份数据的恢复,其中P大于或等于0。逆向增量备份数据按照时间顺序,由新向旧访问。
Q301、获得需要恢复的完全备份元文件Fm、完全备份数据文件Fs和P个逆向增量元文件Rm和P个逆向增量备份数据文件Rs,设p=0;
Q302、获得虚拟磁盘大小Z,数据块大小S,计算数据块个数C,打开完全备份元文件Fm,读出FxBitMap[C],设n=0;
Q303、判断n==C,如是,执行步骤Q310;否则执行步骤Q304;
Q304、判断FxBitMap[n]==0,如是,执行步骤Q305;否则执行步骤Q306;
Q305、设置n=n+1,执行步骤Q303;
Q306、判断FxBitMap[n]==1,如是,执行步骤Q307;否则执行步骤Q309;
Q307、从完全备份数据文件Fs中偏移量n*S处读出长度为S的数据Dr;
Q308、发送(n*S,Dr)给Hypervisor/备份代理,并写入数据Dr到虚拟磁盘偏移量n*S处,执行步骤Q305;
Q309、设置数据Dr为全0,长度为S,执行步骤Q308;
Q310、判断p==P,如是,执行步骤Q321;否则执行步骤Q311;
Q311、判断n==C,如是,执行步骤Q320;否则执行步骤Q312;
Q312、打开第p个逆向增量备份元文件Rm,读出RxBitMap[C],打开第p个逆向增量备份数据文件Rs,设n=0;
Q313、判断RxBitMap[n]≥2,如是,执行步骤Q314;否则执行步骤Q318;
Q314、判断FxBitMap[n]==2,如是,执行步骤Q315,否则执行步骤Q316;
Q315、设置n=n+1,执行步骤Q310;
Q316、设置数据Dr为全0,长度为S;
Q317、发送(n*S,Dr)给Hypervisor/备份代理,并写入数据Dr到虚拟磁盘n*S处,执行步骤Q315;
Q318、判断FxBitMap[n]==0,如是,执行步骤Q315;否则执行步骤Q319;
Q319、从逆向增量备份数据文件Rs中偏移量n*S处读出长度为S的数据Dr,执行步骤Q317;
Q320、设置p=p+1,执行步骤Q310;
Q321、完成逆向恢复,关闭Fm、Fs,关闭P个Rm,关闭P个Rs。
本发明的有益效果为:
本发明在虚拟机备份数据存储到备份服务器后,生成当前备份点的完全备份,将上一个备份通过逆向差异计算,生成完全备份、逆向增量备份或者逆向差异备份,在恢复最新备份点时,最新备份为完全备份,可大大加快恢复速度。由于差异备份为增量备份的特殊情况,因此本发明只讨论增量备份。本发明能够达到减少恢复虚拟机最新备份点的数据量,减少恢复时间的技术效果。
附图说明
图1为本发明系统架构图。
图2为本发明xBitMap和虚拟磁盘关系图。
图3为本发明虚拟磁盘逆向恢复原理图。
图4为本发明虚拟磁盘完全备份流程图。
图5为本发明逆向增量计算流程图。
图6为本发明逆向恢复流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明。本发明的实施方式包括但不限于下列实施例。
实施例1
如图1-6所示,一种虚拟机逆向恢复系统,包括生产服务器、备份服务器。
生产服务器包括硬件M03、Hypervisor/备份代理M02、VM M01,共三个部分。备份服务器包括操作系统M05、虚拟机备份与恢复系统M04。
VM M01,用于描述虚拟机,可以为Windows、Linux虚拟机等。
Hypervisor/备份代理M02,用于描述可以进行虚拟机备份/恢复功能的软件API或者模块,如VMware的Hypervisor已经具备的备份/恢复功能的API,不需要在VMware的Hypervisor上安装备份代理,而XenServer或者KVM的Hypervisor由于备份/恢复功能不完善,因此,需要在其Hypervisor上安装备份代理。
硬件M03,用于描述能够运行Hypervisor的兼容硬件。
虚拟机备份与恢复系统M04,能够完成虚拟机备份与恢复功能的软件模块,本发明为应用于虚拟机恢复功能。
操作系统M05,用于描述能够运行虚拟机备份与恢复系统的操作系统,如Windows、Linux等。
虚拟机备份流程为:备份服务器通过网络从Hypervisor/备份代理M02备份虚拟机数据,并存储到虚拟机备份与恢复系统M04中。
虚拟机恢复流程为:当生产服务器中的VM M01出现故障时,可利用虚拟机备份与恢复系统M04中的备份数据,通过网络从Hypervisor/备份代理M02恢复虚拟机数据。
本发明xBitMap和虚拟磁盘关系图如图2所示。
由于虚拟机由一个或者多个虚拟磁盘组成,因此,本实施例只讨论虚拟机只有一个磁盘情况。
定义虚拟磁盘中数据块大小S,S应为512字节的倍数。
定义虚拟磁盘中数据块的个数C。
定义虚拟磁盘的存储容量Z,Z=S×C,存储容量单位为字节。
定义xBitMap,用于描述虚拟磁盘中每个块的使用情况,为了表述方便,xBitMap用一个byte描述。xBitMap的含义为:0表示未占用;1表示已占用;2表示制备为0;3表示数据和上次备份相比较未发生变化。
定义数组xBitMap[C],用于描述虚拟磁盘的使用情况。其中C为虚拟磁盘中数据块的个数。数组xBitMap[C]存储到文件中,称为虚拟磁盘元文件。Fm表示完全备份的虚拟磁盘元文件,其中xBitMap[C]的别名为FxBitMap[C],Rm表示逆向增量备份的虚拟磁盘元文件,其中xBitMap[C]的别名为RxBitMap[C]。
虚拟磁盘数据在备份端存储为文件,该文件称为虚拟磁盘数据文件。Fs表示完全备份的虚拟磁盘数据文件,Rs表示逆向增量备份的虚拟磁盘数据文件。虚拟磁盘的各备份数据,使用一个虚拟磁盘元文件和一个虚拟磁盘数据文件描述。
本发明虚拟磁盘逆向恢复原理如图3所示。
时间轴用于描述各时刻点相互之间的先后顺序,如T0早于T1,T1早于T2,T2早于T3,T3早于T4。本实施例中,在T0时刻,生成一个完全备份点F,在T1~T4时刻,各生成一个增量备份点K1~K4。
完全备份F用于描述虚拟机数据的完整副本,不依赖其他副本或数据。
增量备份K用于描述本次备份和上次备份之间的数据变化,依赖上次、本次备份数据。
逆向增量备份R用于描述上次备份和本次备份之间的数据变化,依赖上次、本次备份数据。
以图3为例,按照传统方式各时间点备份数据可表述为:
T0时刻数据:完全备份F0;
T1时刻数据:完全备份F0⊕增量备份K1;
T2时刻数据:完全备份F0⊕增量备份K1⊕增量备份K2;
T3时刻数据:完全备份F0⊕增量备份K1⊕增量备份K2⊕增量备份K3;
T4时刻数据:完全备份F0⊕增量备份K1⊕增量备份K2⊕增量备份K3⊕增量备份K4;
其中运算符⊕表示增量计算。
如需要恢复T4时刻虚拟机数据,按照传统恢复方法,首先恢复完全备份F0,接着恢复增量备份K1~K4,其恢复实际过程为将完全备份F0全部拷贝到生产服务器,然后再将K1拷贝到生产服务器,覆盖对应的数据块,最后再将K2~K4依次覆盖对应的数据块。
本发明逆向增量计算后,各时间点备份数据可表述为:
T0时刻数据:完全备份F4⊙逆向增量R3⊙逆向增量R2⊙逆向增量R1⊙逆向增量R0;
T1时刻数据:完全备份F4⊙逆向增量R3⊙逆向增量R2⊙逆向增量R1;
T2时刻数据:完全备份F4⊙逆向增量R3⊙逆向增量R2;
T3时刻数据:完全备份F4⊙逆向增量R3;
T4时刻数据:完全备份F4;
其中运算符⊙表示逆向增量计算。
本发明在虚拟机备份过程中,在备份服务器端,利用完全备份和增量备份生成新的完全备份和逆向增量备份,保持最新时刻点数据为完全备份,如完全备份F0和增量备份K1,通过逆向增量计算后(以运算符⊙表示),生成完全备份点F1和逆向增量点R0,每次增量备份后,均进行逆向增量计算,到T4时刻时,生成完全备份F4,逆向增量R0~R3。在恢复最新时刻点T4数据时,逆向恢复直接恢复完全备份F4,完全备份即为最新数据,而不需要恢复各增量备份,提高恢复效率。在恢复次新点T3数据时,首先恢复完全备份F4,再恢复逆向增量R3,完成次新点数据恢复。备份数据实际存储当前完全备份F4和逆向增量备份R0~R3。
本发明虚拟磁盘完全备份流程图如图4所示。
步骤Q101、接收虚拟磁盘大小Z、数据块大小S,计算数据块个数C=Z/S;
步骤Q102、初始化完全备份数据文件Fs、完全备份元文件Fm,设n=0,对虚拟磁盘进行快照操作;初始化过程为新建文件Fs和Fm,对虚拟磁盘进行快照操作通常通过Hypervisor的API进行或者通过备份代理进行;
步骤Q103、判断n是否等于C,如是,执行步骤Q111;否则执行步骤Q104;
步骤Q104、从Hypervisor/备份代理中读第n块数据D;
步骤Q105、判断数据D是否为空,如是,执行步骤Q106;否则执行步骤Q108;
步骤Q106、设置FxBitMap[n]=0;
步骤Q107、设置n=n+1,执行步骤Q103;
步骤Q108、判断D是否为全0,如是,执行步骤Q109;否则执行步骤Q110;
步骤Q109、设置FxBitMap[n]=2,执行步骤Q107;
步骤Q110、设置FxBitMap[n]=1,将数据D写入Fs偏移量为n*S处,执行步骤Q107;
步骤Q111、关闭完全备份数据文件Fs、写入FxBitMap[C]到完全备份元文件Fm,删除虚拟磁盘快照。
本发明逆向增量计算流程图如图5所示。
步骤Q201、初始化逆向增量元文件Rm,逆向增量备份数据文件Rs,得到虚拟磁盘大小Z,数据块大小S,数据块数C;
步骤Q202、初始化逆向增量元文件Rm中数组RxBitMap[C]中每个记录的值为3;
步骤Q203、打开完全备份元文件Fm,读出FxBitMap[C]到内存,打开完全备份数据文件Fs;
步骤Q204、通过Hypervisor/备份代理对虚拟磁盘进行快照,获得增量数据块个数M,设m=0;
步骤Q205、判断m==M,如是,执行步骤Q213;否则执行步骤Q206;
步骤Q206、通过Hypervisor/备份代理获得第m块增量数据D及偏移量Ds;增量数据D的长度为S;
步骤Q207、判断FxBitMap[Ds/S]==0,如是,执行步骤Q208;否则执行步骤Q210;本步骤判断完全备份数据中第Ds/S块是否已经占用;
步骤Q208、设置FxBitMap[Ds/S]=1,RxBitMap[Ds/S]=0,将数据D写入完全备份数据文件Fs偏移量Ds处;
步骤Q209、设置m=m+1,执行步骤Q205;
步骤Q210、判断FxBitMap[Ds/S]==1,如是执行步骤Q211,否则执行步骤Q212;
步骤Q211、设置RxBitMap[Ds/S]=1,将完全备份数据文件Fs偏移量Ds开始,长度为S的数据读出,追加到逆向增量备份数据文件RsRs中,将数据D写入完全备份数据文件Fs偏移量Ds处,执行步骤Q209;
步骤Q212、设置FxBitMap[Ds/S]=1,RxBitMap[Ds/S]=2,将数据D写入完全备份数据文件Fs偏移量为Ds处,执行步骤Q209;
步骤Q213、通过Hypervisor/备份代理删除虚拟磁盘快照,将FxBitMap[C]写入到完全备份元文件Fm中,关闭Fm,将RxBitMap[C]写入到逆向增量备份元文件Rm中,关闭Rm,关闭Fs、关闭Rs。
本发明逆向恢复流程图如图6所示。
逆向恢复流程可以完成1个完全备份和P个逆向增量备份数据的恢复,其中P大于或等于0。逆向增量备份数据按照时间顺序,由新向旧访问。
步骤Q301、获得需要恢复的完全备份元文件Fm、完全备份数据文件Fs和P个逆向增量元文件Rm和P个逆向增量备份数据文件Rs,设p=0;
步骤Q302、获得虚拟磁盘大小Z,数据块大小S,计算数据块个数C,打开完全备份元文件Fm,读出FxBitMap[C],设n=0;
步骤Q303、判断n==C,如是,执行步骤Q310;否则执行步骤Q304;
步骤Q304、判断FxBitMap[n]==0,如是,执行步骤Q305;否则执行步骤Q306;
步骤Q305、设置n=n+1,执行步骤Q303;
步骤Q306、判断FxBitMap[n]==1,如是,执行步骤Q307;否则执行步骤Q309;
步骤Q307、从完全备份数据文件Fs中偏移量n*S处读出长度为S的数据Dr;
步骤Q308、发送(n*S,Dr)给Hypervisor/备份代理,并写入数据Dr到虚拟磁盘偏移量n*S处,执行步骤Q305;
步骤Q309、设置数据Dr为全0,长度为S,执行步骤Q308;
步骤Q310、判断p==P,如是,执行步骤Q321;否则执行步骤Q311;
步骤Q311、判断n==C,如是,执行步骤Q320;否则执行步骤Q312;
步骤Q312、打开第p个逆向增量备份元文件Rm,读出RxBitMap[C],打开第p个逆向增量备份数据文件Rs,设n=0;
步骤Q313、判断RxBitMap[n]≥2,如是,执行步骤Q314;否则执行步骤Q318;
步骤Q314、判断FxBitMap[n]==2,如是,执行步骤Q315;否则执行步骤Q316;
步骤Q315、设置n=n+1,执行步骤Q310;
步骤Q316、设置数据Dr为全0,长度为S;
步骤Q317、发送(n*S,Dr)给Hypervisor/备份代理,并写入数据Dr到虚拟磁盘n*S处,执行步骤Q315;
步骤Q318、判断FxBitMap[n]==0,如是,执行步骤Q315;否则执行步骤Q319;
步骤Q319、从逆向增量备份数据文件Rs中偏移量n*S处读出长度为S的数据Dr,执行步骤Q317;
步骤Q320、设置p=p+1,执行步骤Q310;
步骤Q321、完成逆向恢复,关闭Fm、Fs,关闭P个Rm,关闭P个Rs。
实施例2
一种虚拟机逆向恢复系统,与实施例1不同的是,本实施例包括T0~T6共7个时刻点,在逆向增量计算后,各时间点备份数据可表述为:
T0时刻数据:完全备份F6⊙逆向增量R5⊙逆向增量R4⊙逆向增量R3⊙逆向增量R2⊙逆向增量R1⊙逆向增量R0;
T1时刻数据:完全备份F6⊙逆向增量R5⊙逆向增量R4⊙逆向增量R3⊙逆向增量R2⊙逆向增量R1;
T2时刻数据:完全备份F6⊙逆向增量R5⊙逆向增量R4⊙逆向增量R3⊙逆向增量R2;
T3时刻数据:完全备份F6⊙逆向增量R5⊙逆向增量R4⊙逆向增量R3;
T4时刻数据:完全备份F6⊙逆向增量R5⊙逆向增量R4⊙;
T5时刻数据:完全备份F6⊙逆向增量R5;
T6时刻数据:完全备份F6。
其中运算符⊙表示逆向增量计算。
按照上述实施例,便可很好地实现本发明。值得说明的是,基于上述设计原理的前提下,为解决同样的技术问题,即使在本发明所公开的结构基础上做出的一些无实质性的改动或润色,所采用的技术方案的实质仍然与本发明一样,故其也应当在本发明的保护范围。