掌桥专利:专业的专利平台
掌桥专利
首页

数据备份方法

文献发布时间:2024-04-18 19:58:21


数据备份方法

技术领域

本发明涉及数据存储技术领域,尤其涉及一种数据备份方法、恢复性能估算方法、顺序型数据去重方法和局部型双维冗余消除方法。

背景技术

数据备份是保护数据的常用方式。在数据完整且有效时对数据做备份,并在需要时将以前的备份数据恢复出来使用。据调查,超过85%的主流互联网公司使用了两种以上(包括两种)的备份产品来做数据保护。国内与存储相关的头部企业,例如华为、中兴通讯、深信服等,都推出了自己的数据备份服务,或者直接提供商用备份产品,或者将数据备份服务打包到其他存储产品里。

由于某次备份的数据通常在前面某次(通常是上一次)备份的数据的基础上做少量修改而产生的,备份数据集中包含大量冗余。据统计,仅用粗粒度的数据去重技术即可在EMC和赛门铁克公司的商用备份服务器中检测到高达88-90%的冗余。

传统的备份系统采用数据去重来检测冗余数据块。具体来说,数据去重将输入的备份数据切分成长度为数KB(例如8KB)的数据块,为每个数据块计算一个安全指纹(例如SHA1和MD5),并通过比对数据块的指纹来判断数据块是否已存在于系统中。若已存在,则将该数据块标记为重复数据块;否则,将其标记为非重复数据块。为了降低存储成本,系统并不存储重复数据块,只存储一个指向系统中与之重复的数据块的“引用”;非重复数据块则被组织成固定大小(例如4MB)的容器被写入系统。备份结束后,备份系统会生成并保存一个文件谱,即将备份数据流中所有数据块替换为对应指纹的指纹序列。文件谱本质上是一个逻辑上的备份文件。

当要恢复某次备份的数据时,系统会读取对应的文件谱,并将其中的指纹按序逐个替换为对应的数据块,再将数据块拼接为文件。数据恢复过程中需要读取系统中的数据块。基于性能方面的考虑,数据块的读取是以容器为单位。为了减少数据恢复时的读操作,数据恢复时会在内存中维护一个恢复缓存。当需要某个数据块时,优先在恢复缓存中查找,未找到才去硬盘上读取包含该数据块的容器,并将容器中所有数据块读取到恢复缓存作为一个单位。也就是说,恢复缓存插入和替换的基本单位是某个容器中的所有数据块。当恢复缓存发生数据替换时,根据指定的替换算法(例如LRU替换算法),某个容器内的所有数据块作为一个单位被替换出去。基于成本方面的考虑,备份系统一般采用价格便宜但随机读写(读写即Input/Output,简称I/O)性能较差的机械硬盘来做底层存储。因此,数据恢复过程中读取容器的读操作是整个系统的性能瓶颈。

数据去重会使得备份之间的数据块发生共享。由于数据块在硬盘上会保持其第一次写入时的布局,供后续的重复数据块来“引用”,因此,最近一次备份中的数据块并不是紧凑且连续地存储在少量容器中,而是分散在大量不同备份时写入的容器中,这种现象称为“数据块碎片化”。随着备份次数的增加,数据块碎片化现象变得愈发严重。由于数据恢复时系统读取数据块是以容器为基本单元,数据块碎片化会导致数据恢复过程中需要大量的读容器操作,从而极大地降低数据恢复性能。

数据去重以数据块为粒度查找冗余,而无法检测到非重复数据块内的冗余。实际上,非重复数据块内仍可能存在大量冗余。要消除此部分冗余,需要先用相似数据检测技术检测到相似数据块,再用差量压缩来对相似数据块消除掉相似数据块之间的冗余。相似数据检测技术。

