数据去重复的备份和还原策略的制作方法

文档序号:6366078阅读:184来源:国知局
专利名称:数据去重复的备份和还原策略的制作方法
技术领域
本发明涉及数据去重复,尤其是数据去重复的备份和还原策略。
背景技术
数据去重复,也称为数据优化,是减少需要储存在盘上或需要跨网络进行传送的数据的物理字节量而不会损害原始数据的保真性或完整性的动作。数据去重复减少了存储数据所需的存储容量,并且可因此导致存储硬件成本和数据管理成本方面的节省。数据去重复提供了处理快速增长的数字地储存的数据的解决方案。数据去重复可根据用于消除各持久存储的文件之内和之间的冗余的一项或多项 技术来执行。例如,根据一项技术,在一个或多个文件中出现多次的唯一数据区域可被标识,并且那些经标识的唯一数据区域的单一副本可被物理地储存。可储存对那些经标识的唯一数据区域(也称为数据“块”)的引用,引用指示了包含这些唯一数据区域的各文件以及在这些文件中的位置。该技术一般称为单一实例化。除了单一实例化以外,还可执行对数据的压缩。其他数据减少技术也可被实现为数据去重复解决方案的一部分。管理根据数据去重复技术储存的数据存在困难。例如,由于由数据去重复所强加的数据碎片,在访问根据去重复储存的文件时可能存在等待时间。该等待时间限制了对数据去重复解决方案的采用,尤其是对主存储数据,在主存储数据中用户期望对文件的无缝的、快速的访问。而且,数据去重复算法可在专用装置上运行,或者在存储和提供数据的设备(例如,文件服务器)上运行。在文件服务器的示例中,数据去重复可能不是该设备的主要功能,并且因此可能需要数据去重复技术是高效的,以免过度消耗设备资源(例如,存储器、输入/输出(I/O)机制、中央处理单元(CPU)容量等)。而且,因为数字数据量以非常高的速度增长,所以存储设备(例如,存储盘)的大小以及与计算设备相关联的总存储容量正在增大,从而导致关于不能随着增加存储量而进行很好地伸缩的数据去重复技术的困难。由于对数据的压缩,数据去重复使得能够执行更小的数据备份和更快速的数据备份,并且作为结果地使得能够更快地还原已备份的数据。然而,备份已去重复的数据以及从备份存储中还原已去重复的数据中存在着挑战。

发明内容
提供本发明内容以便以简化形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。提供用于将经优化数据流备份到备份存储以及用于从备份存储还原数据流的方法、系统和计算机程序产品。在本说明书中,经优化数据指已被优化的数据或者已由数据去重复技术(诸如块的单一实例化和压缩等)中的一种或多种进行了去重复的数据。经优化流指被去重复的流,或换言之,它们的数据已使用数据去重复技术被优化。例如,描述了用于备份经优化数据流的实现。块存储包括多个经优化数据流,每个经优化数据流具有包括至少一个数据块的多个块、以及将数据块的标识符映射到数据块在块存储中的位置的经优化流元数据(例如,块存储的块容器中作为流映射块来储存的流映射、全局表、数据库等)。块存储以已去重复的方式包括数据块。可以标识在块存储中储存的一个或多个经优化数据流以供备份。为了备份所标识的经优化数据流,块存储的至少一部分被储存在备份存储中。根据所选择的备份技术,(其一部分、或整体上)块存储被储存在备份存储中。例如,根据经优化备份技术,块存储的一个或多个块容器被整体上储存在备份存储中。多个经优化流结构被储存在备份存储中。经优化流结构是为备份所标识的经优化数据流的重解析点。根据未经优化备份技术,为备份所标识的每个经优化数据流被再水合为包括由经优化数据流的元数据所引用的任一数据块的对应的未经优化数据流。每个未经优化数据流被储存在备份存储中。根据项目级备份技术,第一经优化数据流被标识以供备份。确定由尚未被储存到 备份存储中的第一经优化数据流的元数据所引用的一个或多个数据块。第一经优化数据流的经优化流元数据被储存到备份存储中。被确定为尚未被备份的数据块也被储存在备份存储中。为备份所标识的每个经优化数据流可按照类似的方式被储存在备份存储中。根据数据块标识符备份技术,分析每个经优化数据流的经优化流元数据以确定经优化流元数据所引用的数据块的数据块标识符。每个经优化数据流的经优化流结构与对应的至少一个数据块标识符被储存在备份存储中。块存储的存储被引用的数据块的一个或多个块容器被储存到备份存储中。可以基于试探法来选择备份技术。执行所选择的备份技术以在备份存储中备份多个经优化数据流。还描述了用于从备份存储还原经优化数据流的实现。接收针对要从备份存储的块存储中检索的经优化数据流的请求。请求包括与数据流相对应的经优化流元数据的标识符。基于经优化流元数据标识符来生成对还原应用的第一调用。第一调用指定了备份存储中的流容器的文件名,并且指定了流容器中经优化流元数据的偏移,该流容器存储由经优化流元数据标识符所标识的经优化流元数据。响应于第一调用,接收经优化流元数据。标识经优化流元数据中所引用的至少一个数据块标识符。对应于由经优化流元数据所引用的数据块生成对还原应用的至少一个附加调用,以从备份存储的至少一个块容器中获得至少一个数据块。响应于附加调用,接收数据块。数据块是可组合的以还原数据流。在一个实现中,可以基于作为第一排序键的块容器和作为第二键的块偏移对经优化流元数据所引用的数据块标识符进行排序。可以按照排序所定义的次序来生成要检索数据块的对还原应用的调用。在一个实现中,还原引擎可以用还原计划来调用还原应用,该还原计划可包括通过对包含数据块的备份文件进行排序来确定还原次序的请求、或通知还原应用将要还原哪些文件范围的请求,使得还原应用可以通过执行高速缓存和预读操作来优化。描述了用于备份和/或还原经优化数据流的系统的实现。在一个实现中,数据备份模块接收对储存在块存储中的要被备份的多个经优化数据流的标识。数据备份模块被配置为将块存储的至少一部分储存在备份存储中以备份多个经优化数据流。
在实现中,数据备份模块可包括一个或多个经优化文件备份模块、再水合备份模块、项目级备份模块、和/或数据块标识符备份模块。经优化文件备份模块被配置为将块整体上连同作为经优化数据流的重解析点的经优化数据结构储存在备份存储中。再水合备份模块被配置为将每个经优化数据流再水合为对应的未经优化数据流,该未经优化数据流包括由经优化流元数据所引用的任一数据块。再水合备份模块将每个未经优化数据流储存在备份存储中。项目级备份模块被配置为为每个经优化数据流确定由经优化数据流的经优化流元数据的元数据所引用的尚未被储存到备份存储中的一个或多个数据块。项目级备份模块将经优化数据流的经优化流元数据储存在备份存储中,并且存储被确定为不是备份存储中的副本的一个或多个数据块。数据块标识符备份技术被配置为分析每个经优化数据流的经优化流元数据以确定由经优化流元数据所引用的数据块的至少一个数据块标识符。数据块标识符备份模块将每个经优化数据流与对应的数据块标识符储存在备份存储中,并且将块存储的一个或多个块容器储存在备份存储中。在实现中,数据块备份模块可包括试探模块。试探模块被配置为基于试探法来选择备份技术,包括诸如要被备份的数据流的大小、去重复(移除冗余的数据块)之后的数据流的大小、块存储的总体大小的试探法,和诸如可基于这些量来生成的试探法的其他试探 法。试探模块使得能够执行备份技术以将多个经优化数据流备份在备份存储中。在另一个实现中,数据还原模块被配置为从备份存储中还原经优化数据流。数据还原模块包括接收对要从备份存储的块存储中检索的数据流的请求的文件重构器。该请求包括与数据流相对应的经优化流元数据的标识符。文件重构器包括(例如,由备份/还原系统提供的)回调模块。回调模块基于经优化流元数据标识符来生成对还原应用的第一调用。第一调用指定了备份存储中的第一块容器的文件名,并且指定了第一块容器中经优化流元数据的偏移,该第一块容器存储由经优化流元数据标识符所标识的经优化流元数据。文件重构器响应于第一调用,接收经优化流元数据,并且确定经优化流元数据中所引用的至少一个数据块标识符。回调模块对应于数据块标识符生成对还原应用的至少一个附加调用,以从备份存储中的一个或多个块容器中获得一个或多个数据块。文件重构器响应于附加调用接收数据块,并且可以组合数据块来还原数据流。或者,文件重构器可将经优化流元 数据和数据块储存到块存储中,并且数据流的经优化流元数据可被储存到引用了储存在块存储中的块的存储中。回调模块还可用还原计划来调用还原应用,该还原计划可包括通过对数据块容器文件列表排序来确定还原次序的请求、或通知还原应用将要从容器文件中还原哪些范围的请求,使得还原应用可以通过执行高速缓存和预读操作来优化。此处还描述了用于将经优化数据流备份到备份存储中,用于从备份存储中还原经优化数据流,以及用于此处描述的其他实施例的计算机程序产品。下面将参考各个附图,详细描述本发明的进一步特点和优点,以及本发明的各实施例的结构和操作。值得注意的是,本发明不仅限于此处所描述的特定实施例。本文呈现这些实施例仅用于说明性的用途。基于本文所包含的描述,其它实施例对于相关领域的技术人员将是显而易见的。


