具体实施方式
如这里所用,术语“包括”及其变体将理解为意味着“包括但是并不限于”的开放式术语。除非上下文另有指明,术语“或者”将理解为“和/或”。术语“基于”将理解为“至少部分基于”。术语“一个实施例”和“实施例”将理解为“至少一个实施例”。术语“另一实施例”将理解为“至少一个其它实施例”。
如这里所用,例如“一个/一种”和“该”这样的术语包括所言项目或者动作中的一个或者多个。具体而言,在权利要求中,提及项目一般意味着存在至少一个这样的项目,而提及动作意味着执行该动作的至少一个实例。
术语数据将广义地理解为包括一个或者多个计算机存储元件可以表示的任何事物。逻辑上可以在易失性或者非易失性存储器中将数据表示为连串的1和0。在具有非二进制存储介质的计算机中,可以根据存储介质的能力来表示数据。可以将数据组织成不同类型的数据结构(包括诸如数字、字母等简单数据类型、分级的、链接的或者其它相关数据类型、包括多个其它数据结构或者简单数据类型的数据结构等)。一些数据例子包括信息、程序代码、程序状态、程序数据、其它数据等。
标题仅为了方便;可以在标题指示给定主题的章节以外发现关于该给定的主题的信息。
下文可以包括其它明确和隐含定义。
示例操作环境
图1图示了本文描述的主题内容的方面可以实施于其上的适当计算系统环境100的例子。计算系统环境100仅为适当计算环境的一个例子而并非为了暗示与这里描述的主题内容的方面的使用或者功能范围有关的任何限制。计算环境100也不应解释为具有与在示例操作环境100中图示的部件中的任一部件或者组合有关的任何依赖或者要求。
这里描述的主题内容的方面与诸多其它通用或者专用计算系统环境或者配置一起操作。可以适合于与这里描述的主题内容的方面一起使用的公知计算系统、环境或者配置的例子包括个人计算机、服务器计算机、手持或者膝上型设备、多处理器系统、基于微控制器的系统、机顶盒、可编程消费电子设备、网络PC、微型计算机、大型计算机、个人数字助理(PDA)、游戏设备、打印机、包括机顶盒、媒体中心或者其它设备的设备、汽车嵌入或者附着的计算设备、其它移动设备、包括任何上述系统或者设备的分布式计算环境等。
可以在计算机执行的计算机可执行指令(例如程序模块)的一般背景中描述这里描述的主题内容的方面。一般而言,程序模块包括执行特定任务或者实施特定抽象数据类型的例程、程序、对象、组件、数据结构等。也可以在任务由通过通信网络来链接的远程处理设备执行的分布式计算环境中实现这里描述的主题内容的方面。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。
参照图1,用于实施这里描述的主题内容的方面的示例系统包括形式为计算机110的通用计算设备。计算机可以包括能够执行指令的任何电子设备。计算机110的部件可以包括处理单元120、系统存储器130和将包括系统存储器的各种系统部件耦合到处理单元120的系统总线121。系统总线121可以是若干总线结构类型(包括存储器总线或者存储器控制器、外围总线和使用各种总线架构中的任何总线架构的本地总线)中的任何总线结构类型。举例而言而非限制,这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线、外围部件互连(PCI)总线(也称为Mezzanine总线)、外围部件互连扩展(PCI-X)总线、高级图形端口(AGP)和PCI快速(PCIe)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是计算机110可以访问的任何可用介质并且包括易失性和非易失性介质以及可拆卸和不可拆卸介质。举例而言而非限制,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质包括用任何用于存储信息(例如计算机可读指令、数据结构、程序模块或者其它数据)的方法或者技术实施的易失性和非易失性、可拆卸和不可拆卸介质。计算机存储介质包括RAM、ROM、EEPROM、闪存或者其它存储器技术、CD-ROM、数字万用盘(DVD)或者其它光盘储存器、磁盒、磁带、磁盘储存器或者其它磁存储设备或者任何可以用来存储所需信息并且可以由计算机110访问的其它介质。
通信介质通常在调制的数据信号(例如载波或者其它传送机制)中具体化计算机可读指令、数据结构、程序模块或者其它数据并且包括任何信息递送介质。术语“调制的数据信号”意味着如下信号,该信号以这样的方式改变其特征集的一个或多个以便在该信号中编码信息。举例而言而非限制,通信介质包括有线介质(例如有线网络或者直接有线连接)和无线介质(例如声学、RF、红外线和其它无线介质)。也应当在计算机可读介质的范围内包括任何上述通信介质的组合。
系统存储器130包括形式为易失性和/或非易失性存储器(例如只读存储器(ROM)131和随机存取存储器(RAM)132)的计算机存储介质。基本输入/输出系统133(BIOS)通常存储于ROM131中,该基本输入/输出系统133包含有助于例如在启动期间在计算机110内的单元之间传送信息的基本例程。RAM132通常包含处理单元120立即可访问和/或处理单元120目前操作的数据和/或程序模块。举例而言而非限制,图1图示了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可以包括其它可拆卸/不可拆卸、易失性/非易失性计算机存储介质。仅举例而言,图1图示了从不可拆卸、非易失性磁介质读取或者向其中写入的硬盘驱动器141、从可拆卸、非易失性磁盘152读取或者向其中写入的磁盘驱动器151和从可拆卸、非易失性光盘156(例如CDROM或者其它光学介质)读取或者向其中写入的光盘驱动器155。可以在示例性操作环境中使用的其它可拆卸/不可拆卸、易失性/非易失性计算机存储介质包括磁带盒、闪存卡、数字万用盘、其它光盘、数字视频带、固态RAM、固态ROM等。硬盘驱动器141可以通过接口140连接到系统总线121,而磁盘驱动器151和光盘驱动器155可以通过用于可拆卸、非易失性存储器的接口(例如接口150)连接到系统总线121。
上文讨论并且在图1中图示的驱动器及其关联计算机存储介质提供对用于计算机110的计算机可读指令、数据结构、程序模块和其它数据的存储。在图1中例如将硬盘驱动器141图示为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些部件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同或者不同。这里向操作系统144、应用程序145、其它程序模块146和程序数据147给予不同编号以便以最低限度说明它们为不同的副本。
用户可以通过输入设备(例如键盘162和指示设备161)(惯称为鼠标、跟踪球或者触垫)向计算机110中录入命令和信息。其它输入设备(未示出)可以包括麦克风、操纵杆、游戏垫、碟形卫星天线、扫描仪、触敏屏幕、写字板等。这些和其它输入设备经常通过用户输入接口160(该用户输入接口耦合到系统总线)连接到处理单元120、但是可以由其它接口和总线结构(例如并行端口、游戏端口或者通用串行总线(USB))连接。
监视器191或者其它类型的显示设备也经由接口(例如视频接口190)连接到系统总线121。除了监视器之外,计算机也可以包括可以通过输出外围接口195连接的其它外围输出设备,例如扬声器197和指示器198。
计算机110可以使用到一个或者多个远程计算机(例如远程计算机180)的逻辑连接在联网环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或者其它常见网络节点并且通常包括上文相对于计算机110描述的元件中的多个或者全部,尽管在图1中仅已经图示存储器存储设备181。图1中描绘的逻辑连接包括局域网(LAN)171和广域网(WAN)173、但是也可以包括其它网络。这样的联网环境在办公室、企业范围计算机网络、内部网和因特网中司空见惯。
当使用于LAN联网环境中时,计算机110通过网络接口或者适配器170连接到LAN171。当使用于WAN联网环境中时,计算机110可以包括调制解调器172或者用于通过WAN173(例如因特网)建立通信的其它装置。可以是内部或者外部的调制器解调器172可以经由用户输入接口160或者其它适当机构连接到系统总线121。在联网的环境中,相对于计算机110描绘的程序模块或者其部分可以存储于远程存储器存储设备中。举例而言而非限制,图1将远程应用程序185图示为驻留于存储器设备181上。将理解所示网络连接为示例性的,并且可以使用其它在计算机之间建立通信链路的装置。
保护文件
如先前提到的那样,创建大型文件的多个副本可能快速填充备份设备。图2是一般性地表示根据这里描述的主题内容的方面的如下文件的框图,该文件具有嵌入于其中的元数据和内容。如图所示,文件200可以划分成头部分205、中间部分206和尾部分207。未按比例绘出这些部分205-207。
许多文件包括元数据或者与元数据关联。元数据是关于文件的数据而不是文件的实际内容。例如元数据可以包括作者、创建时间和日期、大小、用途、编码方案、色深度、图像分辨率、文件内容摘要或者关于文件的其它数据。
有时,在文件外部维护元数据。例如,文件系统可以维护与文件系统的文件有关的元数据。可以在文件系统数据结构中维护而不是在文件本身中嵌入这个元数据。
对于一些文件类型,向文件本身中嵌入(例如在文件本身以内放置)元数据。另外,不同文件类型(例如.mp3、.wav、.pdf、.GIFf、.bmp、.mov等)可以具有不同数量的元数据。相同文件类型可以具有不同数量的元数据用于该文件类型的文件的不同实例。
当元数据嵌入于文件中而不是存储于单独地方时,元数据经常放置于文件的开头或者末尾。检测是否仅元数据已经改变可以用来确定文件是否需要备份并且如果是这样则确定将针对该文件备份什么。
例如,为了节约备份空间,一些用户可能希望在仅文件的元数据改变时不创建文件的备份副本。例如多媒体文件的元数据“星”等级尽管有用但是可能对于用户而言不如文件内容的改变那样重要。
如这里描述的那样,一种用于确定文件的元数据是否已经改变的机制包括针对文件计算两个散列。具体而言,可以针对文件200的头部分205计算头部散列,并且可以针对文件200的尾部分207计算尾部散列。如果头部散列等于文件的先前计算的头部散列并且尾部散列等于文件的先前计算的尾部散列,则认为文件200的元数据尚未改变。
另一种用于确定文件的元数据是否已经改变的机制包括针对文件的头部分或者尾部分但是并非二者计算散列。具体而言,在一种实施方式中,仅针对文件200的头部分205计算头部散列。如果头部散列等于文件200的先前计算的头部散列,则认为文件200的元数据尚未改变。在这一实施方式中,可以在包括中间部分206和尾部分207的内容部分中包括文件200的尾部分207。这一实施方式可以例如在预期元数据在文件头部的情况下使用。
在另一实施方式中,仅针对文件200的尾部分207计算尾部散列。如果尾部散列等于文件200的先前计算的尾部散列,则认为文件200的元数据尚未改变。在这一实施方式中,可以在包括头部分205和中间部分206的内容部分中包括文件200的头部分205。这一实施方式可以例如使用于预计元数据在文件尾部的情况下。
在可以计算头部散列和尾部散列这二者的实施方式中,文件200的内容部分仅包括文件200的中间部分206。内容散列是针对被指定为内容部分的部分计算的散列,并且可以仅包括中间部分206、包括中间部分206和头部分205或者包括中间部分206和尾部分207。
散列是可以通过向输入数据应用一组运算(例如加法、乘法、除法、减法、移位等)来产生的输出数据。计算散列与向输入数据应用这组运算以获得输出数据同义。通常,输入数据比输出数据大得多。另外,输入数据大小可变,而输出数据可以是固定大小。产生散列的函数(有时称为散列函数)是确定性的:对于给定的输入数据而言意味着散列函数将生成相同输出数据。虽然散列函数可以向相同输出数据映射两个或者更多不同输入数据,但是可以选择散列函数以保证这一情况的出现概率相对小。利用这些性质,散列可以用来通过比较文件的数据的两个单独散列来检测文件(或者其部分)是否已经改变而无需比较文件的每个字节与它在文件的先前版本中的对应字节。
如果头部散列或者尾部散列不等于它的对应的先前计算的散列,则可以执行附加校验以确定是否仅元数据改变或者是否文件的元数据和内容改变。这一附加校验涉及针对文件200的中间部分206计算散列并且比较这一散列与针对文件200的中间部分206先前计算的散列。
如果中间散列等于先前计算的中间散列,则认为仅元数据已经改变。如果中间散列不等于先前计算的中间散列,则认为除了元数据之外或者替代元数据还改变了内容。
可以用各种方式执行选择视为文件200的头部分205的长度并且选择视为文件200的尾部分的长度。这里描述的一种示例方式是如下文描述的那样基于压缩块大小来选择长度。
为了节约空间,多媒体和其它文件可以具有压缩的内容。可以使用一种使用压缩块大小的压缩算法来压缩内容。为了查看和编辑内容,可以解压内容或者一个或者多个块。如果任何这一解压内容改变,则压缩算法可以压缩改变的内容,从而原压缩内容和新压缩内容明显或者完全不同——即使很少解压的内容改变。另外,对一个块中的内容进行的改变可以在压缩期间对整个文件内的其它块具有影响。
对具有嵌入的元数据的多媒体文件的这一压缩可以用于选择视为文件200的头部分205的长度和视为文件200的尾部分207的长度。为了检测仅元数据已经改变,可以选择等于元数据的长度。然而,因为元数据的长度可能随文件类型的改变而改变,或者甚至在同一文件类型内随文件的改变而改变,所以选择与元数据的长度确切相等的长度可以涉及具有关于元数据结构的理解并且能够解析元数据以确定它的长度。
选择经常或者总是比元数据的长度更小的长度可以触发备份机构以甚至针对元数据的改变来创建备份副本。作为极端例子,如果选择的长度为一个字节,则在头部分205的第一字节之后或者在尾部分207的最后字节之前的任何改变将视为文件的内容而不是元数据的改变。对内容的改变可以触发备份机构以创建文件的备份副本。
选择预期经常或者总是比元数据的长度更大、但是比压缩块大小更小的长度具有检测元数据的改变而未频繁地(或者从未)将对内容的改变归于对元数据的改变这样的效果。根据关于压缩算法的上述观察得出这一结论:甚至内容的最小改变也可以改变盘上的整个块的压缩内容或者甚至改变盘上的文件的全部压缩内容。
图3是图示了根据这里描述的主题内容的方面的如下文件的框图,该文件具有在头部的元数据和随后若干压缩块。如图所示,文件300包括嵌入的元数据305和已经在压缩块310-314中压缩的内容。已经选择长度320作为文件300的头部分的大小。如图所示的长度320略少于压缩块大小。
如果仅元数据305改变,则在文件300的头部的具有长度320的数据的散列检测到这一改变,但是可能不足以确定文件300的元数据305或者内容中是否出现改变。例如在点325之前的任一处的数据的改变可能使头部分的散列不同于头部分的先前计算的散列。头部分具有从文件的开头起的长度320并且大于元数据305。在这一情况下,为了检测元数据305或者元数据305之后的内容中是否出现改变,也可以计算中间部分(包括点325之后的数据)的另一散列。
计算中间部分的散列在确定元数据或者内容是否因为压缩算法的性质而改变时有效。具体而言,如果在压缩期间在元数据305之后、但是在点325之前的数据改变,则这可能引起对压缩块310中的甚至在点325之后的数据的改变。然而仅元数据305的改变一般将不会对压缩块310中的数据具有任何影响,因为元数据通常不在压缩块中。因此,如果仅元数据305改变,则压缩块310将不改变并且中间散列将等同于先前计算的中间散列。
另一方面,如果在压缩期间元数据305之后并且在点325之前的任一处的数据改变,则这将引起整个压缩块310中的数据的明显改变。因此,头部分(在点325之前的部分)的散列和中间部分(在点325之后的部分)的散列都将检测到这一改变。如果两个散列指示数据改变,则数据保护引擎可以推断至少文件的内容改变并且可能地文件的内容和元数据也改变。由于内容改变,所以需要备份文件。
下文是用于选择长度320的一些示例方式:
1.选择与在大型多媒体文件之中常见的压缩块大小相等或者更小的长度。例如对于一些多媒体文件,64千字节、128千字节、256千字节或者一些其它大小可以是常见的压缩块大小。
2.通过使用将文件扩展名与长度关联的数据结构(例如表)来选择长度。数据结构可以将一个或者多个文件扩展名与每个长度关联。例如具有某些扩展名的视频文件可以与一个长度关联,具有某些扩展名的音频文件可以与另一长度关联,具有某些扩展名的视频文件和音频文件可以与又一长度关联,等等。如果数据结构没有用于给定的文件扩展名的具体长度,那么数据结构也可以指定要使用的默认长度。
3.通过读取元数据本身并且据此确定元数据的长度来选择长度。这可以涉及能够读取用于不同文件类型的元数据的一个或者多个部件。
回到图2,一些文件格式可以向文件的末尾(例如在尾部分207之后)添加新的或者改变的数据。在这些情况下,数据保护引擎可以维护如下数据,该数据指示尾部分207从何处开始并且尾部分207有多长,并且数据保护引擎可以使用这一信息对尾部分207执行散列。换而言之,可以基于原尾部分的位置来计算散列而不是将尾部分207限定为从文件的末尾起的长度。如果在尾部分207之后添加的数据量超过可配置阈值,则可以再次从文件的末尾测量尾部分207。
已经针对文件计算的散列可以存储于记录中用于在与针对文件计算的后续散列比较时使用。在一个实施例中,如果文件的内容已经改变,则数据保护引擎可以制作文件的备份副本,而如果仅文件的元数据已经改变(如散列指示的那样),则可以不创建文件的备份副本。
在另一实施例中,数据保护引擎可以创建已经改变的文件的每个部分的备份副本。例如,如果元数据已经改变,则数据保护引擎可以创建元数据的备份副本。如果文件的内容已经改变,则数据保护引擎可以创建文件的内容的备份副本。在这一实施例中,出于备份考虑,可以将文件视为三个文件。如果文件的任何“部分”改变,则备份该部分。阻止列表可以包括如下标识符,这些标识符针对文件的包括在文件的各种版本中的部分。在这一实施例中,可以选择头部和尾部的长度至少如最大预期元数据长度那样大。
在可以独立备份元数据和内容的场合,备份管理器可以能够在用户界面中示出对元数据的改变。例如,备份管理器可以显示示出元数据的两个版本的两个并排窗口或者其它用户界面元素。
图4是表示根据这里描述的主题内容的方面配置的装置的框图。图4中所示部件为示例性的而并非意在囊括可能需要或者包括的部件。在一个实施例中,结合图4描述的部件可以包含于其它部件(已示出或者未示出)中或者放置于子部件中,这未脱离这里描述的主题内容的方面的精神或者范围。在一些实施例中,结合图4描述的部件和/或功能可以跨多个设备而分布。
转向图4,装置405可以包括数据保护部件410、储存器435、通信机构440和其它部件(未示出)。装置405可以实施于计算机上或者实施为计算机(例如图1的计算机110)。
通信机构440允许装置405与其它实体通信。例如,通信机构440可以允许装置与一个或者多个如下设备(例如附着于网络储存器、存储区网络设备、文件服务器等)通信,所述设备存储储存器435上包括的文件的备份副本。通信机构440可以是如结合图1描述的网络接口或者适配器170、调制解调器172、USB或者其它端口或者用于建立通信的任何其它机构。
储存器435是能够存储数据的任何存储介质。储存器435可以实施为文件系统、数据库、易失性存储器(例如RAM)、其它储存器、上述储存器的一些组合等并且可跨多个设备而分布。储存器435可以在装置405外部、内部或者包括在装置405外部和内部的部件。
数据保护部件410可以包括改变检测器415、散列器420、散列管理器425、数据保护引擎430和其它部件(未示出)。如这里所用,术语部件将理解为包括硬件(例如设备的全部或者部分)、一个或者多个软件模块或者其部分的集合、一个或者多个软件模块或者其部分与一个或者多个设备或者其部分的一些组合等。
改变检测器415是检测保护的命名空间的文件是否已经出现改变。例如,改变检测器415可以使用时间戳、可以监视对文件系统的改变或者可以使用其它机构来确定是否已经出现改变。基于这里的教导,本领域技术人员可以认识到可以使用其它用于检测文件是否已经出现改变的方式而未脱离这里描述的主题内容的方面的精神或者范围。
当改变检测器415确定文件已经改变时,改变检测器415可以向数据保护引擎通知文件已经改变。为了确定文件的元数据和/或内容已经改变,数据保护引擎430可以运用散列管理器425。
散列管理器425可操作地使用散列器420来生成散列以确定文件中什么已经改变。散列管理器425可以向散列器420提供文件的部分用于输入并且可以获得与输入对应的不同散列作为输出。例如,散列器420可以向散列器420提供文件的头部、尾部和中间部分的数据并且响应于此获得头部散列、尾部散列和中间散列。
散列管理器425可以存储先前计算的散列以便与后续计算的散列比较以确定文件中的什么已经改变。例如,如果头部散列等于文件的先前计算的头部散列并且文件的尾部散列等于文件的先前计算的尾部散列,则散列管理器425可以确定文件的内容已经改变并且可以向数据保护引擎430指示这一点。
如果文件的头部散列或者尾部散列已经改变,则散列管理器425可以确定文件的至少元数据已经改变并且还可以操作地获得文件的中间部分的中间散列并且比较中间散列与文件的先前计算的中间散列。如果中间散列等于先前计算的中间散列,则散列管理器425可以指示仅元数据已经改变;否则,散列管理器425可以指示文件的元数据和内容均已经改变。
在一个实施例中,散列管理器425可以将预选固定长度用于文件的头部分和尾部分。固定长度可以独立于文件的元数据的大小并且可以基于用于文件内容的压缩算法的预期压缩块大小来(例如通过开发者等)选择。
在另一实施例中,散列管理器425可以通过使用文件的扩展名以根据将文件扩展名与长度关联的数据结构获得头部和/或尾部分的长度来获得该长度。
在选择尾部分的起始位置时,散列管理器425可以使用文件的尾部分的先前起始位置。如先前提到的那样,这可以在已经向文件的末尾添加数据的场合有用。
散列器420是可操作地接收数据并且通过对数据执行一组运算来基于该数据产生散列的任何部件。在执行运算时,散列器420可以用对数据的各种部分的运算的结果来更新作为散列器420的变量。如先前提到的那样,在一个实施例中,散列函数可以接收可变长度的数据并且据此产生独立于可变长度的固定尺寸的输出数据。
数据保护引擎430可操作地基于散列管理器指示什么已经改变来创建内容和/或元数据的备份副本。例如,在一个实施例中,如果散列管理器指示文件的内容已经改变,则数据保护引擎430可以创建内容和嵌入的元数据的备份副本。在另一实施例中,只有在仅元数据已经改变的情况下,数据保护引擎430才可以创建元数据的备份副本。在另一实施例中,数据保护引擎430可以将文件视为三个单独文件(出于备份考虑)并且可以仅备份文件的改变的部分。
图5是一般性地表示根据这里描述的主题内容的方面的可能出现的示例动作的流程图。为了简化说明,将结合图5描述的方法描绘和描述为一连串动作。将理解和认识到这里描述的主题内容的方面不受所示动作和/或不受动作顺序限制。在一个实施例中,动作按照如下文描述的顺序出现。然而在其它实施例中,动作可以并行、按照另一顺序和/或与这里未呈现和描述的其它动作一起出现。另外,不是所有所说明的动作可以被需要来实施根据这里描述的主题内容的方面的方法。此外,本领域技术人员将理解和认识到该方法可以可替换地经由状态图被表示为一系列互相关的状态或者被表示为事件。
参照图5,在块505,动作开始。在块510,接收文件改变指示。例如,参照图4,改变检测器415可以检测到储存器435上的文件已经发生改变。
在块515,计算文件的散列。例如,参照图4,散列管理器425可以命令散列器420针对文件的头部分、尾部分和/或中间部分计算散列。如先前提到的那样,在一个实施例中,代表文件头部分和尾部分的长度可以在运行时间之前由开发者等选择并且可以独立于文件的类型(例如不考虑文件的内容而使用)。在另一实施例中,可以通过使用文件的扩展名以根据将文件扩展名与长度关联的数据结构获得长度来获得该长度。
可以分阶段完成计算散列。从块520到块515的线指示这一类型的实施方式。例如,起初可以针对文件的头部计算散列。如果散列不等于先前计算的头部散列,则这指示至少元数据已经改变。在这一点,可以计算文件中间部分的中间散列。如果这一中间散列不等同于先前计算的中间散列,则这指示文件的元数据和内容均已经改变。
另一方面,如果头部散列等于先前计算的头部散列,则可以计算尾部散列。如果尾部散列不等同于先前生成的尾部散列,则这意味着至少元数据已经改变并且可以执行进一步校验以确定内容是否也已经改变。
然而,如果头部散列等同于先前计算的头部散列并且尾部散列等同于先前计算的尾部散列并且文件已经改变(如改变检测器指示的那样),则这意味着文件的内容已经改变。在这一情况下,可以无需生成中间散列,因为其它条件可以用来推知内容已经改变。在这一情况下,在一个实施例中,可以备份包括内容和元数据的整个文件。在另一实施例中,可以仅备份内容。
替代首先计算头部散列,可以根据比较散列与先前生成的散列的结果用以下类似动作首先计算尾部散列。
在块520,确定文件的什么部分(一个或多个)已经改变。例如,使用由散列器420返回的散列,散列管理器425可以确定文件的内容、元数据或者内容和元数据是否已经改变。例如校验头部散列是否等于文件的先前计算的头部散列并且尾部散列是否等于文件的先前计算的尾部散列可以指示是否仅文件的内容已经改变。例如,如果这些条件均为真(并且文件已经改变),则可以确定文件的内容已经改变。
如果这些条件中的任一条件不为真,则认为至少元数据已经改变并且可以执行附加动作以确定内容是否也已经改变。
在块525,可以创建内容和/或元数据的备份副本。例如,参照图4,数据保护引擎430可以制作储存器435上的文件的已经改变的内容和/或元数据的备份副本。如果仅文件的元数据已经改变,则数据保护引擎430根据实施方式可以仅备份元数据或者避免创建文件的任何部分的备份副本。这可以涉及根据指示仅文件的头部分或者尾部分是否已经改变的散列而仅备份文件的头部分或者仅备份文件的尾部分。
在块530可以执行其它动作(如果有)。
如根据前文具体实施方式可见,已经描述了与数据保护有关的方面。尽管这里描述的主题内容的方面容许各种修改和替代构造,但是在附图中示出并且上文已经具体描述了其某些所示实施例。然而应当理解,不旨在将要求保护的主题内容的方面限于公开的具体形式,而是相反,旨在覆盖落入这里描述的主题内容的各种方面的精神和范围内的所有修改、替代结构和等效物。