常用的相似数据检测技术称为超级指纹法。该方法利用随机抽样来检测相似数据块,通过哈希函数来做随机化,并选取最小(或最大)哈希值来做抽样常用的相似数据检索方法是超级指纹法。具体来说,该方法采用滑动窗口技术在数据块上滑动,并对每一个滑动窗口中的内容计算一个哈希函数,最后会得到一系列哈希值,其中最小(或最大)的被选为该数据块的一个特征值。当要对数据块提取多个特征值时(假设为N个),该方法对每一个滑动窗口中的内容计算N个哈希函数来获得N个维度的哈希值,每个维度中最小(或最大)的哈希值被选为特征值。提取到N个特征值后,超级指纹法将多个特征值打包成数个超级特征值,例如将12个特征值打包成3个超级特征值,每个超级特征值里包含4个特征值。当两个数据块有一个超级特征值匹配(即相等),表示两个数据块非常相似。

差量压缩是一种基于字典压缩的相似数据压缩技术,涉及到两个数据块,目标数据块和基准数据块(基准数据块即使用相似数据检测技术查找到的相似数据块)。差量压缩会查找到存在于目标数据块中,而不存在于基准数据块中的数据,将其编码成一个差量文件,简称“差量块”。由于移除了目标数据块和基准数据块中共同存在的冗余,差量块的数据量远小于目标数据块。系统只需存储差量块,从而减少存储开销。当需要目标数据块时,需要将差量块和基准数据块同时读取出来做差量解码,即可将差量块还原成目标数据块。

Dell公司的备份存储部(原EMC公司,后被Dell收购)给出的数据显示,差量压缩可以在数据去重的基础上额外获得多倍的压缩率。然而,差量压缩在编码和解码环节都需要基准数据块的参与,当应用于备份系统时,会导致系统的备份和恢复过程都需要额外的I/O来读取基准数据块,因此会极大地降低系统性能。

据观察发现,当对非重复数据块做差量压缩时,所需读取基准数据块的I/O次数与数据块碎片化程度有关。由于基准数据块是从系统中已存储的数据块中检测出来的,系统中已存储的数据块的数据块碎片化程度越严重则检测到的基准数据块的分布就越分散,因此需要更多的I/O来读取;反之,当系统中已存储的数据块的数据块碎片化程度较轻时,基准数据块集中在少量容器中,仅需少量I/O即可被获取。

图1给出了同时使用数据去重和差量压缩的备份系统中,读取基准数据块所需的I/O次数随着备份次数增加的变化情况。图中所使用的Chrome和RDB是两个常用的备份数据集。从图中结果可知,读取基准数据块的I/O随着备份次数的增加而增加,与上述描述的一致。

除了与读取基准数据块所需的I/O之外,差量压缩还与写入容器的I/O有关。由于对非重复数据块做差量压缩可以在数据去重的基础上进一步减少需存储的数据量,因此减少了备份时需存储的容器个数以及写入容器的I/O次数。当减少的写入容器的I/O次数大于读取基准数据块所需的I/O次数时,差量压缩可以减少系统的总I/O次数。

恢复速度因子是衡量备份系统的恢复性能的常用指标,指的是做数据恢复时,被读取容器中包含有效数据块的平均数据量(数据量单位是MB)。恢复速度因子越大表示数据恢复的速度越快。图2给出了三种不同的冗余消除方法在两个常用备份数据集(Chrome和RDB)上的恢复性能。三种冗余消除方法分别是数据去重、使用了重写算法的数据去重,以及同时使用数据去重和差量压缩。重写算法是一种将部分重复数据块再一次写入备份存储系统,通过牺牲部分压缩率来使当前备份中的数据块尽可能紧凑地存储在少量容器中的技术,该技术可以降低数据块碎片化,从而提高恢复性能。从图2的结果来看,对于最开始的数十个版本来说,同时使用数据去重和差量压缩获得的恢复性能高于数据去重,甚至高于使用了重写算法的数据去重。这是由于当数据块碎片化程度不严重时,差量压缩减少了恢复数据时读取容器的总次数。随着备份次数的增加,数据块碎片化程度变得严重,读取基准数据块所需的I/O次数增加,使用数据去重和差量压缩的恢复性能逐渐下降,最后低于使用了重写算法的数据去重。

图3给出了三种不同的冗余消除方法在两个常用备份数据集上的备份吞吐量。与恢复性能类似,对于最开始的数十个版本来说,同时使用数据去重和差量压缩获取到的备份吞吐量与另外两种方法相当或者略低。随着备份次数的增加,数据块碎片化程度变得严重,同时使用数据去重和差量压缩的备份吞吐量持续下降。