结合到本说明书并构成本说明书的一部分的附图示出了本发明,且与描述一起,进一步用于说明本发明的原理,并允许那些精通相关的技术人员实施和使用本发明。图I示出了根据示例实施例的数据去重复系统的框图。图2示出根据示例实施例的块存储的框图。图3示出根据示例实施例的块存储的框图。图4示出了根据示例实施例的数据流存储系统的框图。图5示出了根据示例实施例的用于储存数据流的流程图。图6示出图解根据实施例的将数据流储存在数据存储中的示例的框图。
图7根据示例实施例示出包括再水合(rehydration)模块的块存储接口的框图。图8示出根据示例实施例的块容器的框图。图9示出根据示例实施例的重定向表的框图。图10示出了根据示例实施例的用于储存数据流的流程图。图11示出根据示例实施例的用以访问块存储以再水合数据流的再水合模块的框图。图12示出了根据示例实施例的用于在数据优化系统中执行对数据的备份的流程图。图13示出了根据示例实施例的数据备份系统的框图。图14-17示出根据示例实施例的执行针对经优化数据流的各种备份技术的流程图。图18示出了根据示例实施例的基于试探法来提供用于选择并执行备份技术的过程的流程图。图19示出了根据示例实施例的用于在数据优化系统中执行对备份数据的还原的流程图。图20示出了根据示例实施例的数据还原系统的框图。图21示出了根据实施例的访问重分布表的回调(callback)模块的框图。图22示出了根据示例实施例的提供用于访问重分布表以获得各个块的已更新偏移的过程的流程图。图23示出了根据示例实施例的文件重构器的框图。图24示出了根据示例实施例的提供用于对数据块还原次序进行排序的过程的流程图。图25示出了可用于实现本发明的各实施例的示例计算机的框图。当结合其中相同的参考字符标识对应的元素的附图时,本发明的特征和优点将从以下阐述的详细描述中变得更加显而易见。在附图中,相同的参考标号一般指相同的、功能上相似的和/或结构上相似的元素。其中元素第一次出现的附图由对应的参考标号中最左侧的数字指示。
具体实施例方式I.介绍本说明书公开了包括本发明的特征的一个或多个实施例。所公开的实施例只例示了本发明。本发明的范围不仅限于所公开的实施例。本发明由所附的权利要求进行定义。说明书中对“一个实施例”、“实施例”、“示例实施例”等等的引用表示所描述的实施例可包括特定特征、结构或特性,但是,每一个实施例可不必包括该特定特征、结构,或特征。此外,这些短语不一定指相同的实施例。此外,当关于某一实施例描述特定特征、结构或特性时,不管是否被明确描述,关于其他实施例来实现该特征、结构或特性被认为是在本领域技术人员的知识范围内。在本说明书中,经优化数据指已被优化的数据或者已由数据去重复技术(诸如块的单一实例化和压缩等)中的一种或多种进行了去重复的数据。经优化流指被去重复的流,或换言之,它们的数据已使用数据去重复技术被优化。II.示例实施例实施例提供用于数据去重复的技术。这些实施例允许减少要被储存或者要被传输的数据的量(例如,字节数),而不损害数据的保真性和完整性。例如,各实施例允许减少访问经优化数据时的等待时间的量。而且,各实施例使诸如计算机器/设备等资源能够被更 高效地使用,从而降低了资源消耗。而且,各实施例提供用于数据去重复、已去重复的数据的备份、以及从可随着所储存的数字数据量的增长而伸缩的存储中恢复已备份的数据的技术。例如,在一实施例中,提供了用于数据去重复的可伸缩块存储。该块存储允许用于最小化对经优化数据的访问中的等待时间、减少机器资源消耗(例如,存储器和磁盘I/O)、以及增强数据去重复、数据备份、和数据还原期间的可靠性的各种技术。各示例实施例在以下子节中进一步详细描述。A.示例数据去重复实施例在各实施例中,可优化要储存的数据,以减少数据所需的存储的量。例如,数据流可以唯一数据块的形式来储存。数据块可被定义数据流的经优化流元数据所引用。以这种方式,数据流被更高效地储存,因为多个数据流的元数据可引用同一已储存的数据块,而不是同一数据块被储存多次。此外,可根据需要从存储(例如由应用)请求经优化数据。在这种情况下,可根据对应的元数据从已储存的数据块重新组装数据流。例如,图I示出了根据示例实施例的数据去重复系统100的框图。如图I所示,系统100包括存储系统102、数据去重复模块104、维护模块106和存储108。而且,存储系统102包括数据流API (应用编程接口 110、块维护API 112、和数据访问API 114。描述系统100如下,以说明经优化数据的存储以及经优化数据从存储的恢复,并且该系统并非旨在限制。系统100被配置成允许以高效的方式将数据储存在存储108中,以及允许从存储108取回数据。例如,在一实施例中,可存在数据去重复模块104。数据去重复模块104被配置成优化接收到的数据以供存储。例如,数据去重复模块104可压缩作为数据流132来接收的已接收数据。数据流132可包括数据文件的一部分、单个数据文件、多个数据文件、和/或各文件和/或各文件部分的组合。如图I所示出地,数据去重复模块104生成数据块124,数据块124可以是数据流132的经压缩并经分段的版本。数据流API 110提供用于存储系统102接收数据块124的接口。数据块124可包括形成数据流132的多个数据块,数据块124从该数据流132生成。数据流API 110可以相关领域的技术人员所公知的任何合适方式来配置。数据流API 110可输出由块存储接口116接收的数据块124。如图I所示,存储108耦合到存储系统102。块存储接口 116是API 110、112和114与存储108之间的接口。例如,块存储接口 116可接收数据块124,并可将数据块124中的数据块储存在存储108中。例如,如图I所示,存储108包括块存储118。块存储接口116可将数据块124中的接收到的数据块,如数据块128,储存在块存储118中。数据访问API 114提供用于应用请求存储系统102的数据的接口。例如,如图I所示,数据访问API 114可接收数据流请求120。数据访问API114可以相关领域的技术人员所公知的任何合适的方式来配置。数据访问API 114可输出要由块存储接口 116来接收的数据流请求120。块存储接口 116可向存储108 (例如,向块存储118)请求数据块,这些数据块与数据流请求120中所请求的数据流相对应。块存储接口 116可从存储108接收所请求的数据块作为数据块130,并可将包括数据块130的数据流提供给数据访问API 114。数据访问API 114可将数据流(例如,一个或重新组装的文件)作为数据流响应122而提供给发出请求的应用。 而且,可存在维护模块106来执行与储存在块存储118中的数据块有关的一个或多个类型的维护作业。例如,维护模块106可包括对储存在存储108中的数据块执行碎片整理的碎片整理模块。例如,碎片整理模块可被配置成消除存储108中的空白空间(例如,执行压缩)、将相关的数据块移入序列、和/或执行其他相关任务。在另一示例中,维护模块106可包括对储存在存储108中的数据块执行垃圾收集的垃圾收集模块。例如,垃圾信息收集模块可被配置成删除存储108中的未被使用的数据块。在其他实施例中,维护模块106可对存储108执行附加的或替代的维护任务。如图I所示,块维护API 112提供用于维护模块106与存储系统102进行交互的接口。维护模块106可生成由块维护API 112来接收的维护任务126(例如,碎片整理指令、压缩指令、数据块删除指令等)。块维护API 112可以相关领域的技术人员所公知的任何合适的方式来配置。块维护API 112可将维护任务126提供给块存储接口 116。块存储接口 116可允许对储存在存储108中的数据块执行维护任务126。存储系统102可以任何合适的形式来实现,包括一个或多个计算机/计算设备等形式。存储108可包括一种或多种类型的存储机制,包括磁盘(例如,以硬盘驱动器)、光盘(例如,以光盘驱动器)、磁带(例如,以磁带驱动器)、和/或任何其他合适类型的存储介质。注意,数据去重复系统100是其中可实现本发明的各实施例的环境的示例。数据去重复系统100出于说明的目的而被提供,并不旨在限制。可将各实施例结合在其他类型和配置的数据去重复系统中。B.允许数据块定位的示例块存储实施例图I中的块存储118可以以任何方式以数据块形式存储数据流。例如,块存储118可以以指示数据块被包括在数据流中的映射、数据库或其他形式来储存经优化流元数据。块存储118还可储存被引用的数据块。在一实施例中,根据数据去重复技术,块存储118不储存数据块的重复副本。例如,图2示出了根据示例实施例的块存储118的框图。如图2所示,块存储118包括流容器202和块容器204。流容器202包括一个或多个数据流的经优化流元数据206,而块容器204包括多个数据块208。数据块208是被一个或多个数据流(例如,图I中的数据流132)引用的一段数据。经优化流元数据206是描述原始数据流结构与经优化数据块结构之间的映射的数据结构。经优化流元数据206直接包括或者通过间接层包括数据块位置信息,使得可定位所引用的数据块,并将其组装成文件流视图。经优化流元数据206在各个实施例中可具有各种形式,包括具有流映射的形式(每个流映射指示对应的数据流的数据块位置)、(指示全部数据流的数据块位置的)数据库或全局表、或其他形式。在图2的示例中,数据块208和经优化流元数据206分别被储存在流容器202和块容器204中,容器可以是文件系统中的文件。在一实施例中,块存储118以块的形式存储所有数据,使得经优化流元数据206被储存成包含内部元数据(数据流元数据)的数据块(例如,每个流映射被储存成数据块),以便描述文件流到数据块208的映射、数据块地址、以及散列。或者,可以以其他形式(例如,中央数据库或表等)来储存经优化流元数据206。在各实施例中,可以以各种方式来配置流容器202和块容器204。例如,图3示出了根据一示例实施例的块存储300的框图。块存储300是图2中的块存储118的一个示例。如图3中所示出地,块存储300包括存储容器302和块容器304。存储容器302是图2中 的存储容器202的一个示例,且块容器304是图2中的块容器204的一个示例。在图3的实施例中,存储容器302包括文件头306、重定向表308、和多个流映射310。流映射310是出于方便说明而提供的经优化流元数据206的示例。出于说明的目的,此处可以经常地按照流映射来描述经优化流元数据206,但应当理解的是,在其他实施例中,经优化流元数据206可被替换地储存成数据库、全局表等。出于说明的目的,图3中示出了第一流映射310a和第二流映射310b,但在各实施例中,流容器302中可包括任意数量的流映射310,这包括成百的、成千的、和甚至更多数量的流映射310。块容器304包括文件头318、重定向表320、以及多个数据块322。出于说明的目的,图3中示出了第一数据块322a和第二数据块322b,但在各实施例中,块容器304中可包括任意数量的数据块322,这包括成百的、成千的、和甚至更多数量的数据块322。图3的这些特征描述如下。在流容器302被作为文件来储存的实施例中,文件头306是流容器302的文件头。文件头306可包括与流容器302相关联的信息,该信息包括流容器标识符(例如,流容器标识号)等。重定向表308可选地存在于流容器302中。当存在时,重定向表308可储存关于流映射310中的任何一个在流容器302中的位置的改变的信息。例如,可将第一流映射310a从流容器302删除,并且可将第二流映射310b移动至第一流映射310a的位置(例如,由于碎片整理或压缩例程)。在移动之后,应用可以访问流容器302,以检索第二流映射310b。然而,应用可能仍在使用第二流映射310b的之前位置。重定向表308可包括第二流映射310b的映射,该映射指示了第二流映射310b的当前位置。因此,应用程序可访问重定向表308来确定第二流映射310b的当前位置,并且因此可被允许从该新位置检索第二流映射310b。流映射310是图2的经优化流元数据206的示例。流映射310中的每一个用于定义构成特定数据流的数据块322的序列。如图3所示,流映射310中的每一个可包括流头部312、元数据314和散列值316。例如,第一流映射310a被示为包括流头部312a、元数据314a、和散列值316a,而第二流映射310b被示为包括流头部312b、元数据314b、和散列值316b。每一个流头部312都包括与对应的流映射310相关联的信息,诸如流映射标识符(例如,流映射标识号)等。每个元数据314都包括描述构成由对应的流映射310所定义的数据流的数据块322的信息。散列值316可选地存在。散列值316是构成由对应的流映射310所定义的数据流的数据块322的散列值。散列值316可被储存在流映射310中,以便提供对构成对应数据流的数据块的散列矢量的高效访问。例如,这可能对有线数据传送场景是有用的,在这些场景中期望对数据流散列的整个列表(所有经优化文件块的散列)的快速访问。元数据314是可被包括在每个被引用的数据块322的流映射310中的每个数据块的元数据或数据块专用的元数据。在元数据314中可包括各种类型的信息。例如,在一个实施例中,数据块322的元数据314可包括一个或多个数据流偏移、数据块标识符、和位置指示符。数据流偏移指示了由特定流映射310所定义的数据流中的相关联的数据块322的位置(例如,从数据流起始的字节量、或从数据流中的其他参考点、在相关联的数据块322 开始处)。数据块标识符(也称为块id或“可靠的块定位符”)是指向块容器304中的对应数据块322的引用或指针。位置指示符是表示块容器304中的块插入次序的信息,允许确定哪些数据块322可被共同的流映射310引用。在其他实施例中,元数据314可包括每个所引用的数据块322的附加和/或替换信息。参考图3中的块容器304,在块容器304被储存为文件的实施例中,文件头318是块容器304的文件头。文件头318可包括与块容器304相关联的信息,包括块容器标识符(例如,块容器标识号)、指示块容器304的修订号的块容器生成指示符等。重定向表320可选地存在于块容器304中。当存在时,重定向表320可以与流容器302的重定向表308处理流映射310的位置中的改变相类似的方式来储存关于数据块322中的任何一个数据块的块容器304中的位置中的改变的信息。数据块322是图2中的数据块208的示例。如图3所示,数据块322中的每一个包括块头部324和块数据326。例如,第一数据块322a包括块头部324a和块数据326a,而第二数据块322b包括块头部324b和块数据326b。每个块头部312都包括与对应的数据块322相关联的信息,诸如数据块标识符等。每个块数据326包括对应的数据,该数据可以是压缩或非压缩形式的。流映射310和数据块322分别被储存在流容器302和块容器304中,以允许数据去重复。例如,图I中的块存储接口 116可接收与数据流132相关联的数据块124,并可将数据块储存在图3中的块存储300中。例如,对于特定的数据流132,块存储接口 116可生成流映射,该流映射作为流映射310通过块存储接口 116储存在流容器302中,流映射310引用储存在块容器304中的一个或多个数据块322。例如,图3指示了根据示例实施例的由流映射310引用的某些数据块322。如图3所示,第一流映射310a包括元数据314a,元数据314a包括对块容器304中的第一数据块322a和第二数据块322b的引用。因此,第一数据块322a和第二数据块322b被包括在与第一流映射310a相关联的源数据流中。例如,元数据314a可包括指示第一数据块322a在由第一流映射310a所定义的源数据流中的位置的第一数据块322a的数据流偏移402值、第一数据块322a在块容器304中的数据块标识符404 (例如,储存在块头部324a中的第一数据块322a的数据块标识符)、以及第一数据块322a的位置指示符406。而且,元数据314a可包括指示第二数据块322b在该源数据流中的位置的第二数据块322b的数据流偏移402值、第二数据块322b在块容器304中的数据块标识符404 (例如,储存在块头部324b中的第二数据块322b的数据块标识符)、以及第二数据块322b的位置指示符406。在一实施例中,第一数据块322a和第二数据块322b可具有相同值的位置指示符,该相同值被生成来与由第一流映射310a所定义的源数据流相对应,并且该相同值指示第一数据块322a和第二数据块322b被连续地(相邻地)储存在块容器304中。此外,第二流映射310b包括元数据314b,元数据314b包括对块容器304中的第二数据块322b的引用。例如,元数据314b可包括指示第二数据块322b在由第二流映射310b所定义的源数据流中的位置的第二数据块322b的数据流偏移402值、第二数据块322b在块容器304中的数据块标识符404 (例如,储存在块头部324b中的第二数据块322b的数据块标识符)、以及第二数据块322b的位置指示符406。元数据314b中第二数据块322b的位置指示符406具有与为第一数据块322a和第二数据块322b生成的位置指示符相同的值,因为第二数据块322b最初被储存在对于第一流映射310a的块容器304中。在由第二流映射310b定义的源数据流被储存在块存储300中时新储存在块容器304中的任何其他数据 块322(图3中未示出)被赋予位置指示符406的新值。图I中的块存储接口 116可以用各种方式来配置以将数据流储存在图3的块存储300中。例如,图4示出了根据一示例实施例的数据流存储系统400的框图。如图4所示,数据流存储系统400包括数据流解析器402、块存储接口 116、流容器302、以及块容器304。在一实施例中,可将数据流解析器402包括在图I的数据去重复模块104中。在图4的实施例中,块存储接口 116包括数据块存储管理器404、元数据生成器406和流映射生成器408。参考图5如下描述图4中的这些特征。图5示出了根据一示例实施例的用于储存数据流的流程图500。在一实施例中,图4中的系统400可根据流程图500来操作。基于有关流程图500的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。流程图500和系统400描述如下。流程图500开始于步骤502。在步骤502中,将数据流解析成数据块。例如,如图4所示,数据流解析器402可接收数据流410。类似于图I中的数据流132,数据流410可包括一个或多个文件和/或文件部分。数据流解析器402被配置成将数据流410解析成被指示为数据块序列412的数据块的序列。例如,在一实施例中,数据块序列412可以以数据块定位在数据流410中的次序来包括数据块的序列。数据块序列412中的数据块可具有相同的大小或可具有不同的大小。在步骤504处,确定这些数据块中的任何一个是否是储存在块容器中的数据块的重复。例如,如图4所示,数据块存储管理器404接收数据块序列412。数据块存储管理器404被配置成确定数据块序列412中的数据块中的任何一个是否已经被储存在块容器304中并因此是重复的。例如,在一实施例中,如图4中所示出地,数据块存储管理器404可从块容器304接收数据块信息426,数据块信息626可包括储存在块容器304中的每一数据块322的散列值。在另一实施例中,数据块存储管理器404可从流容器302接收散列值316 (图3),散列值316是储存在块容器304中的数据块322的散列值。数据块存储管理器404可为数据块序列412中的每一数据块生成散列值,并可将所生成的散列值与数据块信息426中(或者从流容器302处)接收的散列值进行比较,以确定数据块序列412中的各数据块是否已经被储存在块容器304中。在其他实施例中,数据块存储管理器404可确定数据块序列412中的哪些数据块已以相关领域的技术人员所公知的其他方式储存在块容器304中。如图4中所示出地,数据块存储管理器404生成已储存块指示416,该已储存块指示412指示了数据块序列612中的哪些数据块已被储存在块容器304中。再参考图5,在步骤506处,将被确定为不是副本的各数据块以相邻的排列并以与数据流中的顺序相同的顺序储存在块容器中。例如,在一实施例中,数据块存储管理器404可被配制成将数据块序列412中没有被确定为已储存的各数据块储存在块容器304中。例如,在一实施例中,数据块存储管理器404可为每一新数据块生成块头部324 (例如,数据块标识符),并将每一新数据块储存为具有块头部324和块数据326的数据块322。此外,在一实施例中,数据块存储管理器404被配置成将各新数据块以相邻的排列并以与源数据流中的顺序相同的顺序(例如,以在数据块序列412中接收的次序)储存在块容器304中。在步骤508处,为被确定为不是副本的各数据块中的每一个生成元数据,数据块 的元数据包括数据流偏移、指向在块容器中的位置的指针、以及位置指示符。例如,如图4所示,元数据生成器406可接收数据块序列412和已储存块指示416。在一实施例中,元数据生成器406可被配置成生成元数据(例如,图3中的元数据314)。元数据生成器406可为数据块序列412中的每一数据块生成元数据,该元数据包括数据流偏移402、数据块标识符404、和位置指示符406。对于被确定为已储存在块容器304中的各数据块(在步骤504中),数据块标识符404被配置成指向该已储存数据块。对于在步骤508中新储存在块容器304中的各数据块,数据块标识符404被配制成指向该新储存的数据块。再参考图5,在步骤510中,为包括所生成的元数据的数据流生成流映射。例如,如图4所示,流映射生成器408接收在特定数据流的数据块序列412中接收到的每一数据块的数据块元数据420。流映射生成器408生成与包括每一所接收的数据块的数据块元数据424的数据流相关联的流映射420。此外,流映射生成器408可生成流映射424的流头部312,并可将每个所接收的数据块的散列值316包括在流映射424中。在步骤512中,将该流映射储存在流容器中。例如,如图4所示,流映射生成器408可将流映射424(例如,作为流映射310)存储(或“持久存储”)在流容器302中。注意在替换的实施例中,可在数据库或全局表中形成用于数据流的条目,该数据流包括指向或指示由数据流所引用的数据块的位置的元数据,而非生成和储存数据流的流映射。图6示出根据实施例示出的将数据流储存在数据存储中的示例的框图。提供图6以用作说明的目的,而不旨在限制。在图6的示例中,将第一数据流602a储存在数据存储中,接着将第二数据流602b储存在该数据存储中。对第一数据流602a,示出流链接608a (也称为“流指针”或“流元数据存根(stub)”),并对第二数据流602b,示出流链接608b。每个流链接608将数据流602链接到块存储中的对应数据(例如,流映射或其他经优化流元数据),该块存储允许数据流602被重新组装。如图6所示,第一数据流602a包括四个数据块614a-614d。如上所述,可为第一数据流602a生成流映射604a,并可将四个数据块614a-614d储存在块容器606中。流映射604a包括指向数据块614a_614d中的每一个的指针(由图6中的箭头表示)。可将数据块614a-614d分类在对块容器606而言全部是新的、唯一的数据块的单个组中。这样,可将数据块614a-614d以连续的排列并以与数据流602a中的次序相同的次序储存在块容器606中。例如,数据块614a-614d可以是块容器606中储存的前四个数据块,或者如果一个或多个数据块已被储存在块容器606中,则可将数据块614a-614d储存在块容器606中紧随在这些已储存的数据块之后。向数据块614a_614d中的每一个分配流映射604a中的相同位置指示符值,该位置指示符值是为第一数据流602a选择的。第二数据流602b包括四个数据块614b、614c、614e和614f。可为第二数据流602b生成流映射604b。可根据流程图500的步骤504将数据块614b、614c、614e和614f分类在两组数据块中包括块614b和614c的第一组,块614b和614c已经具有驻留在块容器606中的副本(由于第一数据流602a的块序列);以及包括块614e和614f的第二组,块614e和614f是新的、唯一的数据块(其不具有已储存在块容器1006中的副本)。由于数据块614b和614c已被储存在块容器606中,因此流映射604b包括指向已储存在块容器606中的数据块614b和614c的指针(数据块标识符404的值)。因此,可将数据块614b和614c作为指向块容器606中的现有数据块的指针来储存,而无需储存数据块614b和614c的块数据。如上所述,由于数据块614e和614f尚未储存在块容器606中,因此可将数据块614e和614f储存在块容器606中。例如,由于数据块614e和614f对块容器606而言是新的、 次序、在当前储存在块容器606中的上一个已储存的数据块(例如,数据块614d)之后储存在块容器606中。流映射604b包括第一至第四数据块标识符612a-612d,这些标识符分别指向储存在块容器606中的数据块614b、614c、614e和614f。在流映射604b中,向数据块614b和614c分配与第一数据流602a相关联的位置指示符值,并向数据块614e和614f分配为第二数据流602b选择的位置指示符值。注意,任何数量的附加数据流602可以以与数据流602a和602b类似的方式来进行储存。此外,注意,在图6的示例中,向第二流映射604b中的数据块各自分配如下两个位置指示符值中的一个——为第二流映射604b选择的新位置指示符值,或者与第一流映射604a的数据块相关联的位置指示符值。在各实施例中,某一流映射的数据块可被赋予任何数量的位置指示符值中的一个,这取决于与该流映射中在块容器中已存在的数据块相关联的不同位置指示符的数量。例如,如上所述,可向对块容器而言为新的数据块赋予为与流映射相关联的特定数据流所选择的新位置指示符值。此外,向流映射所引用的已经存在于块容器中的任何数量的数据块赋予已经存在于该块容器中的数据块的相应位置指示符值。这可意味着可向数据流中任何数量的一组或多组数据块分配相应的位置指示符值,使得可向该数据流中的各数据块赋予从两个、三个或甚至更多个不同的位置指示符值中选择的位置指示符。因此,流映射元数据中的位置指示符允许各数据块在数据流中的位置被确定。这是因为重复的数据块趋向于成组地出现。在新数据流包含已知数据块(已经储存在块容器中)时,存在以下合理的可能性在该新数据流中下一数据块也是重复的数据块(已经储存在块容器中)。由于各新的、原始数据被块根据位置指示符彼此相邻地储存在块容器中,因此新数据流所引用的各已存在数据块更可能也被连续地储存在块容器中。这有助于改进从块存储读取经优化数据流的性能。例如,被配置成基于相应的流映射和数据块来重新组装数据流的再水合模块可对储存在块容器中的各数据块执行预读(read-ahead),以期望找到在预读缓存器中需要的下一数据块。此外,如碎片整理和压缩等块存储维护任务可执行它们的任务,同时通过在现有的相邻块在块容器中四处移动时将这些相邻块保持在一起来尝试维持原始位置。例如,在数据流被优化并且以流映射310和数据块322的形式被储存在块存储300之后,可从块存储300处读取这些数据流。图7示出了根据一示例实施例的包括再水合(rehydration)模块702的块存储接口 116的框图。再水合模块702被配置成重新组装所请求的数据流(例如,根据图I中示出的数据流请求120请求的数据流)。例如,对于响应于数据流请求120 (图I)要从块存储300读取的数据流,再水合模块702确定并接收被来自块存储300的数据流请求120的经优化文件所引用(例如,在重解析位置处)的流映射310。例如,再水合模块702可将请求120的流映射标识符提供给图3中的块存储300。块存储200基于流标识符(例如,通过扫描流映射头部312)接收相应的流映射310,并且再水合模块702可根据检索到的流映射310重新生成或“再水合”数据流。所取回的流映射310包括指向块容器304中包括在数据流中的数据块中的每一个数据块的指针(图4中的数据块标识符404)。再水合模块702使用这些指针来取回这些数据块322中的每一个。再水合模块702可使用包括在所取回的流映射310中的数据流偏移402 (例如,外加可被包括在所 取回的流映射310中的数据块长度信息)将所取回的数据块322以合适的次序排列以重新生成由再水合模块702作为数据流704输出的数据流。通过对位置指示符406的使用,可执行从块容器304中对数据块322的顺序读取。例如,在文件流正被再水合模块702使用串行1/0(输出/输出)请求或包括一个以上数据块边界的任何I/O请求在块存储300中访问时,流映射310允许对数据库的快速访问。这是因为在块存储300创建流映射310的时候,将各新数据块以流映射次序相邻地储存在块容器304中。因此,在由再水合模块702的顺序数据访问期间,属于同一数据流的各数据块可能会被连续地储存,这些连续数据块可用单个数据访问“查找”(例如,向前或向后经过块容器移动以便找到要读取的下一个已储存的数据块)来访问和读取,并且碎片被减少成非唯一数据块(被流映射引用的、在储存相应的数据流之前已经存在于块容器中的数据块)。顺序数据访问期间的数据访问查找限于以下情况,其中某一数据流的一数据块或一系列块被发现已经存在于块存储中。流映射310提供了用于可能被数据去重复系统中的其他模块(例如,被文件复制模块使用的散列值的列表)需要的经优化文件元数据(例如,元数据314)的高效元数据容器。流映射310是简明的,并且可被高速缓存在存储器中以供快速访问。块存储300可基于LRU(至少目前使用的)算法或其他类型的高速缓存算法来高速缓存(被再水合模块702频繁请求和再水合的经优化数据流的)被频繁访问的流映射310。C.允许可靠的定位数据块的示例块存储的实施例如上所述,可出于各种原因(诸如由于碎片整理技术、由于执行垃圾收集的压缩技术等)在块容器内移动数据块。本小节中描述了用于跟踪块容器内的数据块的移动的实施例。图8示出了根据示例实施例的块容器304的框图。如图8所示,块容器304大致类似于图3中的块容器304,但在文件头318中还包括块容器标识符802和块容器生成指示804。块容器标识符802是分配给块容器304的唯一标识符(例如,标识号),用于将块容器304与可能存在于块存储300中的其他块容器区分开。块容器生成指示804指示块容器304的修订或生成。例如,每当在块容器304内移动一个或多个数据块322时,可修改生成指示804(例如,可将其从诸如0或其他开始值的开始生成级别递增到下一生成级别)。在一实施例中,块容器304可由块容器标识符802和块容器生成指示804的组合(例如,可形成块容器304的文件名)来标识。在一实施例中,块容器标识符802和块容器生成指示804两者都可以是整数。块容器304可具有固定的大小(即,固定数量的条目),或者可具有可变的大小。例如,在一个示例实施例中,可将定义块容器304的每个块容器文件的大小设为储存大约16000个块,并且平均数据块大小为64KB,其中块容器文件的大小被设为1GB。在其他实施例中,块容器文件可具有替换的大小。可根据元数据400 (图4)的数据块标识符404以各种方式引用储存在块容器304中的数据块322。在各个实施例中,数据块标识符404可包括各种类型的信息以允许这种弓I用。例如,在一个实施例中,数据块标识符404可包括数据块容器标识符、本地标识符、块容器生成值、和块偏移值中的一个或多个。块容器标识符具有其中储存有数据块322的块容器304的块容器标识符802的值。本地标识符是分配给数据块322的标识符(例如,数字 值),该标识符对于存储有数据块322的块容器304内的被分配的数据块322是唯一的(例如,是数据块的唯一的、每容器标识符)。块容器生成值具有其中储存有数据块322的块容器304的、在数据块322被储存在块容器304中的时候的块容器生成指示804的值。块偏移值是块容器304中的数据块322在数据块322被添加到块容器304中的时候的偏移。在一实施例中,块存储可实现可靠的块定位器,该块定位器可用于跟踪已移动的数据块。与传统技术相反,该可靠的块定位器并不使用用于将数据块标识符映射到物理块位置的索引。传统技术使用将块标识符映射到块数据物理位置的索引。存储系统的规模(例如,兆兆字节(TB)的100倍或更大)以及平均块大小(例如,64KB)使得这一索引非常大。如果将这一索引全部加载到存储器中,则它将消耗大量的可用存储器和处理器资源。如果不将该索引加载到存储器中,则数据访问将变得很慢,因为需要将该索引分页储存到存储器中。在一实施例中,可靠的块定位器是以重定向表的形式来实现的,诸如图3中的块容器304的重定向表320。重定向表可储存在块容器304中已被移动的数据块322的一个或多个条目。每一条目标识已移动的数据块322并具有数据块偏移值,该数据块偏移值指示数据块322在块容器304中其新位置处的位置。在数据流的再水合期间可参考重定向表,以定位数据流中已移动的任何数据块。例如,图9示出了根据一示例实施例的重定向表900的框图。如果在块容器304中移动数据块322,则使用重定向表900来定位数据块322 (包括作为数据块来储存的流映射)。例如,重定向表900允许为了作为垃圾收集和压缩过程的一部分的空间回收而在块容器304中移动数据块,并且仍可基于数据块322的原始块标识符来对该数据块进行可靠的定位。如图9所示,重定向表900包括多个条目902,诸如第一条目902a和第二条目902b。可将任何数量的条目902包括在重定向表900中,包括成百的、成千的、以及甚至更多数量的条目902。每一条目902包括局部标识符904和已改变的块偏移值906。例如,第一条目902a包括第一本地标识符904a和第一已改变的块偏移值906a,且第二条目902b包括第二本地标识符904b和第二已改变的块偏移值906b。本地标识符904是将数据块322最初储存在块容器304时分配给数据块322的唯一本地标识符。已改变的块偏移值906是被移动了的、具有相应的本地标识符904的数据块322的新的块偏移值。因此,可使用数据块的位置指示符来访问重定向表900,以确定数据块的已改变块偏移值。例如,图9中的本地标识符904a可以是分配给图14中的数据块1014b的本地标识符。可使用分配给数据块614b的本地标识符来访问重定向表900中的条目902a,以确定已改变的块偏移值906a,该已改变的块偏移值906a指示数据块614b在块容器304中的新位置。注意,重定向表900可具有任何大小。例如,在一实施例中,重定向表900的大小可以以(数据块的预定最大数量-出于压缩而删除的数据块的预定最小数量)X (重定向表条目的大小)为界。在一些情况下,数据块的重新定位可能很少发生。在一实施例中,在确定了数据块的已改变的块偏移值之后,可将流映射中从该流映射指向数据块的任何指针修改成该经改变的块偏移值,并且可将条目902从重定向表900移除。在一些情况中,通过这种方式重定向表900可能随着时间的推移而没有条目902。 可以各种方式来将条目添加到重定向表中。例如,图10示出了根据一示例实施例的用于储存数据流的流程图1000。基于有关流程图1000的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图1000如下。流程图1000开始于步骤1002。在步骤1002,修改块容器的内容。例如,在一实施例中,可移动图8的块容器304中的一个或多个数据块322。可通过诸如垃圾收集之后的碎片整理过程、压缩过程,或其他过程之类的维护任务(例如,图I中的维护模块106)来移动这些数据块322。在步骤1004中,将一个或多个条目添加到重定向表中,该一个或多个条目指示块容器中的一个或多个数据块的由于步骤1002而改变的块偏移值。例如,可向与一个或多个已移动的数据块322相对应的重定向表900中添加一个或多个条目902。例如,对于每一个已移动的数据块322,可以生成条目902,该条目902将该已移动的数据块322的本地标识符值指示为本地标识符904并将该已移动的数据块322的新偏移值指示为已改变的块偏移值 906。在步骤1006,块容器头部中的生成指示由于步骤1002而增加。例如,在一实施例中,块容器生成指示804可具有初始值0,并且每当在块容器304中移动数据块322时,都可增加块容器生成指示804来指示更高的生成值。在其他实施例中,可以其他方式来修改块容器生成指示804。因此,当使用储存在引用流映射310中的数据块标识符来查找图8的块容器304中的数据块322时,可检查块容器304的块容器生成指示804以查看块容器304的当前生成是否与数据块标识符的块容器生成值相同。如果它们相同,则可将数据块322定位在由数据块标识符中的块偏移值所指示的偏移处。如果不同,则读取重定向表900来确定数据块322在块容器304中的已改变的偏移值。例如,图11示出根据示例实施例的再水合模块1130的框图,该再水合模块1130与流容器302和块容器304进行通信以根据数据流请求1110来再水合数据流。如图11所示,再水合模块1130包括数据流组装器1102、生成检查器1106和数据块检索器1108。描述图11如下。
在图11中,数据流组装器1102接收数据流请求1110,该数据流请求1110指示与要被再水合的数据流相对应的流映射,诸如流容器302中储存的流映射1104。数据流组装器1102处理流映射1104,从而为被流映射1104引用的每个数据块生成数据块请求1112。在一实施例中,由数据流组装器1102所生成的数据块请求1112可包括数据块标识符以标识所请求的数据块322。如下访问所定位的块容器以检索所请求的数据块。如图11所示,生成检查器1106接收对所请求的数据块的数据块请求1112。生成检查器1106访问块容器304(以上被标识为具有与所请求的数据块322的块容器标识符1302相匹配的块容器标识符802)。生成检查器1106被配置为将块容器304的块容器生成指示804与所请求的数据块322的块容器生成值进行比较,并输出生成匹配指示1114。如果它们的值不匹配(例如,块容器生成指示804的值大于所请求的数据块322的块容器生成值1306的值),则生成匹配指示1114指示未找到匹配,并且操作行进至步骤1806。如果它们的值确实匹配,则生成匹配指示1114指示找到匹配,并且可遵循用于检索所请求的数据块的标准I/O路径(或其他路径)。
如图11所示,数据块检索器1108接收生成匹配指示1114和数据块请求1112。如果生成匹配指示1114指示没有找到匹配,则数据块检索器1108访问重定向表900以得到具有与所请求的数据块322的本地标识符相匹配的本地标识符904的条目902中的已改变的块偏移值906 (图9)。如图11所示,数据块检索器1108接收与第一块偏移值不相同的第二块偏移值1116。如图11所示,数据块检索器1108访问块容器304以得到位于第二块偏移值1116处的数据块322z。数据块322z是在块容器304中已被移至第二块偏移值1116的所请求的数据块322。如图11所示,数据块检索器1108输出数据块1118,在当前示例中是数据块322z。数据块1118被数据流组装器1102接收。以此方式,数据流组装器1102从数据块检索器1108接收被流映射1104引用的所有数据块322,这些数据块是根据对应的块偏移值直接从块容器304检索的,或者是按照由重定向表900所重定向的从块容器304检索的。如图11所示,数据流组装器1102生成数据流1120,该数据流1120是数据流请求1110中指示的所请求的数据流的再水合形式。如本文其他地方所述,数据流组装器1102将所接收的所有数据块322组装在一起来形成数据流1120。注意,驻留在数据流的重解析点处的流映射引用标识符(例如,图6中的流链接608a或608b)可与数据块标识符具有相同的结构。如上所述,流映射310可具有数据块322的形式,其包含流映射元数据而不包含终端用户文件数据。因此,寻址流映射310的过程可与寻址数据块322相同——两种技术都可使用数据块标识符结构。经优化数据流通过将流映射310的数据块标识符放置在文件重解析点(附属于实际的数据流/文件对象)处来引用流映射310。流映射标识符包含[容器标识符、本地标识符、生成值、偏移值]信息,该信息可用于(直接地或者通过重定向表)将流映射310定位到流容器302内部的数据块。因此,在一实施例中,流容器302的格式和布局可以与块容器304的格式和布局实质上相同。D.示例数据优化备份实施例对部署数据优化技术的数据系统进行备份和还原是困难的,因为数据在块存储中的多个数据流之间被共享。因此,数据与文件命名空间是分开的。然而,数据的备份和还原能力是有用的。实体通常不会在没有有效的数据备份集成的情况下服从部署数据优化方案。在各实施例中,提供用于数据优化环境的各种备份技术,包括经优化备份、未经优化备份、项目级经优化备份、以及混合备份技术。此外,在各实施例中,试探法可用于在不同的备份技术之间选择。例如,试探法可用于在经优化和未经优化备份之间选择。各实施例向数据优化系统提供经优化备份技术,使得以其经优化(例如,去重复)的形式来备份数据。各实施例可使数据备份能够使用更少的备份介质空间,并可用于减小备份时间窗,考虑到逐年的数据增长这是重要的。此外,各实施例可以允许从备份的更快的数据还原(例如,更小的RT0(恢复时间目标))。在各实施例中,可按照各种方式来执行数据优化系统中的备份。例如,图12示出了根据示例实施例的用于在数据优化系统中执行对数据的备份的流程图1200。在一实施例中,流程图1200可由图I的块存储接口 116来执行。出于说明的目的,参考图13来描述流程图1200。图13示出了根据示例实施例的数据备份系统1300的框图。流程图1200可由 数据备份系统1300来执行。如图13所示,数据备份系统1300包括数据备份模块1302、备份存储1304和块存储1334,该块存储1334包括流容器302和一个或多个块容器304 (例如,块容器304a和304b)。基于有关流程图1200的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图1200如下。在流程图1200的步骤1202中,标识在块存储中储存的多个经优化数据流以供备份。例如,参考图13,数据备份模块1302可接收请求1318以将在块存储1334中储存的一个或多个经优化数据流储存到备份存储1304中。请求1318可以通过与经优化数据流相对应的经优化流结构(例如,文件)的对应文件名来标识一个或多个经优化数据流。每个经优化流结构引用流容器302中多个流映射块1316的一个流映射块,该流容器302包含描述了经优化数据流到在一个或多个块容器304中储存的数据块322的映射的元数据,如上所述。在步骤1204中,将块存储的至少一部分储存在备份存储中以备份多个经优化数据流。响应于请求1318,数据备份模块1302可将块存储1334的至少一部分储存在备份存储1304中,使得请求1318中所标识的经优化数据流被储存在备份存储1304中。数据备份模块1302可以通过以各种方式将块存储1334的一部分储存在备份存储1304中来储存经优化数据流。例如,在一个实施例中,对于每个经优化数据流,数据备份模块1302可以确定流映射块1316的对应的流映射块、和该流映射块所引用的数据块322,并且可以将所确定的流映射块和数据块储存在备份存储1304中。在其他实施例中,数据备份模块1302可将块存储1334的较大部分储存在备份存储1304中以便备份经优化数据流,该备份存储1304包括经优化数据流的已确定的块。因此,根据步骤1204,数据备份模块1302可以按照各种方式被配置为储存经优化数据流。例如,如图13所示,数据备份模块1302可包括经优化文件备份模块1306、再水合备份模块1308、项目级备份模块1310、和数据块标识符备份模块1312。在各实施例中,数据备份模块1302可包括任意一个或多个模块1306、1308、1310和1312。模块1306、1308、1310和1312允许以各种方式将经优化数据流储存在备份存储1304中。描述模块1306、1308、1310和1312如下。
在一个实施例中,可以执行经优化备份以便以经优化形式来备份经优化数据流。例如,经优化文件备份模块1306可被配置为通过将经优化数据流以经优化形式储存在备份存储1304中来执行经优化备份。根据经优化备份,可以储存块容器1334的一个或多个完整的块容器以便备份经优化数据流。例如,在一个实施例中,经优化文件备份模块1306可以执行图14所示出的流程图1400。描述流程图1400和经优化文件备份模块1306如下。在步骤1402,将块存储整体上储存在备份存储中。在一实施例中,经优化文件备份模块1306可将块存储1334整体上储存在备份存储1304中,使得请求1318中所指示的经优化数据流被备份。或者,经优化文件备份模块1306可以储存块存储1334的一个或多个完整的块容器(例如,流容器302和一个或多个块容器304),使得经优化数据流被备份,该一个或多个完整的块容器完整地包括所请求的经优化数据流。要被备份的块容器可由块的块标识符的块容器标识符来标识,该块由经优化数据流的经优化流结构所引用。块容器/整个块存储可由经优化文件备份模块3106根据存储操作1320储存到备份存储1304中。在步骤1404中,将多个流元数据存根储存到用于多个经优化数据流的备份存储中,该多个经优化数据流链接到块存储中的对应的数据。流元数据存根可由经优化文件备 份模块1306从诸如除备份存储1304以外的存储的其他存储(例如,主存储)中检索,并且是链接到储存在块存储1334中的用于经优化数据流的数据的文件。例如,每个流元数据存根可包含对流映射块1316的其对应的流映射块的引用,该引用可用于通过组合流映射块所引用的任何数据块322在再水合过程期间重新构建/重新组装对应的数据流。在一实施例中,与请求1318中所标识的经优化数据流相对应的流元数据存根由经优化文件备份模块1306使用存储操作1320储存到备份存储1304中。流元数据存根可由经优化文件备份模块1306以其“磁盘上”格式储存到备份存储1304中因此,在备份存储1304上提供经优化数据流的文件状态的“卷映像”对块存储1334进行镜像。备份存储1304中已储存的块容器与已储存的流元数据存根的组合以经优化(非重新组装的)的形式提供经优化数据流的完整存储。不需要储存附加的元数据。可在任何情况下执行经优化备份(例如,根据流程图1400和经优化文件备份模块1306)以便备份经优化数据流。如果大部分已备份的卷(备份存储中可以访问的存储区域)位于范围中,则可能期望执行经优化备份。由于块容器中可能包括未被请求1318中所标识的经优化数据流引用、但被其他经优化数据流应用的数据块,而存储全部块容器时,一些“浪费”是可能的。因此,可以备份比所需要的更多的数据总体。如果已备份的卷的相对少部分位于范围中(例如,已备份的块容器中包括的少量数据块与请求1318中所标识的经优化数据流相关联),则可能期望不储存整个块容器的另一种部分技术(例如,下面描述的未经优化备份技术)。根据经优化备份对已被备份的经优化数据流的还原包括还原块存储容器文件和流元数据存根,使得该还原是经优化还原。这种经优化存储在大小中是相对较小的,且因此相对较快,并且消耗更少的I/o资源。下面在接下来的小节中进一步描述用于从经优化备份中选择性地还原经优化数据流的技术。因此,用于经优化备份的各实施例可以提供各种益处。例如,经优化备份可以带来更小的存储大小的备份,这节省了(例如,备份存储1304中的)备份介质空间。这对于基于磁盘的备份方案可能是有用的。在某些情形中,备份存储中的存储空间节省可能比主存储中的节省更加重要和更经济。经优化备份可以带来用于执行备份的更快的时间。备份执行时间可被减少,考虑到逐年被储存的数据量的增长,这是重要的。由于数据量的增长,随着备份执行时间随数据量而增长,存储用户可能为(例如,每天)执行频繁的备份而奋斗。经优化备份技术可有助于减少备份执行时间。此外,经优化备份可以缩短RTO,导致更快的还原。RTO是对备份/还原方案的重要度量。在另一个实施例中,可以执行非优化的备份(也被称为“未经优化数据流备份”)以便以非优化的或未经优化形式来储存经优化数据流。根据非优化的备份,可在被储存之前对为备份存储所指定的经优化数据流进行再水合。例如,在一实施例中,再水合备份模块1308可被配置为通过对经优化数据流进行再水合并且将经再水合的数据流储存到备份存储1304中来执行非优化的备份。在一实施例中,再水合备份模块1308可以执行图15示出的流程图1500。描述流程图1500和再水合备份模块1308如下。在流程图1500的步骤1502中,每个经优化数据流被再水合到对应的未经优化数据流中,该未经优化数据流包括由对应的经优化流元数据所引用的任何数据块。再水合备份模块1308可以根据任何方式对经优化数据流进行再水合,包括上面针对再水合模块 702(图7)所描述的。例如,参考图13,再水合备份模块1308可以以与请求1318中所标识的经优化数据流相对应的流映射的形式、或以其他形式(例如,全局表、数据库等)来访问流容器302中的经优化流元数据。如图13所示,再水合备份模块1308可以生成用于所期望的流映射块的一个或多个流容器的访问1322。流容器的访问1322可通过对应的流映射标识符来标识所期望的流映射块。响应于流容器的访问1322,再水合备份模块1308从流容器302接收与请求1318中所标识的经优化数据流相对应的流映射块1324。再水合备份模块1308可以根据对应的检索到的流映射块的流映射来重新生成或“再水合”每个经优化数据流。在图13的示例中,每个流映射包括指向包括在对应的经优化数据流中的每个数据块的指针(例如,图4的数据块标识符404),对应的经优化数据流可被包括在块容器304a和/或304b中。再水合备份模块1308使用指针来检索每个所引用的数据块322。例如,再水合备份模块1308可以生成一个或多个块容器的访问1326和/或1330,以分别从第一和/或第二块容器304a和304b获得数据块322。响应于块容器的访问1326和/或1330,再水合备份模块1308从块容器302a和302b接收与请求1318中所标识的经优化数据流相对应的数据块1328和/或1332。再水合备份模块1308可以使用在检索到的流映射(例如,图3的流映射310)中包括的数据流偏移402以按照合适的次序来排列检索到的数据块,从而以未经优化形式(例如,未经优化数据流)重新生成每个数据流。在步骤1504中,将每个未经优化数据流储存到备份存储中。例如,如图13所示,再水合备份模块1308可以根据存储操作1320将未经优化数据流储存到备份存储1304中。因此,当期望从备份存储1304中还原数据流时,可以检索在备份存储1304中储存的未经优化数据流。因此,可在任何情况下执行未经优化备份(例如,根据流程图1500和再水合备份模块1308)以便备份经优化数据流。如果经优化数据流的数据块填充块存储1334的相对较小部分的存储空间,则可能期望执行未经优化备份。因此,可以再水合特定的经优化数据流并将其储存在备份存储1304中,而不是将整个块容器储存到备份存储1304中,这可包括存储与请求1318中所标识的经优化数据流无关的大量的数据块。因此,备份介质以其未经优化原始形式来储存数据流,并且可通过避免存储无关的数据块来节省备份存储空间。用于未经优化备份的各实施例可以提供各种益处。例如,使用更多选择性备份(并允许选择性还原)的未经优化备份是相对容易实现的。对已备份的数据流的还原不依赖于存储系统所使用的数据优化技术,因为数据流是以未经优化形式来备份的。因此,数据流可在任意处被还原并被访问,而不依赖于已安装的和起作用的数据优化方案。由于再水合过程,未经优化备份可能是相对慢的,对数据备份模块1302产生性能影响。由于所执行的对经优化数据的解压缩、以及还潜在地由于数据碎片,对经优化数据的再水合比普通的数据读取还慢。此外,由于数据流是以未经优化形式来备份的,因此已备份的数据的总量可能较大,因为不存在去重复的优势。数据的总量可能是比已备份的卷更大的量(因为卷被优化,而备份数据没有)。在某些情形中,由于备份存储大小的限制,也许不可能备份全部数据。因此,可以选择未经优化备份以用于特定的备份情形中。下面进一步描述对比其他备份技术选择未经优化备份的示例。
在另一实施例中,可以执行项目级备份以便以项目级的经优化形式来储存经优化数据流。根据项目级备份,准备为备份存储所指定的经优化数据流以供以经优化形式的存储。例如,对于特定的经优化数据流,确定经优化数据流的流映射块所引用的数据块。不从块存储中检索已被储存在备份存储中的任何所引用的数据块。从块存储中检索尚未被储存在备份存储中的任何所引用的数据块,并将其储存到备份存储中。例如,在一实施例中,项目级备份模块1310可被配置为通过将流映射块和尚未被储存在备份存储1304中的所引用的数据块储存到备份存储1304中来执行项目级备份。例如,在一实施例中,项目级备份模块1310可以执行图16示出的流程图1600。可对请求1318中所标识的每个经优化数据流执行流程图1600。描述流程图1600和项目级备份模块1310如下。在流程图1600的步骤1602中,接收为备份所标识的第一个经优化数据流。例如,请求1318可以标识经优化数据流。对于经优化数据流,项目级备份模块1310可以检索经优化流元数据(例如,来自流容器302的流映射块1324),并且可从块容器304检索由经优化流元数据所引用的任何数据块322。例如,项目级备份模块1310可以生成对流容器302的流容器访问1322以将所期望的流映射块作为流映射块1324来检索,并且可以生成一个或多个块容器访问1326和/或1330,以从第一和/或第二块容器304a和304b获得作为数据块1328和/或1332的所引用的数据块322。在步骤1604中,确定由第一个经优化数据流的经优化流元数据所引用的、且尚未被储存到备份存储中的一个或多个数据块。在一实施例中,项目级备份模块1310可以将由流映射块的元数据所引用的数据块与已在备份存储1304中储存的任何数据块进行比较,以便确定所引用的数据块中的任一个是否已被储存在备份存储1304中。项目级备份模块1310可以按照任何方式来执行比较,包括通过对所引用的数据块的散列值与在备份存储1304中(例如,使用散列索引等)储存的数据块的散列值进行比较,可以对所引用的数据块的数据块标识符与在备份存储1304中储存的数据块的数据块标识符进行比较,或者根据其他技术进行比较。项目级备份模块1310可以诸如通过维护列表或(例如,存储器中的)其他数据结构来跟踪被确定尚未被储存在备份存储1304中的所引用的数据块。在步骤1606中,将第一个经优化数据流的经优化流元数据储存到备份存储中。例如,项目级备份模块1310可以(例如,使用存储操作1320)将从用于经优化数据流的流容器302中检索到的流映射块储存到备份存储1304中。在步骤1608中,所确定的一个或多个数据块被储存在备份存储中。项目级备份模块1310可以(例如,使用存储操作1320)将从用于经优化数据流的块容器302a和/或302b中检索到的、且在步骤1604中被确定为尚未被储存在备份存储1304中的数据块储存到备份存储1304中。因此,当期望从备份存储1304中还原数据流时,可以从备份存储1304中检索在用于经优化数据流的备份存储1304中储存的流映射块和数据块,并对其进行再水合以形成数据流。在一实施例中,可在备份存储1304中对经优化流结构(例如,参考图14的流程图1400的步骤1404所描述的流元数据存根)进行备份,并且可从备份存储1304中检索经优化流结构,作为用于再水合数据流的重解析点。因此,可在任何情况下执行项目级备份(例如,根据流程图1600和项目级备份模块1310)以便备份经优化数据流。根据项目级备份,已去重复的数据块与在维护经优化形式的备份期间被备份的每个数据流相关联(例如,无再水合,每个数据块被备份一次)。不 备份全部块存储容器。在一实施例中,备份(以及可选地还原)API (应用编程接口)可由项目级备份模块1310来实现。例如,备份会话可被定义用于以经优化形式来备份在块存储1334中储存的第一文件和第二文件。在该示例中,假设第一文件包括块容器302a的数据块322a和322b以及块容器304b的数据块322d,并且第二文件包括块容器302a的数据块322a_322c和块容器304b的数据块322d和322e。可以调用备份API来备份第一文件。作为响应,API将返回第一文件的流映射块和数据块322a、322b和322d。可以为第一文件将所返回的流映射块和数据块322a、322b和322d储存在备份存储1304中。可以随后调用备份API来备份第二文件。作为响应,API将返回第二文件的流映射块和数据块322c和322e。这是因为API将确定第二文件的数据块322a、322b和322d已经被储存在备份存储1304中(由于第一文件被备份在备份存储1304中)。因此,为第二文件将所返回的流映射块和数据块322c和322e储存在备份存储1304中。根据项目级备份来还原已备份的数据流的还原模块可以使用类似的API,其中经优化流元数据帮助还原模块API来指向所引用的数据块。项目级备份允许完全和选择性备份两者(大小明智的)的经优化备份(因为备份粒度是数据流/文件粒度)。然而,项目级备份可以是相对慢且复杂的,并且可能无法与块级备份技术很好地合作。在另一实施例中,可以执行数据块标识符备份以便以另一种类型的经优化形式来储存经优化数据流。根据数据块标识符备份,确定要被备份的经优化数据流的数据块标识符。数据块标识符被储存在备份存储中,并且储存所引用的数据块的块容器被储存在备份存储中。例如,在一实施例中,数据块标识符备份模块1312可被配置为通过将数据流的经优化流元数据所引用的数据块标识符、和储存由相关联的数据块标识符所标识的块的块容器储存到备份存储1304中来执行数据块标识符备份。例如,在一实施例中,数据块标识符备份模块1312可以执行图17示出的流程图1700。描述流程图1700和数据块标识符备份模块1312如下。在流程图1700的步骤1702中,分析每个经优化数据流的经优化流元数据以确定由经优化流元数据所引用的至少一个数据块的对应的至少一个数据块标识符。例如,在一实施例中,对于请求1318中所标识的每个经优化数据流,数据块标识符备份模块1312可从流容器302中检索流映射块形式的对应的经优化流元数据。此外,数据块标识符备份模块1312可以分析检索到的流映射块的元数据以确定来自块容器304的流映射块的元数据所引用的任一数据块322的数据块标识符。元数据中包括数据块标识符(例如,图4所示的元数据400中包括的数据块标识符404)。数据块标识符备份模块1312可以引用重定向表(例如,图9的重定向表900)以映射一个或多个数据块标识符的块偏移值以便若一个或多个所引用的数据块被移至块容器304中则更新块偏移值。在步骤1704,每个经优化数据流的经优化流结构与对应的至少一个数据块标识符被储存在备份存储中。例如,数据块标识符备份模块1312可(例如,使用存储操作1320)将每个经优化数据流的经优化流结构与在步骤1702中确定的对应的数据块标识符储存在备份存储1304中。可以通过任何方式将块标识符与经优化流结构相关联地储存,包括被储存在备份存储1304中对应的经优化流结构外部或内部。在步骤1706中,将块存储的包含经优化数据流的一个或多个块容器储存到备份存储中。在一实施例中,数据块标识符备份模块1312可将流容器302储存到备份存储1304 中,使得经优化数据流的流映射块被备份(例如,使用存储操作1320)。此外,数据块标识符备份模块1312可以储存一个或多个块容器304,该一个或多个块容器304储存经优化数据流的流映射块所引用的任一数据块322,使得所引用的数据块被备份(例如,使用存储操作1320)。在一实施例中,数据块标识符备份模块1312可将块存储1334整体上储存在备份存储1304中,使得经优化数据流的全部块被备份。因此,数据块标识符备份与上面描述的经优化备份类似,但是(数据块标识符)还储存全部数据块在其相应的容器文件中的位置以便在备份时提供“还原计划”。数据块标识符备份的益处是备份应用(例如,数据备份模块1302)可将“还原计划”储存在其目录中,并且提前知道每种还原场景(包括选择性还原)需要的哪些其他文件(因而哪些备份介质)。与上面描述的未经优化备份相类似,数据块标识符备份可能相对慢且复杂,并且可以使用数据块标识符备份模块1312实现的备份API。此外,数据块标识符备份打破了块存储的模块性,并展示内部的块存储实现。因此,经优化备份、未经优化备份、项目级备份、和数据块标识符备份各自是可由图13的数据备份模块1302实现的备份实施例。此外,数据备份模块1302可以实现备份实施例,该备份实施例是经优化备份、未经优化备份、项目级备份、和数据块标识符备份中一个或多个的组合。例如,在一个实施例中,数据备份模块1302可以实现经优化备份与未经优化备份的组合。在一个实施例中,当执行完全的卷备份时,可以选择执行经优化备份。如果要备份单个经优化数据流,可以执行未经优化备份。对于一个与全部经优化数据流之间的数量的经优化数据流,可以选择经优化备份或未经优化备份。例如,可以基于试探法在经优化备份或未经优化备份之间切换。例如,在一实施例中,数据备份模块1302可被配置为根据图18所示的过程来执行对经优化数据流的备份。图18示出了根据示例实施例的基于试探法来提供用于选择并执行备份技术的过程的流程图1800。描述流程图1800如下。在流程图18的步骤1802中,基于试探法来选择备份技术。例如,如图13所示,数据备份模块1302可选地包括试探模块1314。试探模块1314被配置为确定用于选择备份技术以用于备份经优化数据流的试探法。在步骤1804中,执行备份技术以在备份存储中备份多个经优化数据流。基于由试探模块1314所确定的试探法,可以选择经优化文件备份模块1306或再水合备份模块1308中的一个来备份经优化数据流(例如,分别参考图14和15描述的)。例如,在一实施例中,试探模块1314可以向被选择以备份经优化数据流的经优化文件备份模块1306或再水合备份模块1308中的一个提供使能信号。该使能信号使得经优化文件备份模块1306或再水合备份模块1308中的一个能够根据其对应的备份技术来备份经优化数据流。例如,在一个实施例中,试探模块1314可以基于“排除模式”和“包括模式”来实现相对简单的试探法。根据“排除模式”,用户可以选择块存储卷并且可以从备份中排除某些文件夹/文件。因此,试探模块1314可以根据排除模式来确定经优化数据流被选择用于备份。在这种情形中,由于所确定的排除模式,试探模块1314选择经优化数据流备份技术。这是因为“排除模式”通常具有范围中的大多数块存储卷。因此,较好的折衷是备份所选择(以其经优化形式)的数据流加上全部块存储容器文件,即使容器文件可能包括由除用户 所选择的数据流以外的经优化数据流所弓I用的某些块。根据“包括模式”,用户可以选择相对少的文件夹/文件以供备份。因此,试探模块1314可以根据包括模式来确定经优化数据流被选择以供备份。在这种情形中,由于所确定的包括模式,试探模块1314选择未经优化数据流备份技术。这是因为“包括模式”通常具有范围中的相对小部分的块存储卷。因此,较好的折衷是仅备份以其未经优化形式的所选择的文件。在这种情形中,不需要备份块存储容器文件。在另一实施例中,试探模块1314可以实现相对高级的试探法。备份技术中的折衷可以基于备份范围内文件的经优化大小与逻辑大小之间的增量。存储空间浪费可被确定为由块所消耗的块存储容器文件的存储空间,该块仅被不包括在备份范围中的经优化数据流引用。因此,试探模块1314可以基于块存储卷中的文件大小并且基于块存储统计数据来确定(例如,计算)被浪费的存储空间的量。在一实施例中,可以进行某些假设,除非块存储被配置为准确地报告给定组的数据流引用了多少块。如果块存储能够报告由指定组的经优化数据流所引用的多个块,试探模块1314可将被浪费的存储空间确定为由全部块所填充的空间减去由被指定用于备份的经优化数据流引用的块所填充的空间。基于被浪费的存储空间的量(例如,相对于整个存储空间),试探模块1314可以选择经优化备份或未经优化备份。例如,参考图13,在一实施例中,试探模块1314可以确定块存储1334中由被请求1318中所标识的多个经优化数据流中任一个的流映射块元数据未引用的数据块322所消耗的空间的量。如果块存储1334中由未被引用的数据块消耗的所确定的空间量少于预定的阈值(例如,块存储1334的整个存储空间的50%或其他百分比),则试探模块1314可以将备份技术选择为经优化数据流备份技术。如果块存储1334中由未被引用的数据块消耗的所确定的空间量大于预定的阈值,则试探模块1314可以将备份技术选择为未经优化数据流备份技术。在一个示例中,试探模块1314可以执行以下分析来设置备份技术。给定包括一个或多个命名空间根的备份范围,其中命名空间根是递归地包括子文件夹的文件夹,可以定义以下的试探参数范围=备份范围中的全部文件,是指用于备份的所选文件夹下的全部文件,A =范围中的全部文件的逻辑大小,其中文件的逻辑大小是在文件被去重复之前的文件的大小(A是范围中的文件的全部逻辑大小之和),B =范围中全部文件的磁盘上大小,其中文件的磁盘上大小是在文件的去重复之后经优化文件填充在磁盘上的实际大小,以及C =块存储的大小,是全部块存储容器文件的大小之和。考虑到这些定义,如果备份应用使用经优化备份,则备份介质上的整个备份大小是B+C。如果备份应用使用未经优化备份,则备份介质上的整个备份大小是A。因此,试探模块1314可以计算A和B+C的值以在确定备份文件范围之后帮助在选 择经优化或未经优化备份之间决定。如果A > B+C,则经优化备份占用更少的空间并且可被选择。否则,如果A彡B+C,则未经优化备份占用更少的空间并且可被选择。E.示例数据优化还原实施例参考图13,在诸如当经优化数据流以某种方式被破坏时的时间上的某个点,可能期望将被备份到备份存储1304的经优化数据流还原到主存储。例如,经优化数据流的一个或多个块(例如,流映射块和/或数据块)可能已在块存储1334中变为被破坏。在这种情形中,可能期望从备份存储1304以非优化的形式还原经优化数据流的已备份版本。目前使用的备份技术有可能备份整个文件系统命名空间,该文件系统命名空间包括经优化文件和块存储容器文件。此外,很多目前使用的备份技术仍然使用顺序的备份介质以供备份存储2014,诸如磁带介质。因此,期望用于还原数据流的技术能够考虑不同的备份介质类型和备份格式。在本小节中描述了用于从备份存储还原经优化数据流的实施例。各实施例使经优化数据流(例如,文件)以减少等待时间和磁盘I/o操作的方式被还原。根据实施例,使特定数据流的块能够从备份存储来还原,而不是还原已备份的块容器的其他不需要的部分。各实施例允许从完全经优化备份中选择性地还原数据流,而不需要理解数据优化元数据,并且不进行关于备份介质类型或备份格式的假设。在各实施例中,可通过各种方式来执行数据优化系统中的数据流的还原。例如,图19示出了根据示例实施例的用于在数据优化系统中执行对备份数据的还原的流程图1900。在一实施例中,流程图1900可由图I的块存储接口 116来执行。出于说明的目的,参考图20来描述流程图1900。图20示出了根据示例实施例的数据还原系统2000的框图。注意,在一实施例中,图13的数据备份系统1300和数据还原系统2000可在共同系统(例如,在共同的备份/还原应用中,等)中实现或可分开地实现。如图20所示,数据还原系统2000包括数据还原模块2002和备份存储2034。备份存储2034存储流容器302和一个或多个块容器304 (例如,块容器304a和304b)。此外,数据还原模块2002包括文件重构器2004和还原应用2006。在一实施例中,流程图1900可由文件重构器2004来执行。基于有关流程图1900的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图1900和数据还原模块2002如下。参考图20,还原应用2006可以是被配置为通过使用目录(或任何其他机制)在备份存储中定位文件以及通过将所定位的文件写到备份存储中来从备份存储还原文件的常规还原应用。还原应用2006可仅包括还原功能,或者还可以包括备份功能(例如,可以是备份/还原应用)。在数据优化系统的情形中,响应于文件还原请求由还原应用2006写到存储的文件是经优化流结构,该流结构包含对流映射块的引用。例如,还原应用2006可以接收从备份存储2034检索数据流的请求2010。请求2010可以通过文件名来标识数据流。如图20所示,还原应用2006可从备份存储2034检索经优化流结构2038 (例如,流元数据存根),该流结构对应于请求2010的所请求的文件流。然而,由于经优化流结构2038是请求2010中所请求的数据流的重解析点,因此还原应用2006被配置为访问文件重构器2004以便重构与经优化流结构2038相对应的数据流。例如,文件重构器2004可被配置为根据图19的流程图1900来如下重构数据流。在流程图1900的步骤1902中,接收从存储中的块存储检索数据流的请求,该请求包括与数据流相对应的经优化流元数据的标识符。例如,如图20所示,文件重构器2004可以从还原应用2006接收请求2036。请求2036是对文件重构器2004重构与经优化流结构2038相对应的数据流的请求。请求2036包括经优化流结构2038。经优化流结构2038包括经优化流元数据指示符,诸如可用于定位与对应的经优化数据流相对应的流映射指示符 (例如,流映射块)。如本文别处所描述的,经优化流元数据包括对可由文件重构器2004使用的数据块的引用以便重新组装数据流。可以使用硬件、软件、固件或其任何组合来实现文件重构器2004。例如,在一实施例中,文件重构器2004可以是被配置为基于从备份存储还原的经优化数据结构来再水合数据流的应用编程接口(API)。在一实施例中,文件重构器2004的API可被配置为按照以下形式来接收请求2036 ReconstructFi Ie ([in] restore-state/context, [in] f i I e-name, [in]callback-interface)(重构文件([in]还原-状态/上下文,[in]文件名,[in]回调-接口))其中如下定义请求参数“restore-state/context (还原-状态/上下文)”是用于维护多个调用之间的内部状态的标记,“file_name(文件名)”是经优化流结构2038的文件名,以及“callback-interface (回调_接口)”标识文件重构器2004用来使调用回到还原应用2006的回调接口。在其他实施例中,文件重构器2004可按API以外的其他方式来配置。出于说明的目的,下面可以引用文件重构器2004的API实施例,但该实施例不旨在是限制性的。在步骤1904中,基于经优化流元数据标识符来生成对还原应用的第一调用,该第一调用指定存储中的第一块容器的文件名以及指定第一块容器中经优化流元数据的偏移,该存储储存了由经优化流元数据标识符所标识的经优化流元数据。如图20所示,在一实施例中,文件重构器2004可包括回调模块2008。回调模块2008被配置为生成调用,并由文件重构器2004(例如,由文件重构器2004的API使用)用来回调到还原应用2006。回调模块2008可以使调用回到还原应用2006(例如,根据还原应用2006所提供的“回调-接口”)以便从备份存储2034中还原在调用中被标识的块。文件重构器2004接收已还原的块,并使用它们来重新组装所标识的数据流。例如,在一实施例中,回调模块2008可以根据以下回调结构来实现调用Read([in]restore-state/context, [in]file name, [in]offset, [in]size,[out]buffer)(读取([in]还原-状态/上下文,[in]文件名,[in]偏移,[in]大小,[out]缓冲区))其中如下定义调用参数“restore-state/context (还原-状态/上下文)”是用于维护多个调用之间的内部状态的标记,“file name (文件名)”是备份存储2034中储存正被请求的块的容器的文件名,“offset (偏移)”是用于正被请求的块的容器中的偏移, “size (大小)”是正被请求的块的容器中的大小,以及“buffer (缓冲区)”是还原应用2006可将用于文件重构器2004的已还原的块存储的位置以便访问已还原的块(例如,存储器或其他存储中的缓冲区)。在其他实施例中,调用可以具有其他格式或结构。还原应用2006被配置为通过能够从备份存储2034中还原块来从特定的已备份文件中所提供的偏移来选择性还原。例如,还原应用2006可以使用备份目录将{文件名,文件偏移}已接收的调用映射到{备份介质,介质中的偏移}(以映射文件-到-备份介质)。在经优化流元数据以流映射块的形式被储存的实施例中,由回调模块2008(根据步骤1904)生成的第一调用是向还原应用2006的、针对经优化流结构2038中的流映射块标识符所标识的流映射块的请求。在一实施例中,回调模块2008可根据上面描述的回调结构来生成第一调用。回调模块2008可以生成第一调用以包括作为“file name”参数的块容器标识符的值,并且包括作为“offset”参数的块偏移值的值。“size”参数是可选的,因为还原应用2006可以能够独立地确定备份存储2034中所请求的块的大小(例如,由于默认大小的块,通过访问备份目录中的已储存的块大小信息等)。参考图20的示例,回调模块2008可以生成第一调用以包括作为“file name”参数的流容器302的文件名,并且包括作为“offset”参数的流容器302中流映射的偏移的值。如图20所示,文件重构器2004发送由回调模块2008所生成的第一调用2014到还原应用2006。在步骤1906中,响应于第一调用,接收经优化流元数据。在一实施例中,还原应用2006接收第一调用2014,并访问备份存储2034以获得第一调用2014中所标识的流映射块。还原应用2006生成对备份存储2034中流容器302的访问2016,并且在第一调用2014中所指示的流容器302中的偏移处检索流映射块2018。还原应用2006在响应2020中向文件重构器2004发送流映射块2018。在步骤1908中,确定经优化流元数据中所引用的至少一个数据块标识符。在一实施例中,文件重构器2004分析流映射的元数据(例如,图3的流映射310的元数据314),该元数据由在对所引用的数据块的一个或多个数据块标识符的响应2020中接收的流映射块2018来定义。流映射的元数据包括指向包括在正被处理的数据流的块容器304a和304b中的每个数据块322的数据块标识符(例如,图4的数据块标识符404)形式的指针。以此方式,确定包括在流映射块2018中的一个或多个数据块标识符。在步骤1910中,生成与至少一个数据块标识符相对应的至少一个附加调用,以从存储中的至少一个块容器获得至少一个数据块。在一实施例中,回调模块2008生成对还原应用2006的一个或多个附加调用,每个调用是对备份存储2034中与步骤1908中所确定的数据块标识符相对应的数据块322的请求。例如,回调模块2008可以基于所确定的数据块标识符的对应的数据块标识符来生成对还原应用2006的第二调用。第二调用可以具有上面所描述的调用结构,或可以具有其他结构。第二调用可以指定备份存储2034中储存由数据块标识符所标识的数据块322的块容器304a和304b之一的文件名(作为“file name”参数)。第二调用可以指定由文件名所标识的第一和第二块容器304a和304b之一中所标识的数据块322的偏移(作为“offset”参数)。“size”参数是可选的,因为还原应用2006可以能够独立地确定所标识的数据块322的大小。如图20所示,文件重构器2004发送由回调模块2022所生成的第二调用2014到还原应用2006。在步骤1912中,响应于至少一个附加调用,接收至少一个数据块。在一实施例中,还原应用2006接收第二调用2022,并访问备份存储2034以获得第二调用2022中所标识的数据块322。例如,如果所标识的数据块被储存在第一块容器304a中,则还原应用2006可以生成对备份存储2034中的第一块容器302a的访问2024,并且可以在第二调用2022中所指示的第一块容器302a中的偏移处检索数据块2026。还原应用2006在响应2028中向文 件重构器2004发送数据块2026。注意,对于在步骤1908中确定的每个附加的数据块标识符,文件重构器2004可以通过与第二调用2022类似的方式生成对还原应用2006的附加调用,以从备份存储2034检索对应的数据块322。例如,响应于从文件重构器2004接收的第三调用,还原应用2006可以访问备份存储2034以获得第三调用中所标识的数据块322。例如,如果所标识的数据块被储存在第二块容器304b中,则还原应用2006可以生成对备份存储2034中的第二块容器302b的访问2030,并且可以在第三调用中所指示的第二块容器302b中的偏移处检索数据块2032。还原应用2006可在另一响应中向文件重构器2004发送数据块2032。可以通过类似的方式来处理与附加的数据块标识符相对应的附加调用,以便为文件重构器2004从备份存储2034中检索附加的数据块。在步骤1914中,对经优化流元数据与至少一个数据块进行组合以还原数据流。在一实施例中,从备份存储2034中检索到的流映射块2018和一个或多个数据块322 (例如,数据块2026和2032)是可组合的以便还原数据流。通过与上面所描述的用于再水合模块702的类似的方式,文件重构器2004可以使用包括在流映射块2018的流映射中的数据流偏移402 (图4)来以合适的次序排列检索到的数据块322以便重新生成数据流,该数据流被文件重构器2004作为数据流2012来输出。如特定的应用所期望的,数据流2012可被储存在主存储中,可被输出到还原应用2006以便被储存到主存储中,或者可以其他方式被处理或递送。出于说明的目的,参考图19的流程图1900和图20的系统2000来描述对经优化文件的示例还原。经优化文件的流映射块被储存在流容器302中,并且经优化文件包括块容器304a的数据块322a和322b以及块容器304b的数据块322e。在该示例中,流容器302具有文件名SC5,块容器304a具有文件名CC3,并且块容器304b具有文件名CC7。如上所述,还原应用2006可从备份存储2034还原经优化文件的经优化流结构2038 (例如,具有文件名“0FN”)。在步骤1902中,还原应用2006可以(例如,使用ReconstructFile (0FN,回调))生成向文件重构器2004的、开始用于经优化文件的文件重构过程的请求2036。在步骤1904中,回调模块2008可以生成向还原应用2006的、请求经优化文件的经优化流结构2038中所标识的流映射块的第一调用(例如,回调-> Read(内部状态,SC5,流映射块偏移,64K,缓冲区))。在步骤1906中,还原应用2006从流容器304检索流映射块,并在响应中向文件重构器2004提供流映射块。在步骤1908中,文件重构器2004分析流映射块以确定包括在所期望的文件中的数据块322a、322b和322e的三个数据块标识符。在步骤1910中,回调模块2008生成对还原应用2006的分别请求数据块322a、322b和322e的三个调用(例如,第一调用是回调-> Read(内部状态,CC3,数据块322a偏移,64K,缓冲区),第二调用是回调-> Read(内部状态,CC3,数据块322b偏移,64K,缓冲区),以及第三调用是回调-> Read(内部状态,CC7,数据块322e偏移,64K,缓冲区))。在步骤1912中,文件重构器2004响应于三个调用从还原应用2006接收数据块322a、322b和322e。在步骤1914中,文件重构器2004根据流映射块的流映射将经优化文件重新组装成未经优化形式,并存储已组装的文件(例如,将已重新组装的文件写回到磁盘上的经优化流结构2038)。注意在流程图1900的示例中,重新组装数据流(在步骤1914)。在另一实施例中,可在存储(主或备份)中将经优化流结构2038作为经优化文件来维护,并且被确定为包括在数据流中的数据块可被储存在块存储(不在备份存储2034)中,而不是重新组装数据流。 以此方式,经优化数据流保持经优化形式,引用块存储中的数据块。在这种实施例中,(在步骤1906中接收的)流映射块和(在1912中接收的)一个或多个数据块被储存在块存储中。还如上所述,由于诸如碎片整理和压缩的各种功能,可在容器内移动块。因此,可以维护跟踪块的这种移动的重定向表。在一实施例中,文件重构器2004可被配置为访问重定向表以调整调用,以便从容器中的已调整的偏移中检索块。例如,图21示出了根据实施例的访问重定向表900的回调模块的框图。回调模块2008可以访问重定向表900以得到备份存储中的每个容器(例如,图20的示例中的每个流容器302和块容器304a和304b)。以此方式,回调模块2008可以生成对容器中已调整的偏移而不是对过时的偏移的调用。例如,在一实施例中,回调模块2008可以执行图22所示的流程图2200。图22示出了根据示例实施例的提供用于访问重分布表以获得块的已更新偏移的过程的流程图2200。描述流程图2200如下。在流程图2200的步骤2202中,访问重定向表以将包括在数据块的数据块标识符中的第一偏移映射到第二偏移。例如,回调模块2008可以访问从其检索流映射块的流容器的重定向表(例如,图3的流容器302的重定向表308),或者从其检索数据块的块容器的重定向表(例如,图3的块容器304的重定向表320)。回调模块2008可以通过任意方式来访问重定向表,包括通过生成调用以检索重定向表。例如,可以生成调用并将其发送到还原应用2006,该还原应用2006定义了包含重定向表的容器的文件名、以及重定向表在容器中的偏移。还原应用2006可从备份存储2034中检索重定向表,并且可向文件重构器2004提供该重定向表。以此方式,回调模块2008可以访问重定向表以确定已更新的块偏移。在步骤2204中,基于数据块标识符来生成对还原应用的第二调用,该第二调用指定了储存与数据块标识符相对应的数据块的存储中的第二块容器的文件名,并且指定了该第二块容器中的数据块的第二偏移。例如,在调用数据块之前,回调模块2008可为数据块访问重定向表以确定该数据块的已更新的第二偏移(如果新的偏移存在于重定向表中)。回调模块2008可在对还原应用2006的调用中使用已更新的偏移值来检索数据块。调用可以指定备份存储2034中的块容器304的文件名,并且可以指定从重定向表获得的已更新的偏移值。还原应用2006可以接收调用,从所指示的块容器和已更新的偏移中检索数据块,并且在响应中向文件重构器2004提供检索到的数据块。注意,在流程图2200的示例中,访问块容器的重定向表以将数据块偏移从第一偏移映射到第二偏移。或者,可以修改流程图2200,使得访问流容器的重定向表以将流映射块从第一偏移映射到第二偏移。在一实施例中,容器的重定向表可由回调模块2008在生成对块的调用之前提前检索。在一实施例中,在检索块之前确定正从备份存储2034中检索的块的大小。例如,在一实施例中,对应每个块,回调模块2008可对还原应用2006进行第一调用以确定要检索的块的大小,并且回调模块2008可对还原应用2006进行第二调用以从备份存储2034中检索具有所确定大小的块。 例如,在一实施例中,回调模块2008可以生成第一调用,该第一调用指定了存储块的备份存储2034中的容器的文件名、容器中块的偏移、以及块的头部大小(以及可选的向其输出块的缓冲区)。例如,块的头部大小可以是回调模块2008知道的标准头大小。第一调用可被发送到还原应用2006以从备份存储2034中检索块的头部,如第一调用所指示的。还原应用2006可以检索块的头部(例如,流映射块的头部或者数据块的头部),并且可在第一响应中向回调模块2008提供该块的头部。块的头部可以指示块的大小。例如,流映射块的头部可以指示该流映射块的大小,并且数据块的头部可以指示该数据块的大小。回调模块2008随后可以生成第二调用,该第二调用指定了存储块的备份存储2034中的容器的文件名、容器中块的偏移、以及从块的头部确定的块的大小(以及可选的向其输出该块的缓冲区)。还原应用2006可在所指示的偏移处检索块(例如,流映射块或数据块),并且该块具有所指示的大小。还原应用2006可在第二响应中向回调模块2008提供检索到的块。以此方式,回调模块2008可使用还原应用2006来确定块的大小,并且两个调用可用于检索块第一调用可用于确定块的大小,并且第二调用可用于检索具有所确定的大小的块。在一个实施例中,回调模块2008可以生成调用来以任意次序检索数据块,包括以数据块标识符被包括在流映射块中的次序。在另一实施例中,文件重构器2004可被配置为对块标识符排序,使得回调模块2008以更高效的次序来检索数据块。例如,图23示出了根据示例实施例的文件重构器2004的框图。如图23所示,文件重构器2004包括标识符排序器2302。标识符排序器2302被配置为对次序进行排序,并以该次序还原数据块。例如,在一实施例中,标识符排序器2302可以执行图24所示的流程图2400。图24示出了根据示例实施例的提供用于对数据块还原次序进行排序的过程的流程图2400。描述流程图2400如下。在流程图2400的步骤2402中,基于作为第一排序键的已确定的块容器和作为第二键的块偏移来对多个数据块标识符排序。在一实施例中,标识符排序器2302可以根据一个或多个排序键来对包括在流映射块中的数据块标识符进行排序,以使对应的数据块能够被更高效地检索。例如,可以基于作为第一排序键的容器文件并且基于容器文件内作为第二排序键的块来对数据块标识符进行排序。在其他实施例中,可以基于附加的和/或替换的准则或键来对数据块标识符排序。
在步骤2404中,按照由步骤2402定义的次序生成与多个数据块标识符相对应的对还原应用的多个附加调用。例如,可以按照步骤2402的排序所定义的次序来生成流程图1900(图19)的步骤1910的附加调用。以此方式,可从备份存储2034中更高效地检索数据块。例如,可对调用排序,使得按照与数据块被储存在顺序介质(诸如磁带)中的序列相匹配的顺序次序来检索数据块,并且 使得在还原其他数据块之前顺序地还原储存在共同备份介质(例如,同一磁带、同一磁盘等)中的数据块。这种排序可以减少备份介质内备份介质切换和搜寻的数量,这是从磁带中还原尤其期望的。如果还原应用可影响还原次序和/或接收关于要从每个容器文件中还原哪些文件范围的提前通知,则可以改进还原实施例的性能。例如,在各实施例中,以下回调函数中的一个或多个可由文件重构器用来改进还原“ContainersRestoreOrder (容器还原次序)”是将带有全部数据块容器文件名的数组作为输入来接收的还原次序回调。文件名是文件重构所需要的那些容器(存储文件重构所需要的至少数据块的容器)的文件名。这个回调函数的输出是带有同一容器文件名列表的数组,该列表已被排序(例如,重新排序)。在磁带备份的情形中,根据存储容器文件的备份磁带和磁带上的偏移,还原应用可以使用该还原次序回调,基于磁带次序对容器文件名排序。如果根据该排序次序来执行还原过程,则可以减少或最小化(例如,用户的)磁带介质替换和磁带搜寻功能。最小化磁带介质改变和磁带搜寻的数量提高了磁带介质的寿命,并加速还原过程。在包括这些容器文件的磁带物理上位于场外并需要从场外位置来请求和传输的情形中,该能力使还原应用能够提供需要从场外位置检索的磁带列表以完成对数据的还原。该能力可以显著地加速数据发现,因为场外的磁带检索可能需要数小时或者甚至数天,并且可降低与介质检索相关联的成本。例如,还原应用可以首先基于容器文件所位于的备份磁带来对该容器文件分组,并且在每个磁带内,可以基于它们在磁带上的位置(开始位移)对容器文件进行排序。文件重构器随后可基于备份应用所指定的容器次序来还原数据块。备份应用可以调用被储存在经排序的列表中的第一个数据块容器文件上的数据块的读回调函数,可以接下来调用被储存在经排序的列表中的第二个数据块容器文件上的数据块的读回调函数,以此类推。在未从对还原进行排序中受益的文件备份或其他备份技术的情形中,还原应用可以选择避免对数据块容器列表排序,并且使容器还原次序是任意的。iiContainerRestorePlarn (容器还原计划)”是将单个数据块容器文件名和偏移数组和数据块的大小作为输入来接收的容器还原计划回调。该数组包括在已命名的容器中储存的以及重构文件所需要的全部数据块。在对储存在数据块容器上的数据块调用读回调之前,文件重构器可对每个数据块容器调用一次该回调。容器还原计划回调生成由还原应用所使用的还原计划。还原应用可以使用回调所输出的还原计划,该还原计划指示需要从备份介质读出的数据块容器文件的文件范围。还原应用可以使用该还原计划用于其自身对利用诸如批处理、高速缓存和预读的技术来从备份介质取回数据块的优化。处理该回调是可选的。如果还原应用无法或不需要优化从备份介质的读,则还原应用可以忽略该计划并处理读回调而不优化。
“CreatChunksRestorePlan(创建块还原计划)”是将结构数组作为输入来接收的数据块还原计划回调。数组中的每个结构对应于被需要来重构文件的单个数据块。每个结构可包括以下部分容器文件名(指示数据块被储存在哪里)、容器文件中的块偏移、和块的大小。回调的输出是以将要执行还原的次序来排序的同一结构的数组。数据块还原计划回调是还原次序回调和容器还原计划回调的替换。数据块还原计划回调服务至少两个目的首先,回调向还原应用指示将要还原哪些数据块。基于对回调的输入,还原应用可以确定哪个备份介质具有每个块,以及每个块位于对应的介质上的何处。可以使用用于从备份介质读数据的相同的优化技术。第二,基于回调的输出,还原应用可以指令文件重构器以何种次序来还原块。例如,在磁带备份的情形中,特定的数据块容器文件被储存在多个磁带上是可能的。重构文件可能需要位于同一容器文件上、但在两个不同磁带上备份的两个数据块,因为容器文件在各磁带之间被分割。如果还原应用有机会以块数据粒度来规定还原次序,则即使对于容器文件在各磁带之间被分割的情形,还原应用也可按照磁带次序对数据块进行分组和排序。
文件重构器可对每个文件的还原过程调用一次数据块还原计划回调。文件重构器可在它知道需要哪些数据块以及该数据块位于数据块容器文件中何处的点调用回调。文件重构器可使用回调的输出来提供数据块还原的次序。文件重构器可基于输出结构列表所规定的数据块的次序来调用读回调函数。对数据块还原计划回调的处理是可选的。如果还原应用无法或不需要优化从备份介质的读并规定还原次序,则可以忽略或不执行回调。文件重构器随后可使用之前描述的其自身的逻辑或某些任意次序来还原数据块。III.示例计算设备实施例数据去重复模块104、维护模块106、数据流API 110、块维护API 112、数据访问API 114、块存储接口 116、数据流解析器402、数据块存储管理器404、元数据生成器406、流映射生成器408、再水合模块702、数据流组装器1102、生成检查器1106、数据块检索器1108、数据备份模块1302、经优化文件备份模块1306、再水合备份模块1308、项目级备份模块1310、数据块标识符备份模块1312、试探模块1314、数据还原模块2002、文件重构器2004、还原应用2006、回调模块2008、以及标识符排序器2302可以用硬件、软件、固件或其任何组合来实现。例如,数据去重复模块104、维护模块106、数据流API 110、块维护API112、数据访问API 114、块存储接口 116、数据流解析器402、数据块存储管理器404、元数据生成器406、流映射生成器408、再水合模块702、数据流组装器1102、生成检查器1106、数据块检索器1108、数据备份模块1302、经优化文件备份模块1306、再水合备份模块1308、项目级备份模块1310、数据块标识符备份模块1312、试探模块1314、数据还原模块2002、文件重构器2004、还原应用2006、回调模块2008、和/或标识符排序器2302可被实现为被配置为在一个或多个处理器上执行的计算机程序代码。或者,数据去重复模块104、维护模块106、数据流API 110、块维护API 112、数据访问API 114、块存储接口 116、数据流解析器402、数据块存储管理器404、元数据生成器406、流映射生成器408、再水合模块702、数据流组装器1102、生成检查器1106、数据块检索器1108、数据备份模块1302、经优化文件备份模块1306、再水合备份模块1308、项目级备份模块1310、数据块标识符备份模块1312、试探模块1314、数据还原模块2002、文件重构器2004、还原应用2006、回调模块2008、和/或标识符排序器2302可被实现为硬件逻辑/电子电路。图25描绘了其中可以实现本发明的各实施例的计算机2500的示例性实现。例如,存储系统102和/或其任何部分可被实现在类似于计算机2500的一个或多个计算机系统中,这些计算机系统包括计算机2500的一个或多个特征和/或各另外的特征。计算机2500可以是例如常规个人计算机、移动计算机或工作站形式的通用计算设备,或者,计算机2500可以是专用计算设备。此处所提供的对计算机2500的描述只是为了说明,并不是限制性的。如相关领域的技术人员所知道的,本发明的各实施例可以在其他类型的计算机系统中实现。如图25所示,计算机2500包括处理单元2502、系统存储器2504,以及将包括系统存储器2504在内的各种系统组件耦合到处理单元2502的总线2506。总线2506表示若干类型的总线结构中的任何一种总线结构的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口,以及使用各种总线体系结构中的任何一种的处理器或局部总线。系统存储器2504包括只读存储器(ROM) 2508和随机存取存储器(RAM) 2510。基本输入/输 出系统2512 (BIOS)储存在ROM 2508中。计算机2500还具有一个或多个以下驱动器用于读写硬盘的硬盘驱动器2514、用于读或写可移动磁盘2518的磁盘驱动器2516、以及用于读或写诸如⑶R0M、DVD ROM或其他光介质之类的可移动光盘2522的光盘驱动器2520。硬盘驱动器2514、磁盘驱动器2516,以及光驱动器2520分别通过硬盘驱动器接口 2524、磁盘驱动器接口 2526,以及光学驱动器接口 2528连接到总线2506。驱动器以及它们相关联的计算机可读介质为计算机提供了对计算机可读指令、数据结构、程序模块,及其他数据的非易失存储器。虽然描述了硬盘、可移动磁盘和可移动光盘,但是,也可以使用诸如闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等之类的其他类型的计算机可读存储介质来储存数据。数个程序模块可被储存在硬盘、磁盘、光盘、ROM,或RAM上。这些程序包括操作系统2530、一个或多个应用程序2532、其他程序模块2534,以及程序数据2536。应用程序2532或程序模块2534可包括例如用于实现以下各项的计算机程序逻辑数据去重复模块104、维护模块106、数据流API 110、块维护API 112、数据访问API 114、块存储接口 116、数据流解析器402、数据块存储管理器404、元数据生成器406、流映射生成器408、再水合模块702、数据流组装器1102、生成检查器1106、数据块检索器1108、数据备份模块1302、经优化文件备份模块1306、再水合备份模块1308、项目级备份模块1310、数据块标识符备份模块1312、试探模块1314、数据还原模块2002、文件重构器2004、还原应用2006、回调模块2008、标识符排序器2302、流程图500、流程图1000、流程图1800、流程图1900、流程图2200、流程图2400 (包括流程图 500、1000、1200、1400、1500、1600、1700、1800、1900、2200 和 2400 的任一步骤)、和/或此处描述的其他实施例。用户可以通过诸如键盘2538和定点设备2540之类的输入设备向计算机2500中输入命令和信息。其他输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些及其他输入设备常常通过耦合到总线2506的串行端口接口 2542连接到处理单元2502,但是,也可以通过其他接口,诸如并行端口、游戏端口、通用串行总线(USB)端口,来进行连接。
显示设备2544也通过诸如视频适配器2546之类的接口连接到总线2506。除了监视器之外,计算机2500还可包括其他外围输出设备(未示出),如扬声器和打印机。计算机2500通过适配器或网络接口 2550、调制解调器2552、或用于通过网络建立通信的其他手段连接到网络2548 (例如,因特网)。调制解调器2552 (可以是内置的或外置的)通过串行端口接口 2542连接到总线2506。如此处所用的,术语“计算机程序介质”、“计算机可读介质”以及“计算机可读存储介质”被用于泛指介质,诸如与硬盘驱动器2514相关联的硬盘、可移动磁盘2518、可移动光盘2522,以及其他介质,诸如闪存卡、数字视频盘、随机读取存储器(RAM)、只读存储器(ROM)等。这些计算机可读存储介质与通信介质相区别且不重叠。通信介质通常在诸如载波等已调制数据信号中承载计算机可读指令、数据结构、程序模块或者其它数据。术语“已调制数据信号”是指具有以在信号中编码信息的方式被设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括无线介质,如声学、RF、红外和其它无线介质。实施例 也针对这些通信介质。如上文所指示的,计算机程序和模块(包括应用程序2532及其他程序模块2534)可被储存在硬盘、磁盘、光盘、ROM或RAM上。这样的计算机程序也可以通过网络接口 2550或串行端口接口 2542来接收。这样的计算机程序,当由应用执行或加载时,使得计算机2500能实现此处所讨论的本发明的特征。相应地,这样的计算机程序表示计算机2500的控制器。本发明还涉及包括储存在任何计算机可使用介质上的软件的计算机程序产品。这样的软件,当在一个或多个数据处理设备中执行时,使数据处理设备如此处所描述的那样操作。本发明的各实施例使用现在已知的或将来已知的任何计算机可使用或计算机可读介质。计算机可读介质的示例包括,但不仅限于,诸如RAM、闪速存储(例如,闪存)、固态驱动器(SSD)、硬盘驱动器、软盘、⑶R0M、DVD ROM、zip磁盘、磁带、磁存储设备、光存储设备、MEM、基于纳米技术的存储设备等的存储设备。VI.结论尽管上文描述了本发明的各实施例,但是,应该理解,它们只是作为示例来呈现的,而不作为限制。那些精通有关技术的人员将理解,在不偏离如所附权利要求书所定义的本发明的精神和范围的情况下,可以在形式和细节方面进行各种修改。因此,本发明的范围不应该受到上述示例性实施例的任一个的限制,而只应根据下面的权利要求和它们的等效内容进行定义。
权利要求
1.一种用于数据流备份的方法(1200),包括 标识在块存储中储存的多个经优化数据流以供备份(1202),所述块存储包括每个经优化数据流,作为多个块和对应的经优化流元数据,所述多个块包括至少ー个数据块,所述对应的经优化流元数据引用所述至少ー个数据块,并且所述块存储以已去重复的方式包括全部所包括的数据块;以及 将所述块存储的至少一部分储存在备份存储中以备份所述多个经优化数据流(1204)。
2.如权利要求I所述的方法,其特征在于,所述储存包括 将所述块存储整体上储存在所述备份存储中;以及 将多个流元数据存根储存到用于所述多个经优化数据流的所述备份存储中,其中每个流元数据存根将数据流链接到所述块存储中的对应的数据。
3.如权利要求I所述的方法,其特征在于,所述储存包括 将每个经优化数据流再水合为对应的未经优化数据流,所述未经优化数据流包括由对应的经优化流元数据所引用的任何数据块;以及 将每个未经优化数据流储存到所述备份存储中,将所述块存储排除在被储存在所述备份存储中以外。
4.如权利要求I所述的方法,其特征在于,所述储存包括 接收为备份所标识的第一经优化数据流; 确定由所述第一经优化数据流的经优化流元数据所引用的、且尚未被储存到所述备份存储中的ー个或多个数据块; 将所述第一个经优化数据流的经优化流元数据储存到所述备份存储中;以及 将所确定的ー个或多个数据块储存到所述备份存储中。
5.如权利要求I所述的方法,其特征在于,所述储存包括 分析与每个经优化数据流相对应的所述经优化流元数据,以确定由所述经优化流元数据所引用的至少ー个数据块的对应的至少ー个数据块标识符; 将每个经优化数据流的经优化流结构与所述对应的至少ー个数据块标识符储存在所述备份存储中;以及 将所述块存储的ー个或多个块容器储存到储存所述经优化数据流的数据块的所述备份存储中。
6.如权利要求I所述的方法,其特征在于,所述储存包括 基于试探法来选择备份技木;以及 执行所述备份技术以将所述多个经优化数据流备份到所述备份存储中。
7.如权利要求6所述的方法,其特征在于,所述基于试探法来选择备份技术包括 根据排除模式或包括模式来确定是否选择所述多个经优化数据流以供备份,所述排除模式是明确选择至少ー个卷以供备份并且明确选择要从备份中排除的一个或多个数据流的第一备份模式,所述包括模式是明确选择至少ー个数据流以供备份的第二备份模式;如果确定选择所述排除模式,则选择经优化数据流备份技术作为所述备份技术;以及如果确定选择所述包括模式,则选择未经优化数据流备份技术作为所述备份技木。
8.如权利要求6所述的方法,其特征在于,所述基于试探法来选择备份技术包括 确定由数据块所消耗的所述块存储中的第一空间量,所述数据块未被为备份所标识的所述多个经优化数据流所引用; 将第二空间量确定为以未经优化形式存储全部所述多个经优化数据块的空间量减去以经优化形式存储全部所述多个经优化数据块的空间量; 如果所确定的第一空间量少于所确定的第二空间量,则选择经优化数据流备份技术作为所述备份技木;以及 如果所确定的第一空间量大于所确定的第二空间量,则选择未经优化数据流备份技术作为所述备份技木。
9.如权利要求6所述的方法,其特征在于,所述基于试探法来选择备份技术包括 将第一空间量确定为以未经优化形式来储存为备份所标识的全部所述多个数据流的空间量; 将第二空间量确定为储存所述块存储的空间量与以经优化形式来储存为备份所标识的全部所述多个数据流的空间量之和; 如果所确定的第一空间量大于所确定的第二空间量,则选择经优化数据流备份技术作为所述备份技木;以及 如果所确定的第一空间量少于所确定的第二空间量,则选择未经优化数据流备份技术作为所述备份技木。
10.一种计算机程序产品,包括记录有计算机程序逻辑的计算机可读介质,包括 用于使处理器能够执行权利要求I至9中的任何一项的计算机程序逻辑装置(2534)。
11.一种系统(1300),包括 数据备份模块(1302),接收对储存在块存储(1334)中以供备份的多个经优化数据流的标识(1318),所述块存储(1334)包括每个经优化数据流,作为多个块(322)和对应的经优化流元数据(1316),所述多个块(322)包括至少ー个数据块,所述对应的经优化流元数据(1316)引用所述至少ー个数据块,所述块存储(1334)包括全部所包括的已去重复的配置的数据块;以及 数据备份模块(1330),被配置为将所述块存储(1334)的至少一部分储存在备份存储(1304)中以备份所述多个经优化数据流。
12.如权利要求11所述的系统,其特征在于,所述数据备份模块包括下列各项的至少之一 经优化文件备份模块,被配置为将所述块存储整体上储存到所述备份存储中; 再水合备份模块,被配置为将每个经优化数据流再水合为对应的包括由对应的经优化流元数据所引用的任一数据块的未经优化数据流,并将每个未经优化数据流储存到所述备份存储中; 项目级备份模块,被配置为为每个经优化的数据流确定由所述经优化数据流的经优化流元数据所引用的、且尚未被储存到所述备份存储中的ー个或多个数据块,将所述经优化数据流的经优化流元数据储存到所述备份存储中,并且将所确定的一个或多个数据块储存到所述备份存储中;或者 数据块标识符备份模块,被配置为分析每个经优化数据流的经优化流元数据,以确定由所述经优化流元数据所引用的至少ー个数据块的对应的至少ー个数据块标识符,以便将每个经优化数据流和对应的至少ー个数据块标识符储存到所述备份存储中,并且将所述块存储的ー个或多个块容器储存到所述备份存储中,所述备份存储储存所述经优化数据流的数据块。
13.如权利要求11所述的系统,其特征在于,所述数据备份模块包括试探模块,所述试探模块被配置为基于试探法来选择备份技术,并且使得能够执行所述备份技术以将所述多个经优化数据流备份到所述备份存储中。
14.如权利要求11所述的系统,其特征在于,还包括 文件重构器,接收对要从所述备份存储的块存储中检索的数据流的请求,所述请求包括与所述数据流相对应的经优化流元数据的标识符; 所述文件重构器包括回调模块,所述回调模块基于所述经优化流元数据标识符来生成对还原应用的第一调用,所述第一调用指定所述备份存储中的第一块容器的文件名并指定所述第一块容器中所述经优化流元数据的偏移,所述备份存储储存了由所述经优化流元数 据标识符所标识的经优化流元数据; 所述文件重构器响应于所述第一调用接收所述经优化流元数据,并且确定所述经优化流的元数据中所引用的至少ー个数据块标识符; 所述回调模块对应于所述至少ー个数据块标识符生成对所述还原应用的至少ー个附加调用,以从所述备份存储中的至少ー个块容器获得至少ー个数据块;以及 所述文件重构器响应于所述至少一个附加调用接收所述至少ー个数据块,并且组合所述至少一个数据块来还原所述数据流。
15.如权利要求11所述的系统,其特征在于,所述回调模块生成对所述还原应用的附加调用,以生成块容器的已排序列表;以及 所述回调模块按照所述已排序列表所定义的次序来生成与所述多个数据块相对应的对所述还原应用的多个附加调用。
全文摘要
本发明涉及数据去重复的备份和还原策略。描述了用于备份和还原经优化数据流的技术。块存储包括每个经优化数据流,作为包括至少一个数据块和对应的经优化流元数据的多个块。块存储以已去重复的方式包括数据块。在块存储中储存的经优化数据流被标识以供备份。根据经优化备份技术、未经优化备份技术、项目级备份技术、或数据块标识符备份技术,块存储的至少一部分被储存在备份存储中。在备份存储中储存的经优化数据流可以被还原。文件重构器包括回调模块,该回调模块生成对还原应用的调用以从备份存储中请求经优化流元数据和任何所引用的数据块。文件重构器从所引用的数据块中重构数据流。
文档编号G06F11/14GK102736961SQ201210062939
公开日2012年10月17日 申请日期2012年3月9日 优先权日2011年3月11日
发明者C·H(I)·张, M·J·迪克森, P·A·奥尔泰安, R·卡拉赫 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1