一种基于文件分块的镜像文件同步方法
【技术领域】
[0001] 本发明属于网络文件同步技术领域,涉及一种基于文件分块的镜像文件同步方 法,特别是在云数据中心内进行镜像文件分发时,对新、旧不同版本镜像文件进行差异比较 而基于特殊文件分块方式的镜像文件同步方法。
【背景技术】
[0002] -个网络系统中可能共享规模巨大的文件,并需要在各个主机端保持文件版本的 一致。例如在大型数据中心中向各个主机分发新版本的操作系统镜像时,为了同步系统内 各主机所保存的镜像文件,需要把新版本文件分发给系统中每一个主机。但是,传输整个镜 像文件不仅耗时长,而且会导致网络压力过大。由于新版本镜像文件往往与旧版本文件差 异很小,与完整的镜像文件相比,这些差异仅仅是一小部分。因此,如何获取这些差异之处, 以实现差异文件与旧版本文件的合并成为解决上述问题的瓶颈。
[0003] 近年来,为了探查两个文件的不同,研究涉及操作系统、远程桌面、P2P镜像文件部 署等等多个方面,所取得的成果主要有:
[0004] (1)文件分块方法:
[0005] 该方法首先将需要传输的文件分为若干块,之后以文件块为单位比较新旧两个文 件的差异,按块校验数据。Linux下diff命令按"行"为单位进行差异比较也采用类似思想。 对文件分块,相当于把大文件的字节数量缩小,并把文件的数据量抽象为文件块的数量。计 算得到的文件差异同样以文件块为最小单位。计算所得差异量越小,方法的精度越高。不 过,如果文件所分块足够多,也就是一个文件块足够小,那么分块计算得到的差异量很接近 于实际上的差异量。
[0006] ⑵文件定长分块法:
[0007] 对于文件定长分块,目前最主要的分块方式来自于固定分块检测技术 (Fixed-SizedPartition,FSP)。此方法非常简单,时间效率很高,广泛用于下载软件的文 件正确性测试。方法输入量为文件总长度与所需分块数量,即可将此文件按照"文件块长 度=文件总长度/所需分块数量"的结果来固定划分文件块,末尾长度不足,直接划分为一 块。对于此分块方法,在进行差异运算的过程中,完全可以一一对应计算。即把需要对比的 两个文件均按照同样块长度分块,且依次编写文件块号,之后对比两个文件中相同块号的 文件块内容是否一致。
[0008] (3)文件不定长分块法:
[0009] 不定长分块又称变长分块,是为了克服定长分块在对比差异时"错位"问题 而提出的。目前效果较好的已有方法是基于内容的不定长分块(Content-Defined Chunking,CDC)。此方法考虑文件的内容,定位分块的标志点并划分块,之后在文件的分块 描述中记录下每个块的分块标志,并以此描述指导另一个文件的划分。
[0010] 综上,这里(1)是文件差异理论的基础思路,而(2)和(3)则属于(1)的具体实现。 以上方法的实现,在实际应用场景中都存在问题。方法(2)要求新版本文件的文件大小与 旧版本严格一致,否则将导致分块大小与分块数量不同;其次,它能接受并精确查找的差异 仅限于"改写"型差异,如果遇到"删除"或者"插入"型的差异,此方法在分块对比求差后将 给出精度极低的运算结果。方法(3)问题在于分块标志的记录上,很可能导致文件块的划 分失败。这样的情况大多发生于在文件偏移量较靠前的位置上删改了较多内容时。一旦发 生此情况,很可能一错再错导致接下来的所有文件块划分均无法在规定区间寻找到分块标 志,使变长分块完全退化为定长分块。而且,由于频繁地无法找到分块标志,文件读取指针 来回移动,时间效率低且伤害存储器。
[0011] 对于以上问题分析得知,导致文件对比差异不精确的问题正是上述"错位"问题的 存在。而如何解决错位问题成为本领域的一大难题。
【发明内容】
[0012] 本发明为了解决上述"错位"问题,设计了一种基于文件分块的镜像文件同步方 法,该方法中的文件分块方式,既保证了在文件块划分适当的前提下,对每个对比的文件都 分块;又避免了变长分块方法退化为定长分块的可能性。
[0013] 本发明采用的技术方案为:一种基于文件分块的镜像文件同步方法,用于将计算 机中的旧版本镜像文件更新成新版本文件,本方法步骤中包括:A、将待更新的新版本文件 及旧版本文件分别进行文件分块;B、将所有文件块的信息提炼形成新、旧版本文件的描述 文件;C、将两个描述文件对比形成差异文件;D、将差异文件与旧版本文件合并,生成新版 本文件,关键在于:步骤A中所述的文件分块使用的分块方法为:
[0014] 1)将新版本文件、旧版本文件均视为二进制编码格式文件,逐字节读取文件;
[0015] 2)利用如下公式①在文件中寻找分块标志,满足下述公式的字符串k成为分块标 志:
[0016] Value(k)modd= =r①
[0017] 其中,d为分块校验除数,其取值为期望分块长度bl 为分块校验参数,是非零且 小于d的正整数;k为所校验的字符串,所校验字符串k的长度为分块标志长度,记为cl,对 cl长度的字符串k的Value(k)函数操作即对其各个字符进行ASCII码取值后,按照256进 制合并所得的结果,mod为取余运算;
[0018] 3)在这些分块标志的位置进行划分文件块的操作:
[0019] 3a)、给定cl、d、r的取值,初始化文件读取指针长度为cl;
[0020] 3b)、根据步骤2)中的分块标志的判定公式判定是否满足分块标志条件,如果是, 则记录分块;如果否,跳至步骤3c;
[0021] 3c)、文件读取指针右移,判定是否到达文件末尾,如果是,记录分块,跳至步骤3d; 如果否,跳至步骤3b;
[0022] 3d)、结束。
[0023] 步骤B中描述文件包括每个文件块的首字节、校验和与MD5值,即把每个文件块的 首字节、校验和与MD5值保存形成描述文件。
[0024] 步骤C中所述的对比以文件块的首字节、校验和与MD5值均相同为标准,基于上述 标准,差异文件的形成步骤中包括:
[0025] 31)初始化分别读取旧版本文件的描述文件A、新版本文件的描述文件B的指针a、 指针b;
[0026] 32)比较指针a、b所指的文件块是否相同,如果相同,跳至步骤34);如果不同,跳 至步骤33);
[0027] 33)检查指针b是否到达描述文件B的末尾,如果是,将指针a所指的文件块为差 异文件块记录其信息,跳至步骤34);如果否,指针b后移,跳至步骤32);
[0028] 34)检查指针a是否到达描述文件A的末尾,如果是,描述文件B中剩余部分文件 块均作为差异文件块记录其信息,跳至步骤35 ;如果否,指针a后移,指针b重置至未匹配 的文件块,跳至步骤33);
[0029] 35)从新版本文件B中得到差异文件块所对应的文件内容,保存为差异文件,结 束。
[0030] 所述的差异文件的结构中包括:插入/删除状态标识、插入/删除起始位置、插入 内容长度/删除终止位置、插入具体内容构建的序列表。
[0031] 所述的合并的方法步骤中包括:
[0032] 51)初始化分别读取差异文件和旧版本文件块的指针pl、指针p2 ;
[0033] 52)查询指针pi是否到达差异文件的末尾,如果pi到达差异文件的末尾,则检查 指针P2是否到达旧版本文件的末尾,如果是,则跳至步骤57);如果否,则将指针p2所指的 文件块以及之后的文件块均写入新版本文件中;如果Pi未到达差异文件的末尾,跳至步骤 53);
[0034] 53)查询指针pi所指的序列表中的插入/删除状态标识,如果对p2所指的文件块 没有标识,则跳至步骤55);如果为删除标识,则跳至步骤54);如果为插入标识,则跳至步 骤 56);
[0035] 54)将指针p2从删除起始位置移至删除终止位置,pi后移,跳至步骤52);
[0036] 55)将p2所指的文件块写入新版本文件中,指针p2后移,跳至步骤52);
[0037] 56)根据序列表中插入位置和插入内容长度,将序列表中所示的插入的具体内容 写入新版本文件中,并将指针P2移动插入内容长度个位置,指针pi后移,跳至步骤52);
[0038] 57)结束。
[0039] 其中,步骤D之后还包括如下步骤:
[0040] E、检验:将所述新版本文件与新版本文件的描述文件进行比对、校验,校验成功的 标志为:所述新版本文件与描述文件各个文件块的位置与内容均一致。
[0041 ]cl为整数,且cl彡log256bl,优选地,cl为大于等于log256bl的最小整数。
[0042] 本发明的文件同步原理为:1、采用本发明的分块方式将文件分块,并将所有文件 块的信息提炼成它的描述文件;2、利用描述文件之间的对比,确定各个新版本文件及旧版 本文件中哪几个文件块存在差异,把找到的差异记录为差异文件;3、使用差异文件与旧版 本文件合并,生成新版本文件,并且可以与新版本文件描述文件做校验,检查此文件是否与 目标一致。
[0043] 本发明的有益效果在于:本发明方法不考虑文件格式,不反复读取文件,对一系列 相似文件有较高处理效率。具体体现在:
[0044] 1.完全不考虑文件可能的组织形式,直接把文件视为二进制存储方式,逐字节处 理;
[0045] 2.文件分块时,对文件块的划分处理完全不依赖之前文件块的处理结果;
[0046] 3.对比差异时,仅使用原文件生成的描述文件来进行对比,占空间小。
[0047] 4.同一种较好的文件分块规律可以应用在相似的文件上,而不需要每次文件差异 计算都尝试最优分块策略。
【附图说明】
[0048] 图1是本发明方法中的分块方法流程图;
[0049] 图2是差异文件的形成方法流程图;
[0050] 图3是描述文件的结构示意图;
[0051] 图4是差异文件的结构示意图。
【具体实施方式】
[0052] 本发明的实施其实主要分三个步骤走。第一是文件分块,提炼描述文件;第二是利 用描述文件进行对比,求文件差异并记录;第三是利用求得的差异进行文件同步。
[0053] 1 ?文件分块与描述文件生成
[0054] 本发明的分块方法为一种通用基于内容的不定长分块〇XDC,Universal Content-DefinedChunking)方法。在该U⑶C方法中,分块标志的概念为:一段字符串的 值除以某个定值后取余数,如果此余数恰好等于某个给定的值,则此段字符为分块标志。
[0055] 字符串的值,是指把一段字符利用ASCII编码,视为256进制的数字,从低位向高 位排列,利用每位权值求出最终值。例如:"AC"的值='A' +'C'X256 = 65+67X256 = 17217。对字符串求值的函数,记为Value(X)。上述所除的"定值",记为分块校验除数d; 而与其对比,决定它是否为分块标志