图4给出了三种不同的冗余消除方法在两个常用备份数据集上的压缩率。压缩率的计算方法是备份数据在冗余消除前的数据量除以其冗余消除后的数据量,压缩率越高表示消除掉的冗余数据越多。从图4的结果来看,差量压缩在数据去重的基础上极大地提高了压缩率。

综上,数据去重+差量压缩的冗余消除方法,虽然可以提高压缩率,但是由于差量压缩需要额外的I/O来读取基准数据块,所以会极大地降低备份吞吐量和恢复性能。

发明内容

本发明实施例提供一种数据备份方法、恢复性能估算方法、顺序型数据去重方法和局部型双维冗余消除方法,解决了现有技术无法同时兼顾压缩率、备份吞吐量和恢复性能技术问题。

本发明实施例一方面提供了一种数据备份方法,所述方法包括:备份开始时,判断备份版本是否等于1;若是,执行顺序型数据去重,否则,读取上一次备份后估算的恢复速度因子Estimated-SF;判断上一次备份后估算的恢复速度因子Estimated-SF是否大于指定的恢复速度因子阈值SF-THRE;若不是,执行所述顺序型数据去重,否则,执行局部型双维冗余消除。

可选的,所述执行局部型双维冗余消除,具体为:同时使用数据去重和差量压缩进行冗余消除。

可选的,在所述执行所述顺序型数据去重或执行局部型双维冗余消除之后,还包括:用容器地址更新模拟的恢复缓存。

可选的,在所述用容器地址更新模拟的恢复缓存之后,还包括:通过模拟的恢复缓存计算出本次备份的估计恢复速度因子Estimated-SF;保存所述本次备份的估计恢复速度因子Estimated-SF。

可选的,所述方法还包括:执行恢复性能估算。

另一方面,本发明实施例还提供一种前述实施例的数据备份方法中的恢复性能估算方法,所述恢复性能估算方法包括:S1:在备份开始时,初始化一个空链表S-Cache来模拟恢复缓存,恢复缓存的单位是容器,所述空链表S-Cache用容器地址模拟容器,所述空链表S-Cache的最大长度为L,替换算法为LRU,所述空链表S-Cache的缺页次数Miss用来模拟恢复过程中需读取容器个数,所述缺页次数Miss的值初始化为0;S2:对每个被备份系统处理过的数据块New,判断所述数据块New是否与系统中某个数据块重复:S21:如果所述数据块New与系统中的数据块Old重复,判断所述数据块Old是否是差量块:S211:如果所述数据块Old不是差量块,判断所述数据块Old所在容器的地址是否在所述空链表S-Cache中:S2111:如果存在,执行步骤S2;S2112:如果不存在,所述缺页次数Miss加1,将所述数据块Old所在容器的地址插入所述空链表S-Cache,执行步骤S2;S212:如果所述数据块Old是差量块,判断所述数据块Old所在容器的地址是否在所述空链表S-Cache中:S2121:如果存在,执行步骤S213;S2122:如果不存在,所述缺页次数Miss加1,将所述数据块Old所在容器的地址插入所述空链表S-Cache,执行步骤S213;S213:判断所述数据块Old的基准数据块Old-Base所在容器的地址是否在所述空链表S-Cache中:S2131:如果存在,执行步骤S2;S2132:如果不存在,所述缺页次数Miss加1,将所述数据块Old的基准数据块Old-Base所在容器的地址插入所述空链表S-Cache,执行步骤S2;S22:如果所述数据块New不与系统中的数据块重复,判断所述数据块New是否是差量块:S221:如果所述数据块New不是差量块,判断所述数据块New所在容器的地址是否在所述空链表S-Cache中:S2211:如果存在,执行步骤S2;S2212:如果不存在,所述缺页次数Miss加1,将所述数据块New所在容器的地址插入所述空链表S-Cache,执行步骤S2;S222:如所述数据块New是差量块,判断所述数据块New所在容器的地址是否在所述空链表S-Cache中:S2221:如果存在,执行步骤S223;S2222:如果不存在,所述缺页次数Miss加1,将所述数据块New所在容器的地址插入所述空链表S-Cache,执行步骤S223;S223:判断所述数据块New的基准数据块New-Base所在容器的地址是否在所述空链表S-Cache中:S2231:如果存在,执行步骤S2;S2232.如果不存在,所述缺页次数Miss加1,将所述数据块New的基准数据块New-Base所在容器的地址插入所述空链表S-Cache,执行步骤S2;S3:重复步骤S2直到备份结束,利用恢复速度因子的计算公式估算出恢复速度因子并将所述恢复速度因子保存在存储系统中。

本发明实施例还提供一种前述实施例的数据备份方法中的顺序型数据去重方法,所述顺序型数据去重方法包括:S1:备份开始时,初始化一个数据块缓冲C-Buffer,如果系统中存在Dense-CTN文件,删除掉,初始化一个新文件Dense-CTN,在内存中初始化一个空容器记为Open-CTN;S2:读取一个待备份的数据块,将所述待备份的数据块加入所述数据块缓冲C-Buffer,判断所述数据块缓冲C-Buffer是否满了:S21:如果没满,执行步骤S2;S22:如果满了,对所述数据块缓冲C-Buffer中所有数据块进行数据去重,对所有重复数据块,统计系统中与其重复的数据块的容器信息,对每个被引用的容器计算引用率;S221:获取一个被所述数据块缓冲C-Buffer引用的容器的引用率是否是100%:S2211:如果是,将所述数据块缓冲C-Buffer与所述容器内数据块重复的所有数据块视为重复数据块,并将容器地址加入所述新文件Dense-CTN;S2212:如果不是,将所述数据块缓冲C-Buffer与所述容器内数据块重复的所有数据块标记为碎片块,碎片块会被再一次写入备份存储系统来减少数据块碎片化;S222:重复执行S221,直到所有被所述数据块缓冲C-Buffer引用的容器都处理完;S223:获取所述数据块缓冲C-Buffer中的一个非重复数据块或碎片块记为C-toBeStored,判断如果将所述非重复数据块或碎片块C-toBeStored存入所述空容器Open-CTN,所述空容器Open-CTN是否会超过容器最大值:S2231:如果会,将所述空容器Open-CTN的容器地址加入所述新文件Dense-CTN,并将所述空容器Open-CTN写入系统,然后在内存中初始化一个新的空容器Open-CTN,将所述非重复数据块或碎片块C-toBeStored存入所述新的空容器Open-CTN;S2232:如果不会,将所述非重复数据块或碎片块C-toBeStored存入所述空容器Open-CTN;S224:重复执行S223,直到所述数据块缓冲C-Buffer中没有非重复数据块或碎片块;S3:重复步骤S2直到备份结束,将所述新文件Dense-CTN文件写入系统保存起来。

本发明实施例还提供一种前述实施例的数据备份方法中的局部型双维冗余消除方法,所述局部型双维冗余消除方法包括:S1.备份开始时,将系统中保存的新文件Dense-CTN中的容器地址读取到一个查找表Sequential-CTN中,在内存中初始化一个空容器Open-CTN;S2.读取一个待备份的数据块C,判断所述待备份的数据块C是否重复:S21.如果重复,判断与所述待备份的数据块C重复的存在系统中的数据块的容器地址是否存在于所述查找表Sequential-CTN中:S211.如果是,将所述待备份的数据块C标记为重复数据块,执行步骤S2;S212.如果不是,将所述待备份的数据块C为非重复数据块,执行步骤S3;S22.如果不重复,执行步骤S3;S3.判断备份存储系统中是否存在与所述待备份的数据块C相似的数据块:S31.如果存在,将其相似的数据块记为数据块C-Similar,判断所述数据块C-Similar所在容器的地址是否存在于所述查找表Sequential-CTN中:S311.如果是,读取所述数据块C-Similar,将所述数据块C-Similar作为基准数据块对所述待备份的数据块C做差量压缩,生成一个差量文件C-Delta,执行步骤S4;S312.如果不是,不对所述待备份的数据块C做差量压缩,执行步骤S5;S32.如果不存在,不对所述待备份的数据块C做差量压缩,执行步骤S5;S4:判断如果将所述差量文件C-Delta存入所述空容器Open-CTN,所述空容器Open-CTN是否会超过容器最大值:S41:如果会,将所述空容器Open-CTN的容器地址加入所述新文件Dense-CTN,并将所述空容器Open-CTN写入系统,然后在内存中初始化一个新的空容器Open-CTN,将所述差量文件C-Delta存入所述新的空容器Open-CTN;S42:如果不会,将所述差量文件C-Delta存入所述空容器Open-CTN;S5:判断如果将所述待备份的数据块C存入所述空容器Open-CTN,所述空容器Open-CTN是否会超过容器最大值:S51:如果会,将所述空容器Open-CTN的容器地址加入所述新文件Dense-CTN,并将所述空容器Open-CTN写入系统,然后在内存中初始化一个新的空容器Open-CTN,将所述待备份的数据块C存入所述新的Open-CTN;S52:如果不会,将所述待备份的数据块C存入所述空容器Open-CTN;S6.重复步骤S2直到备份结束,将所述新文件Dense-CTN文件写入系统保存起来。

本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:

本申请能够在保证备份系统的高备份吞吐量和高恢复性能的前提下,尽可能多地消除冗余数据。

附图说明

图1为同时使用数据去重和差量压缩的备份系统中,读取基准数据块所需I/O次数随着备份次数的变化情况;

图2为现有三种冗余消除技术在两个常用备份数据集上的恢复性能对比图;

图3是现有三种冗余消除技术在两个常用备份数据集上的备份吞吐量对比图;

图4是现有三种冗余消除技术在两个常用备份数据集上的压缩率对比图;

图5是本发明数据备份方法的流程和框架示意图;

图6是四种冗余消除技术(包括本发明)在RDB数据集上的恢复性能对比图;

图7是四种冗余消除技术(包括本发明)在RDB数据集上的备份吞吐量对比图;

图8是四种冗余消除技术(包括本发明)在RDB数据集上的压缩性能对比图。

具体实施方式

本发明实施例提供一种数据备份方法、恢复性能估算方法、顺序型数据去重方法和局部型双维冗余消除方法,解决了现有技术无法同时兼顾压缩率、备份吞吐量和恢复性能技术问题,能够在保证备份系统的高备份吞吐量和高恢复性能的前提下,尽可能多地消除冗余数据。

对于“数据去重”和“数据去重+重写算法”来说,由于本发明使用了差量压缩,所以可以提高压缩率和恢复性能。

“数据去重+差量压缩”虽然可以提高压缩率,但是由于差量压缩需要额外的I/O来读取基准数据块,所以会极大地降低备份吞吐量和恢复性能。本申请的发明人发现差量压缩所需的读取基准数据块I/O与碎片化程度有关,当碎片化程度较轻微的时候需要的额外I/O很少,因此本发明使用了恢复性能估算来评估碎片化程度;当碎片化程度较轻微时采用局部型双维冗余消除方法;当碎片化程度较严重时采用顺序型数据去重来消除数据块碎片化。因此,相对于“数据去重+差量压缩”来说,本发明虽然略微减少了压缩率,但是获得了较高的备份吞吐量和恢复性能。总体来说,本发明获得了比“数据去重+差量压缩”略低的压缩率,却获得了与仅做数据去重的技术相当的备份吞吐量和更高的恢复性能。

图5给出了本发明的流程和框架示意图。备份开始时,系统先读取上一次备份的估计恢复性能(Estimated-SF),并将其与指定阈值(SF-THRE)比较,如果前者小于等于后者,表示数据块碎片化程度较严重,那么进行顺序型数据去重来消除碎片化并提高恢复性能;如果前者大于后者,则进行局部型双维冗余消除,同时使用数据去重和差量压缩来尽可能多地消除冗余;当数据块被冗余消除环节(顺序型数据去重或局部性双维冗余消除)处理过后,数据块有了容器地址,此时用容器地址更新模拟的恢复缓存。当备份结束后,通过模拟的恢复缓存计算出本次备份的估计恢复速度因子(即Estimated-SF),并将其写入机械硬盘进行保存,共下次备份时使用。

图6给出了四种冗余消除技术(包括本发明)在RDB数据集上的恢复性能对比图,测试时指定阈值(SF-THRE)的值被设置为3.0。可以看到本发明的恢复性能是Z字形,在第52和125次备份时做了顺序型数据去重,因此恢复性能剧增,其余备份则做的是局部型双维冗余消除;恢复速度因子最低时大概接近3.0。总体来说,本发明获取到的恢复性能高于仅使用数据去重的方法,无论是否使用重写算法,且高于直接同时使用数据去重和差量压缩的传统方法(即数据去重+差量压缩)。

图7给出了四种冗余消除技术(包括本发明)在RDB数据集上的备份吞吐量对比图,测试时指定阈值(SF-THRE)的值被设置为3.0。总体来说,本发明获得的备份吞吐量与数据去重+重写算法相当,高于未使用重写算法的数据去重方法和数据去重+差量压缩方法。

图8四种冗余消除技术(包括本发明)在RDB数据集上的压缩性能对比图,测试时指定阈值(SF-THRE)的值被设置为3.0。本发明获得的压缩性能远高于仅使用数据去重的传统方法,且略低于数据去重+差量压缩或与其相当。

第一方面,本发明实施例提供了一种恢复性能估算方法,所述方法包括:

S1:在备份开始时初始化一个空链表S-Cache来模拟恢复缓存,恢复缓存的单位是容器,S-Cache用容器地址模拟容器,S-Cache的最大长度为L,替换算法为LRU,S-Cache的缺页次数Miss用来模拟恢复过程中需读取容器个数,Miss的值初始化为0;

S2:对每个被备份系统处理过的数据块New,判断其是否与系统中某个数据块重复:

S21:如果New与系统中的数据块(记为Old)重复,判断Old是否是差量块:

S211:如果Old不是差量块,判断Old所在容器的地址是否在S-Cache中:

S2111:如果存在,执行步骤S2;

S2112:如果不存在,Miss加1,将Old所在容器的地址插入S-Cache,执行步骤S2;

S212:如果Old是差量块,判断其所在容器的地址是否在S-Cache中:

S2121:如果存在,执行步骤S213;

S2122:如果不存在,Miss加1,将Old所在容器的地址插入S-Cache,执行步骤S213;

S213:判断Old的基准数据块(记为Old-Base)所在容器的地址是否在S-Cache中:

S2131:如果存在,执行步骤S2;

S2132:如果不存在,Miss加1,将Old-Base所在容器的地址插入S-Cache,执行步骤S2;

S22:如果New不与系统中的数据块重复,判断New是否是差量块(即是否在本次备份时做了差量压缩):

S221:如果New不是差量块,判断其所在容器的地址是否在S-Cache中:

S2211:如果存在,执行步骤S2;

S2212:如果不存在,Miss加1,将New所在容器的地址插入S-Cache,执行步骤S2;

S222:如果New是差量块,判断其所在容器的地址是否在S-Cache中:

S2221:如果存在,执行步骤S223;

S2222:如果不存在,Miss加1,将New所在容器的地址插入S-Cache,执行步骤S223;

S223:判断New的基准数据块(记为New-Base)所在容器的地址是否在S-Cache中:

S2231:如果存在,执行步骤S2;

S2232.如果不存在,Miss加1,将New-Base所在容器的地址插入S-Cache,执行步骤S2;

S3:重复步骤S2直到备份结束,利用恢复速度因子的计算公式(备份数据量的兆字节数除以Miss的值)估算出恢复速度因子并将其保存在存储系统中。

恢复性能估算方法分为两个过程,第一个是更新过程,用容器地址更新模拟的恢复缓存,统计缺页次数Miss;第二个是估算过程,备份结束后根据Miss估算出恢复性能。更新过程是持续的,整个备份过程中处理的每个数据块都要做这个处理;然后估算过程是备份结束后一次性的。

每次做数据备份时,所有被顺序型数据去重或局部型双维冗余消除处理过的数据块,在写入前都会被用来更新S-Cache,备份结束后就可以根据S-Cache的缺页次数计算出这个备份的Estimated-SF;这个Estimated-SF在下一次备份时会被使用到,用来决策是执行顺序型数据去重(如果Estimated-SF<=SF THRE)还是局部型双维冗余消除(如果Estimated-SF>SF THRE)。也就是说,当前备份计算出来的Estimated-SF,在下一次备份开始时会被读入内存来做决策。

第二方面,本发明实施例提供了一种数据备份方法,所述方法包括:

S1:备份开始时,判断备份版本是否等于1:

S11:如果是,执行顺序型数据去重;

S12:如果不是,读取上一次备份后估算的恢复速度因子(记为Estimated-SF),判断Estimated-SF是否大于指定的恢复速度因子阈值(记为SF-THRE):

S121:如果不是,执行顺序型数据去重;

S122:如果是,执行局部型双维冗余消除;

作为优选,步骤S11中所述的如果备份版本等于1,即待备份文件是第一次做备份,此时执行顺序型数据去重。差量压缩会产生差量块,而差量块无法直接作为基准数据块。因此,为使后续的备份能有更多数据块作为基准数据块,第一次备份时只执行顺序型数据去重。

顺序型数据去重方法的目的是使本次备份中数据块呈顺序放置,消除碎片化。因此执行顺序型数据去重后,当前备份的恢复性能会有巨大提升。局部型双维冗余消除方法的目的是尽可能多地使用数据去重和差量压缩消除冗余,追求高压缩率(即高冗余消除率)。当估算出来的上一次备份的恢复速度因子(即Estimated-SF)小于等于指定的恢复速度因子阈值(SF-THRE)时,表示系统内数据块的碎片化程度已较严重,继续引用这些数据块会使得数据块碎片化更加严重,因此执行顺序型数据去重方法来消除或减少数据块碎片化。当估算出来的上一次备份的Estimated-SF大于SF-THRE时,表示系统内数据块的碎片化程度较轻,可以继续追求压缩率。

第三方面,本发明实施例提供了一种顺序型数据去重方法,所述方法包括:

S1:备份开始时初始化一个数据块缓冲C-Buffer,如果系统中存在Dense-CTN文件,删除掉,初始化一个新文件(记为Dense-CTN),在内存中初始化一个空容器(记为Open-CTN);

S2:读取一个待备份的数据块,将其加入C-Buffer,判断C-Buffer是否满了:

S21:如果没满,执行步骤S2;

S22:如果满了,对C-Buffer中所有数据块进行数据去重,对所有重复数据块,统计系统中与其重复的数据块的容器信息,对每个被引用的容器计算引用率(容器引用率等于该容器中与C-Buffer中的数据块重复的数据块总大小除以容器大小);

S221:获取一个被C-Buffer引用的容器的引用率是否是100%,即容器中的所有数据块都与C-Buffer中的数据块重复:

S2211:如果是,将C-Buffer与该容器内数据块重复的所有数据块视为重复数据块,并将该容器地址加入Dense-CTN;

S2212:如果不是,将C-Buffer与该容器内数据块重复的所有数据块标记为碎片块,碎片块会被再一次写入备份存储系统来减少数据块碎片化;

S222:重复执行S221,直到所有被C-Buffer引用的容器都处理完;

S223:获取C-Buffer中的一个非重复数据块或碎片块(记为C-toBeStored),判断如果将C-toBeStored存入Open-CTN,Open-CTN是否会超过容器最大值:

S2231:如果会,将Open-CTN的容器地址加入Dense-CTN,并将Open-CTN写入系统,然后在内存中初始化一个新的空容器(记为Open-CTN),将C-toBeStored存入新的Open-CTN;

S2232:如果不会,将C-toBeStored存入Open-CTN;

S224:重复执行S223,直到C-Buffer中没有非重复数据块或碎片块;

S3:重复步骤S2直到备份结束,将Dense-CTN文件写入系统保存起来。

由于备份存储系统里的数据块大部分已严重碎片化,不适合被引用,否则会使当前备份也变得碎片化。然而,数据块的碎片化不一定呈均匀分布。即便上一次备份的Estimated-SF小于或等于指定的恢复速度因子阈值(即SF-THRE),只表示总的碎片化程度较严重,部分数据块可能并未碎片化,仍可被引用(即仍作为对本次备份中数据块做数据去重的对象)。如果不做区分直接对本次备份不做数据去重,将会损失压缩率(冗余消除率)。顺序型数据去重的目的是借助C-Buffer找到之前存储的仍然呈顺序放置的数据块,使本次备份的数据块只与此部分数据块进行数据去重。

C-Buffer越大,则判断数据块是否呈顺序放置的标准越宽松,虽然可提高本次备份的压缩率,但是会降低恢复性能。作为优选,当平均数据块大小是8KB,容器大小是4MB时,S1中所述的C-Buffer大小是1024,即可保存1024个数据块。

第四方面,本发明实施例提供了一种局部型双维冗余消除方法,所述方法包括:

S1.备份开始时,将系统中保存的Dense-CTN中的容器地址读取到一个查找表Sequential-CTN中,在内存中初始化一个空容器(记为Open-CTN);

S2.读取一个待备份的数据块C,判断其是否重复:

S21.如果重复,判断与其重复的存在系统中的数据块的容器地址是否存在于Sequential-CTN中:

S211.如果是,将C标记为重复数据块,执行步骤S2;

S212.如果不是,将C标记为非重复数据块,执行步骤S3;

S22.如果不重复,执行步骤S3;

S3.判断备份存储系统中是否存在与C相似的数据块:

S31.如果存在,将其相似的数据块记为C-Similar,判断C-Similar所在容器的地址是否存在于Sequential-CTN中:

S311.如果是,读取数据块C-Similar,将其作为基准数据块对C做差量压缩,生成一个差量文件C-Delta,执行步骤S4;

S312.如果不是,不对C做差量压缩,执行步骤S5;

S32.如果不存在,不对C做差量压缩,执行步骤S5;

S4:判断如果将C-Delta存入Open-CTN,Open-CTN是否会超过容器最大值:

S41:如果会,将Open-CTN的容器地址加入Dense-CTN,并将Open-CTN写入系统,然后在内存中初始化一个新的空容器(记为Open-CTN),将C-Delta存入新的Open-CTN;

S42:如果不会,将C-Delta存入Open-CTN;

S5:判断如果将C存入Open-CTN,Open-CTN是否会超过容器最大值:

S51:如果会,将Open-CTN的容器地址加入Dense-CTN,并将Open-CTN写入系统,然后在内存中初始化一个新的空容器(记为Open-CTN),将C存入新的Open-CTN;

S52:如果不会,将C存入Open-CTN;

S6.重复步骤S2直到备份结束,将Dense-CTN文件写入系统保存起来。

为了避免引用系统内已严重碎片化的数据块,局部型双维冗余消除方法仅可引用Dense-CTN文件中的保存的容器,包含如下两类:(1)上一次做顺序型数据去重时被检测为引用率为100%的容器,(2)上一次做顺序型数据去重之后存入系统的容器;这样就避免了上一次做顺序型数据去重之前的被认为碎片化比较严重的数据块。

技术优势:

1.对于传统的同时做数据去重和差量压缩的方法来说,本发明的恢复性能和备份吞吐量要高得多,但损失的压缩率(冗余消除率)却很少;

2.对于传统的仅做数据去重的方法来说,本发明的压缩率和恢复性能要高得多,而备份吞吐量也差不多或稍低;

3.本发明可用于对恢复性能的要求较高的特殊应用场景,例如金融机构,且保证较高的压缩率。当数据丢失或损毁时,金融机构必须在一个较短的特定时间间隔内将数据恢复出来,以避免重大经济损失。由于通过估计上一次备份的恢复性能来评估数据块碎片化程度,本发明可保证系统中大部分备份的恢复性能高于一个指定阈值(SF-THRE),最低的时候也接近SF-THRE。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

相关技术
  • 安全数据备份方法和安全数据备份系统
  • 数据备份方法、数据恢复方法以及存储控制器
  • 数据备份方法、数据恢复方法以及存储控制器
  • 数据备份设备、数据备份方法以及存储数据备份程序的记录介质
  • 远程数据备份方法以及使用该方法的远程数据备份系统
技术分类

06120116485903