CN102567218B - 用于数据去重复块存储的垃圾收集和热点释放 - Google Patents

用于数据去重复块存储的垃圾收集和热点释放 Download PDF

Info

Publication number
CN102567218B
CN102567218B CN201110428343.4A CN201110428343A CN102567218B CN 102567218 B CN102567218 B CN 102567218B CN 201110428343 A CN201110428343 A CN 201110428343A CN 102567218 B CN102567218 B CN 102567218B
Authority
CN
China
Prior art keywords
block
data block
data
stream
container
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201110428343.4A
Other languages
English (en)
Other versions
CN102567218A (zh
Inventor
张震河
P·A·奥尔泰安
J·R·本顿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN102567218A publication Critical patent/CN102567218A/zh
Application granted granted Critical
Publication of CN102567218B publication Critical patent/CN102567218B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及用于数据去重复块存储的垃圾收集和热点释放。提供用于对存储中的未使用的数据块进行垃圾收集的技术。根据一种实现,基于对被指示为已删除的一个或多个流映射块的分析来标识存储在块容器中的未使用的数据块。所标识的数据块被指示为已删除。然后可回收由被指示为已删除的数据块填充的块容器中的存储空间。还提供用于选择性地备份数据块的技术。根据一种实现,数据块被接收以存储在块容器中。如果所接收的数据块在该块容器中的最多被引用的数据块的前预定百分比中并且具有大于预定引用阈值的引用数量,则将所接收的数据块的备份副本存储在备份容器中。

Description

用于数据去重复块存储的垃圾收集和热点释放
技术领域
本发明涉及用于数据去重复块存储的垃圾收集和热点释放。
背景技术
数据去重复,也称为数据优化,是减少需要存储在盘上或需要通过网络进行传送的数据的物理字节量,而不会损害原始数据的保真性或完整性的动作。数据去重复减少了存储数据所需的存储容量,并且可因此导致存储硬件成本和数据管理成本方面的节省。数据去重复提供了处理快速增长的数字存储的数据的解决方案。
数据去重复可根据用于消除各持久存储的文件之内和之间的冗余的一项或多项技术来执行。例如,根据一项技术,在一个或多个文件中出现多次的唯一数据区域可被标识,并且这些所标识的唯一数据区域的单一副本可被物理地存储。可存储对这些所标识的唯一数据区域(也称为数据“块”)的引用,引用指示了包含这些唯一数据区域的各文件以及在这些文件中的位置。该技术一般称为单一实例化。除了单一实例化以外,还可执行对数据的压缩。其他数据减少技术也可被实现为数据去重复解决方案的一部分。
管理根据数据去重复技术存储的数据存在各种困难。例如,由于由数据去重复所强加的数据存储碎片,在访问根据去重复存储的文件时可能存在等待时间。该等待时间限制了对数据去重复解决方案的采用,尤其是对主存储数据,在主存储数据中用户期望对文件的无缝的、快速的访问。而且,数据去重复算法可在专用装置上运行,或者在存储和提供数据的设备(例如,文件服务器)上运行。在文件服务器的示例中,数据去重复可能不是该设备的主要功能,并且因此可能需要数据去重复技术是高效的,以免过度消耗设备资源(例如,存储器、输入/输出(I/O)机制、中央处理单元(CPU)容量等)。而且,因为数字数据量以非常高的速度增长,所以存储设备(例如,存储盘)的大小以及与计算设备相关联的总存储容量必须增大,从而导致关于不能随着增加存储量而进行很好地伸缩的数据去重复技术的困难。
此外,在处理从存储删除经优化的文件时存在挑战。删除这样的文件可能导致与所删除的文件对应的未使用数据剩余在存储中。该剩余的未使用数据占用本可被使用的存储空间。在使数据能够被可靠地存储时,特别是在这些数据被多个文件共享时,也存在挑战。当数据被大量文件共享时,所存储的数据扇区的丢失可能给多个文件甚至数千个文件带来负面影响。
发明内容
提供本发明内容以便以简化形式介绍将在以下的具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
提供用于对存储中的未使用的数据块进行垃圾收集并用于存储频繁使用的数据块的冗余副本的方法、系统和计算机程序产品。
例如,提供用于对存储中的未使用的数据块进行垃圾收集的各种实现。根据一种实现,基于被指示为已删除的一个或多个流映射块来标识存储在块容器中的未使用的数据块。所标识的数据块被指示为已删除。块容器中由被指示为已删除的数据块所填充的存储空间可被回收。
在一种实现中,未使用的数据块可如下被标识:多个流映射块被扫描以确定未被指示为已删除的任何流映射块。由被指示为未删除的每个流映射块所引用的数据块标识符被包括在数据结构(例如,布隆(Bloom)过滤器)中。多个流映射块被扫描以确定被指示为已删除的任何流映射块。由未包括在该数据结构中的、被指示为已删除的流映射块所引用的数据块标识符被确定并且被指示为已删除。
在一种实现中,由被指示为已删除的数据块所填充的存储空间可如下被回收:该块容器中未被指示为已删除的每个数据块被复制到新容器文件。新容器文件的重定向表被填充以将所复制的数据块的唯一标识符映射到该数据块在该新容器文件中的起始偏移。然后该块容器被删除,且该新容器文件可被重命名为该块容器的文件名以取代该块容器作为该块容器的压缩版。
提供用于块存储中的数据备份的各种实现。根据一种实现,数据块被接收以存储在块容器中。确定所接收的数据块是否是“热点”并且尚未被复制以进行备份。“热点”数据块可被定义成被包括在数据存储中前预定百分比的最多被引用的数据块中,具有大于预定引用阈值的引用数,或两者。如果所接收的数据块是热点,并且还没有被复制以进行备份,则所接收的数据块的备份副本被存储在备份容器中。
在一种实现中,所接收的数据块的备份副本的存储可如下被执行:确定所接收的数据块是否是存储在该块存储中的数据块的重复。如果确定所接收的数据块是重复,则确定所接收的数据块在引用计数表中是否有条目。如果确定所接收的数据块是重复且在引用计数表中具有条目,则增加该引用计数表中该所接收的数据块的条目中的引用计数值。如果确定所接收的数据块是重复并且在引用计数表中没有条目,则为该所接收的数据块将一条目添加到引用计数表,该条目包括:该所接收的数据块的数据块标识符;该所接收的数据块的引用计数值,该引用计数值是初始引用计数值和预期计数值的总和;该所接收的数据块的引用计数值不是确切值的指示;以及该所接收的数据块没有在备份容器中被复制的指示。如果确定所接收的数据块不是重复,则用于该所接收的数据块的条目被添加到该引用计数表。所添加的条目包括:该所接收的数据块的数据块标识符;该所接收的数据块的初始引用计数值;该所接收的数据块的引用计数值是确切值的指示;以及该所接收的数据块没有在该备份容器中被复制的指示。
如果确定所接收的数据块是重复,则确定该所接收的数据块是否在该备份容器中被复制。如果确定该所接收的数据块没有在该备份容器中被复制,则基于对该引用计数表的分析,该所接收的数据块可被指定以在该备份容器中复制。如果确定该所接收的数据块具有大于已复制数据块的最小引用计数值的引用计数值,和/或该所接收的数据块的引用计数值大于预定阈值,则该所接收的数据块可被指定以复制。
如果确定该所接收的数据块没有在该备份容器中被复制,并且基于对该引用计数表的分析被指定以在该备份容器中复制,则该所接收的数据块的备份副本被存储在该备份容器中,并且该引用计数表中该所接收的数据块的条目被修改以包括该所接收的数据块在该备份容器中被复制的指示。
可确定该引用计数表已达到预定大小。结果,该引用计数表可被重新合并以减少存储器消耗同时维持已满足热点条件的数据块的条目。如果存储器足够,则可保留具有高引用计数但是尚未满足热点条件的数据块的附加条目。在重新合并之后,对于在重新合并后的引用计数表中具有条目、已满足热点条件、以及尚未在该备份容器中出现的数据块,数据块的备份副本可被存储在备份容器中。
此处还描述了用于对存储中的未使用的数据块进行垃圾收集、用于存储热点块的备份副本、以及用于此处描述的进一步实施例的计算机程序产品。
下面将参考各个附图,详细描述本发明的进一步特点和优点,以及本发明的各实施例的结构和操作。值得注意的是,本发明不仅限于此处所描述的特定实施例。本文呈现这些实施例仅用于说明性的用途。基于本文所包含的描述,其它实施例对于相关领域的技术人员将是显而易见的。
附图说明
结合到本说明书并构成本说明书的一部分的附图示出了本发明,且与描述一起,进一步用于说明本发明的原理,并允许那些精通相关的技术人员实施和使用本发明。
图1示出了根据一示例实施例的数据去重复系统的框图。
图2示出根据一示例实施例的块存储的框图。
图3示出根据一示例实施例的块存储的框图。
图4示出根据一示例实施例的包括在流映射中的元数据的框图。
图5示出根据一示例实施例的图3的块存储,还指示被流映射引用的一些数据块。
图6示出了根据一示例实施例的数据流存储系统的框图。
图7示出了根据一示例实施例的用于存储数据流的流程图。
图8示出根据一示例实施例的元数据生成器的框图。
图9示出了根据一示例实施例的用于为位置指示符赋值的流程图。
图10根据一实施例示出图解将数据流存储在数据存储中的示例的框图。
图11根据一示例实施例示出包括再水合(rehydration)模块的块存储接口的框图。
图12示出根据一示例实施例的块容器的框图。
图13示出了根据一示例实施例的数据块标识符的框图。
图14示出根据一实施例的其中数据流被存储在数据存储中的图10的示例,并且还图解了将数据块从数据存储中移除的效果。
图15示出根据一示例实施例的重定向表的框图。
图16示出了根据一示例实施例的用于存储数据流的流程图。
图17示出了根据一示例实施例的数据块重定向系统的框图。
图18示出了根据一示例实施例的用于在块容器中定位数据块的流程图。
图19示出根据一示例实施例的用以访问块存储以再水合数据流的再水合模块的框图。
图20示出了根据一示例实施例的用于执行块容器的垃圾收集的流程图。
图21示出了根据一示例实施例的提供用于标识并指示数据块来删除的过程的流程图。
图22示出了根据一示例实施例的提供用于回收由被指示来删除的数据块填充的存储空间的过程的流程图。
图23示出了根据一示例实施例的与流容器和块容器通信以回收由已删除的数据块填充的存储空间的垃圾收集模块的框图。
图24示出了根据一实施例的被从旧块容器复制到新块容器的数据块的框图示例。
图25示出了根据一示例实施例的用于存储在块容器中存储的数据块的备份副本的流程图。
图26A和26B示出了根据一实施例的图25的过程的示例。
图27示出了根据一示例实施例的与流容器、块容器和备份容器通信以备份频繁被引用数据块的备份存储模块的框图。
图28示出了根据一示例实施例的提供用于重新合并引用计数表的过程的流程图。
图29示出了根据一示例实施例的提供图28的重新合并过程的示例的流程图。
图30示出了可用于实现本发明的各实施例的示例计算机的框图。
当结合其中相同的参考字符标识对应的元素的附图时,本发明的特征和优点将从以下阐述的详细描述中变得更加显而易见。在附图中,相同的参考标号一般指相同的、功能上相似的和/或结构上相似的元素。其中元素第一次出现的附图由对应的参考标号中最左侧的数字指示。
具体实施方式
I.介绍
本说明书公开了包括本发明的特征的一个或多个实施例。所公开的实施例只例示了本发明。本发明的范围不仅限于所公开的实施例。本发明由所附的权利要求进行定义。
说明书中对“一个实施例”、“实施例”、“示例实施例”等等的引用表示所描述的实施例可包括特定特征、结构或特性,但是,每一个实施例可不必包括该特定特征、结构,或特征。此外,这些短语不一定指相同的实施例。此外,当关于某一实施例描述特定特征、结构或特性时,不管是否被明确描述,关于其他实施例来实现该特征、结构或特性被认为是在本领域技术人员的知识范围内。
在本说明书中,经优化的数据指已被优化的数据或者已由数据去重复技术(诸如块的单一实例化和压缩等)中的一种或多种进行了去重复的数据。经优化的流指被去重复的流,或换言之,它们的数据已使用数据去重复技术被优化。
II.示例实施例
实施例提供用于数据去重复的技术。这些实施例允许减少要被存储或者要被传输的数据的量(例如,字节数),而不损害数据的保真性和完整性。例如,各实施例允许减少访问经优化的数据时的等待时间的量。而且,各实施例使诸如计算机器/设备等资源能够被更高效地使用,从而降低了资源消耗。进而,实施例提供用于数据去重复、垃圾收集、以及可随着所存储的数字数据量的增长而伸缩的数据的备份副本的存储。
例如,在一实施例中,提供了用于数据去重复的可伸缩块存储。该块存储允许用于最小化对去重复的数据的访问中的等待时间、减少机器资源消耗(例如,存储器和磁盘I/O)、以及增强数据去重复、再水合、垃圾收集和数据备份期间的可靠性的各种技术。各示例实施例在以下子节中进一步详细描述。
A.示例性数据去重复实施例
在各实施例中,可优化要存储的数据,以减少数据所需的存储的量。例如,数据流可以唯一数据块的形式来存储。数据块可被定义数据流的映射引用。以这种方式,数据流被更高效地存储,因为多个映射可引用同一已存储的数据块,而不是同一数据块被存储多次。而且,可根据需要从存储(例如由应用)请求经优化的数据。在这种情况下,可根据相应的映射从已存储的数据块重新组装数据流。
例如,图1示出了根据一示例实施例的数据去重复系统100的框图。如图1所示,系统100包括存储系统102、数据去重复模块104、维护模块106和存储108。而且,存储系统102包括数据流API(应用编程接口)110、块维护API 112、和数据访问API 114。描述系统100如下,以说明经优化的数据的存储以及经优化的数据从存储的恢复,并且该系统并非旨在限制。
系统100被配置成允许以高效的方式将数据存储在存储108中,以及允许从存储108取回数据。例如,在一实施例中,可存在数据去重复模块104。数据去重复模块104被配置成优化接收到的数据以供存储。例如,数据去重复模块104可分段并压缩作为数据流132来接收的接收到的数据。数据流132可包括数据文件的一部分、单个数据文件、多个数据文件、和/或各文件和/或各文件部分的组合。如图1所示出地,数据去重复模块104生成数据块124,数据块124可以是数据流132的经压缩并经分段的版本。
数据流API 110提供用于存储系统102接收数据块124的接口。数据块124可包括形成数据流132的多个数据块,数据块124从该数据流132生成。数据流API 110可以相关领域的技术人员所公知的任何合适方式来配置。数据流API110可输出由块存储接口116接收的数据块124。
如图1所示,存储108耦合到存储系统102。块存储接口116是API 110、112和114与存储108之间的接口。例如,块存储接口116可接收数据块124,并可将数据块124中的数据块存储在存储108中。例如,如图1所示,存储108包括块存储118。块存储接口116可将数据块124中的接收到的数据块,如数据块128,存储在块存储118中。
数据访问API 114提供用于应用请求存储系统102的数据的接口。例如,如图1所示,数据访问API 114可接收数据流请求120。数据访问API 114可以相关领域的技术人员所公知的任何合适的方式来配置。数据访问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执行附加的或替代的维护任务。
如图1所示,块维护API 112提供用于维护模块106与存储系统102进行交互的接口。维护模块106可生成由块维护API 112来接收的维护任务126(例如,碎片整理指令、压缩指令、数据块删除指令等)。块维护API 112可以相关领域的技术人员所公知的任何合适的方式来配置。块维护API 112可将维护任务126提供给块存储接口116。块存储接口116可允许对存储在存储108中的数据块执行维护任务126。
存储系统102可以任何合适的形式来实现,包括一个或多个计算机/计算设备等形式。存储108可包括任何类型的存储机制中的一种或多种,包括磁盘(例如,在硬盘驱动器中)、光盘(例如,在光盘驱动器中)、磁带(例如,在带驱动器中)、一种或多种存储器设备(例如,闪存、固态驱动器(SSD)等)、和/或任何其他合适类型的存储介质。
注意,数据去重复系统100是其中可实现本发明的各实施例的环境的示例。数据去重复系统100出于说明的目的而被提供,并不旨在限制。可将各实施例结合在其他类型和配置的数据去重复系统中。
B.允许数据块定位的示例块存储实施例
图1中的块存储118可以以任何方式以数据块形式存储数据流。例如,块存储118可存储指示包括在数据流中的数据块的映射,并可存储所引用的数据块。在一实施例中,根据数据去重复技术,块存储118并不存储数据块的重复副本。
例如,图2示出根据一示例实施例的块存储118的框图。如图2所示,块存储118包括流容器202和块容器204。流容器202包括一个或多个流映射206,且块容器204包括多个数据块208。尽管为了便于描绘而在图2中被示出为包括单个流容器202和块容器204,但块存储118可包括任何数量的流容器202和块容器204。数据块208是被一个或多个数据流(例如,图1中的数据流132)引用的一段数据。流映射206是描述原始数据流结构与经优化的数据块结构之间的映射的数据结构。流映射206直接地或者通过间接层包含数据块位置信息和数据块排序,使得可定位所引用的数据块,并将其组装成文件流视图。数据块208和流映射206分别被存储在流容器202和块容器204中,容器可以是文件系统中的文件。在一实施例中,块存储118以块的形式存储所有数据,使得流映射206被存储成包含内部元数据(数据流元数据)的数据块,内部元数据描述了文件流到数据块208的映射、数据块地址、以及散列。
在各实施例中,可以以各种方式来配置流容器202和块容器204。例如,图3示出了根据一示例实施例的块存储300的框图。块存储300是图2中的块存储118的一个示例。如图3所示,块存储300包括流容器302和块容器304。流容器302是图2中的流容器202的一个示例,且块容器304是图2中的块容器204的一个示例。在图3的实施例中,流容器302包括文件头部306、重定向表308、和多个流映射310。为描绘之目的图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(例如,间接地,如通过图1的API 116)来确定第二流映射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中可包括各种类型的信息。例如,图4示出了根据一示例实施例的元数据400的框图。元数据400是图3中的元数据314的示例。元数据400是对每个被引用的数据块322,可被包括在流映射310中的元数据(例如,每个块的元数据)的示例。如图4所示,元数据400包括数据流偏移402、数据块标识符404和位置指示符406。数据流偏移402指示相关联的数据块322在由特定流映射310定义的数据流中的位置。例如,数据流偏移402可指示离数据流的开头的字节数,或者离数据流中相关联的数据块322开始的其他引用点的字节数。数据块标识符404(也称为块id或“可靠的块定位符”)是指向块容器304中的相应数据块322的引用或指针。例如,特定数据块的数据块标识符404允许在块容器304中可靠地定位数据块。数据块标识符404可具有各种形式,包括在以下更详细描述的示例形式(例如,参考图13)。位置指示符406是表示块容器304中的块插入次序的信息,允许确定哪些数据块322可被共同的流映射310引用。例如,位置指示符406允许将与相同的流映射310相关联的各数据块322连续地存储在块容器304中,或者在连续存储并不直接时(例如,由于多个流映射310引用同一数据块322)允许将各数据块322相接近地存储在一起。位置指示符406还可被诸如块散列索引等其他数据去重复组件使用以改善散列查找和插入性能,或被碎片整理器使用以重新排列数据块以减少特定数据流的等待时间。
参考图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中,以允许数据去重复。例如,图1中的块存储接口116可接收与数据流132相关联的数据块124,并可将数据块存储在图3中的块存储300中。例如,对于特定的数据流132,块存储接口116可生成流映射,该流映射作为流映射310通过块存储接口116存储在流容器302中,流映射310引用存储在一个或多个块容器304中的一个或多个数据块322。
例如,图5示出根据一示例实施例的图3中的块存储300,并指示出被流映射310引用的一些数据块322。如图5所示,第一流映射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(图5中未示出)被赋予位置指示符406的新值。
图1中的块存储接口116可以用各种方式来配置以将数据流存储在图3的块存储300中。例如,图6示出了根据一示例实施例的数据流存储系统600的框图。如图6所示,数据流存储系统600包括数据流解析器602、块存储接口116、流容器302、以及块容器304。在一实施例中,可将数据流解析器602包括在图1的数据去重复模块104中。在图6的实施例中,块存储接口116包括数据块存储管理器604、元数据生成器606和流映射生成器608。参考图7如下描述图6中的这些特征。图7示出了根据一示例实施例的用于存储数据流的流程图700。在一实施例中,图6中的系统600可根据流程图700来操作。基于有关流程图700的讨论,进一步的结构及操作的实施例对于相关领域的技术人员将是显而易见的。流程图700和系统600描述如下。
流程图700开始于步骤702。在步骤702中,将数据流解析成数据块。例如,如图6所示,数据流解析器602可接收数据流610。类似于图1中的数据流132,数据流610可包括一个或多个文件和/或文件部分。数据流解析器602被配置成将数据流610解析成被指示为数据块序列612的数据块的序列。例如,在一实施例中,数据块序列612可以以数据块定位在数据流610中的次序来包括数据块的序列。数据块序列612中的数据块可具有相同的大小或可具有不同的大小。
在步骤704中,确定这些数据块中的任何一个是否是存储在块容器中的数据块的重复。例如,如图6所示,数据块存储管理器604接收数据块序列612。数据块存储管理器604被配置成确定数据块序列612中的数据块中的任何一个是否已经被存储在块容器304中并因此是重复的。例如,在一实施例中,如图6所示,数据块存储管理器604可从块容器304接收数据块信息626,数据块信息626可包括存储在块容器304中的每一数据块322的散列值。在另一实施例中,数据块存储管理器604可从流容器302接收散列值316(图3),散列值316是存储在块容器304中的数据块322的散列值。数据块存储管理器604可为数据块序列612中的每一数据块生成散列值,并可将所生成的散列值与数据块信息626中(或者从流容器302处)接收的散列值进行比较,以确定数据块序列612中哪些数据块已经被存储在块容器304中。在其他实施例中,数据块存储管理器604可确定数据块序列612中的哪些数据块已以相关领域的技术人员所公知的其他方式存储在块容器304中。
如图6所示,数据块存储管理器604生成已存储块指示616,该已存储块指示616指示了数据块序列612中的哪些数据块已被存储在块容器304中。
再参考图7,在步骤706中,将被确定为不是重复的各数据块以连续的排列并以与数据流中的顺序相同的顺序存储在一个或多个块容器中。例如,在一实施例中,数据块存储管理器604可被配制成存储数据块序列612中没有被确定为存储在块容器304中的数据块。例如,在一实施例中,数据块存储管理器604可为每一新数据块生成块头部324(例如,数据块标识符),并将每一新数据块存储为具有块头部324和块数据326的数据块322。此外,在一实施例中,数据块存储管理器604被配置成将各新数据块以连续的排列并以与源数据流中的顺序相同的顺序(例如,以在数据块序列612中接收的次序)存储在块容器304中。注意,在另一实施例中,被确定为不是重复的数据块可以以便于对各数据块的并行读取的方式存储在多个块容器中。
在步骤708中,为块序列中的各数据块中的每一个生成元数据,数据块的元数据包括数据流偏移、指向块容器中的一位置的指针、以及位置指示符。例如,如图6所示,元数据生成器606可接收数据块序列612和已存储块指示616。在一实施例中,元数据生成器606可被配置成生成元数据(例如,图3中的元数据314)。元数据生成器606可为数据块序列612中的每一数据块生成元数据,该元数据包括数据流偏移402、数据块标识符404、和位置指示符406。对于被确定为已存储在块容器304中的各数据块(在步骤704中),数据块标识符404被配置成指向该已存储数据块。对于在步骤708中新存储在块容器304中的各数据块,数据块标识符404被配制成指向该新存储的数据块。
在各实施例中,元数据生成器606可以以各种方式被配置来生成元数据。例如,图8示出了根据一示例实施例的元数据生成器606的框图。如图8所示,元数据生成器606包括元数据收集器802和位置指示符生成器804。如图8所示,位置指示符生成器804接收数据块序列612和已存储块指示616。位置指示符生成器804被配置成为数据块序列612中没有被已存储块指示616指示为已存储在块容器304中的每一数据块生成位置指示符406。如图8所示,位置指示符生成器804生成一个或多个位置指示符值622,该值指示数据块序列612中每一数据块的位置指示符406。
元数据收集器802接收位置指示符值622、数据块序列612和已存储块指示616。元数据收集器802收集数据块序列612中每一数据块的元数据。例如,元数据收集器802可确定在数据块序列612中接收的每一数据块的数据流偏移402。例如,元数据收集器802可基于在数据块序列612中接收各数据块的次序和/或接收到的数据块的长度来确定每一数据块的数据流偏移402(例如,对于一数据块,数据流偏移402可被设定为数据块序列612中在该数据块之前被接收到的各数据块的长度的和,或者以其他方式来设定)。元数据收集器802可为每一数据块生成数据块标识符404,以标识块容器304中的每一数据块。元数据收集器802向每一数据块赋予在位置指示符值622中接收到的相应位置指示符值。元数据收集器802将与在数据块序列612中接收到的每一数据块相关联的元数据作为数据块元数据620输出。
在一实施例中,元数据生成器606可根据图9来赋予各位置指示符值622。图9示出了根据一示例实施例的用于为位置指示符赋值的流程图900。流程图900开始于步骤902。在步骤902中,选择与数据流相关联的新位置指示符值。例如,当对于某一数据流接收数据块序列612时,位置指示符生成器804可选择新位置指示符值来与该数据流相关联。该新位置指示符值是唯一的,且与正用于之前接收的数据流的位置指示符值不同,这些之前接收的数据流已经具有存储在块容器304中的数据块。例如,新位置指示符值可以是所生成的与数据流相关联的唯一数字。位置指示符生成器804将所选位置指示符值作为所选位置指示符值622来输出。
在步骤904中,将新位置指示符值赋给在步骤704中被确定为不是重复的各数据块中的每一个数据块的位置指示符。例如,如图8所示,所选位置指示符值622是由元数据收集器802来接收的。元数据收集器802被配置成将所选位置指示符值622作为位置指示符406赋予数据块序列612中被已存储块指示616指示为尚未存储在块容器304中的第一组数据块(即,新数据块)中的每一数据块。
在步骤906中,对于在步骤704中被确定为是重复的每一个数据块,将与已存储在块容器中的匹配数据块相关联的位置指示符值赋给位置指示符。例如,已存储在块容器304中的每一数据块322(重复数据块)具有已赋值的位置指示符406,因为位置指示符值是在数据块322最初被存储在块容器304中的时候被分配给数据块322的。在一实施例中,对于被已存储块指示616指示为已存储在块容器中的各数据块,元数据收集器802将与已存储在块容器304中的数据块相关联的位置指示符值赋予在数据块序列612中接收到的匹配/重复数据块。因此,数据块序列612中的一组或多组数据块各自可被赋予与存储在块容器304中的相应数据块相关联的相应位置指示符值。
再参考图7,在步骤710中,为包括所生成的元数据的数据流生成流映射。例如,如图6所示,流映射生成器608接收在特定数据流的数据块序列612中接收到的每一数据块的数据块元数据620。流映射生成器608生成与包括每一所接收的数据块的数据块元数据620的数据流相关联的流映射624。此外,流映射生成器608可生成流映射624的流头部312,并可将每个所接收的数据块的散列值316包括在流映射624中。
在步骤712中,将该流映射存储在流容器中。例如,如图6所示,流映射生成器608可将流映射624(例如,作为流映射310)存储(或“持久存储”)在流容器302中。
图10示出图解根据一实施例的将数据流存储在数据存储中的示例的框图。提供图10以用作描绘之目的,而不旨在限制。在图10的示例中,将第一数据流1002a存储在数据存储中,接着将第二数据流1002b存储在该数据存储中。对第一数据流1002a,示出流链接1008a(也称为“流指针”或“流残端(stub)”),并对第二数据流1002b示出流链接1008b。如图10所示,第一数据流1002a包括四个数据块1014a-1014d。如上所述,可为第一数据流1002a生成流映射1004a,并可将四个数据块1014a-1014d存储在块容器1006中。流映射1004a包括指向数据块1014a-1014d中的每一个的指针(由图10中的箭头表示)。可将数据块1014a-1014d分类在对块容器1006而言是新的、唯一的所有数据块的单个组中。这样,可将数据块1014a-1014d以连续的排列并以与数据流1002a中的次序相同的次序存储在块容器1006中。例如,数据块1014a-1014d可以是存储在块容器1006中的前四个数据块,或者如果一个或多个数据块已被存储在块容器1006中,则可将数据块1014a-1014d存储在块容器1006中紧随在这些已存储的数据块之后。向数据块1014a-1014d中的每一个赋予流映射1004a中的相同位置指示符值,该位置指示符值是为第一数据流1002a选择的。
第二数据流1002b包括四个数据块1014b、1014c、1014e和1014f。可为第二数据流1002b生成流映射1004b。可根据流程图700的步骤704将数据块1014b、1014c、1014e和1014f分类在两组数据块中:包括块1014b和1014c的第一组,块1014b和1014c已经具有驻留在块容器1006中的副本(由于第一数据流1002a的块序列);以及包括块1014e和1014f的第二组,块1014e和1014f是新的、唯一的数据块(其不具有已存储在块容器1006中的副本)。由于数据块1014b和1014c已经被存储在块容器1006中,因此流映射1004b包括指向已经存储在块容器1006中的数据块1014b和1014c的指针(数据块标识符404的值)。因此,可将数据块1014b和1014c作为指向块容器1006中的现有数据块的指针来存储,而无需存储数据块1014b和1014c的块数据。如上所述,由于数据块1014e和1014f尚未存储在块容器1006中,因此可将数据块1014e和1014f存储在块容器1006中。例如,由于数据块1014e和1014f对块容器1006而言是新的、唯一的数据块,因此可将块1014e和1014f以连续的排列、以与数据流1002b中的次序相同的次序、在当前存储在块容器1006中的上一个已存储的数据块(例如,数据块1014d)之后存储在块容器1006中。流映射1004b包括第一至第四数据块标识符1012a-1012d,这些标识符分别指向存储在块容器1006中的数据块1014b、1014c、1014e和1014f。在流映射1004b中,向数据块1014b和1014c赋予与第一数据流1002a相关联的位置指示符值(根据图9中的步骤906),且向数据块1014e和1014f分配为第二数据流1002b选择的位置指示符值(例如,根据图9中的步骤902和904)。
注意,任何数量的附加数据流1002可以以与数据流1002a和1002b类似的方式来进行存储。此外,注意,在图10的示例中,第二流映射1004b中的数据块各自被赋予如下两个位置指示符值中的一个——为第二流映射1004b选择的新位置指示符值,或者与第一流映射1004a的数据块相关联的位置指示符值。在各实施例中,某一流映射的数据块可被赋予任何数量的位置指示符值中的一个,这取决于与该流映射中在块容器中已存在的数据块相关联的不同位置指示符的数量。例如,如上所述,可向对块容器而言为新的数据块赋予为与流映射相关联的特定数据流所选择的新位置指示符值。此外,向流映射所引用的已经存在于块容器中的任何数量的数据块赋予已经存在于该块容器中的数据块的相应位置指示符值。这可意味着可向数据流中任何数量的一组或多组数据块分配相应的位置指示符值,使得可向该数据流中的各数据块赋予从两个、三个或甚至更多个不同的位置指示符值中选择的位置指示符。
因此,流映射元数据中的位置指示符允许各数据块在数据流中的位置被确定。这是因为重复的数据块趋向于成组地出现。在新数据流包含已知数据块(已经存储在块容器中)时,存在以下合理的可能性:在该新数据流中下一数据块也是重复的数据块(已经存储在块容器中)。由于各新的、原始数据被块根据位置指示符彼此相邻地存储在块容器中,因此新数据流所引用的各已存在数据块更可能也被连续地存储在块容器中。这有助于改进从块存储读取和/或处理经优化的数据流的性能。例如,被配置成基于相应的流映射和数据块来重新组装数据流的再水合模块可对存储在块容器中的各数据块执行预读(read-ahead),以期望找到在预读缓存器中需要的下一数据块。此外,如碎片整理和压缩等块存储维护任务可执行它们的任务,同时通过在现有的相邻块在块容器中四处移动时将这些相邻块保持在一起来尝试维持原始位置。
例如,在数据流被优化并且以流映射310和数据块322的形式被存储在块存储300之后,可从块存储300处读取这些数据流。图11示出了根据一示例实施例的包括再水合(rehydration)模块1102的块存储接口116的框图。再水合模块1102被配置成重新组装所请求的数据流(例如,根据图1中示出的数据流请求120请求的数据流)。例如,对于响应于数据流请求120(图1)要从块存储300读取的数据流,再水合模块1102确定并接收被来自块存储300的数据流请求120的经优化的文件所引用(例如,在重解析位置处)的流映射310。例如,再水合模块1102可将请求120的流映射标识符提供给图3中的块存储300。块存储300基于流映射标识符(例如,如果容器世代值匹配的话是容器标识符和块偏移值,如果容器世代值不匹配的话则是容器标识符、局部标识符、以及重定向表)来取回相应的流映射310,且再水合模块1102可根据所取回的流映射310来重新生成或“再水合”该数据流。注意,流映射可以其他方式来被标识,诸如通过使用将流映射的流映射标识符转换为流映射在磁盘上的确切位置的单独索引。所取回的流映射310包括指向块容器304中包括在数据流中的数据块中的每一个数据块的指针(图4中的数据块标识符404)。再水合模块1102使用这些指针来取回这些数据块322中的每一个。再水合模块1102可使用包括在所取回的流映射310中的数据流偏移402(例如,外加可被包括在所取回的流映射310中的数据块长度信息)将所取回的数据块322以合适的次序排列以重新生成由再水合模块1102作为数据流1104输出的数据流。
通过对位置指示符406的使用,可执行从块容器304中对数据块322的顺序读取。例如,在文件流正被再水合模块1102使用顺序I/O(输入/输出)请求或包括一个以上数据块边界的任何I/O请求在块存储300中访问时,由于数据块根据它们的原始数据流顺序的连续存储而允许对各数据块的快速访问。这是因为在块存储300创建流映射310时,新数据块以经优化的方式被存储在块容器304中以使该数据块可在稍后被快速读取。例如,数据块可被顺序存储在可被并行处理(用于数据块插入和/或用于数据块读取)的相关容器中。因此,在由再水合模块1102的顺序数据访问期间,属于同一数据流的各数据块可能会被连续地存储,这些连续数据块可用单个数据访问“查找”(例如,向前或向后经过块容器移动以便找到要读取的下一个已存储的数据块)来访问和读取,并且碎片被减少成非唯一数据块(被流映射引用的、在存储相应的数据流之前已经存在于块容器中的数据块)。顺序数据访问期间的数据访问查找限于以下情况,其中某一数据流的一数据块或一系列块被发现已经存在于块存储中。流映射310提供了用于可能被数据去重复系统中的其他模块(例如,被文件复制模块使用的散列值的列表)需要的经优化的文件元数据(例如,元数据314)的高效元数据表示。流映射310是简明的,并且可被高速缓存在存储器中以供快速访问。块存储300或更高级别的数据访问层可基于LRU(至少最近使用的)算法或其他类型的高速缓存算法来高速缓存(被再水合模块1102频繁请求和再水合的经优化数据流的)被频繁访问的流映射310。
C.允许可靠地定位数据块和流映射的示例块存储实施例
如上所述,可出于各种原因(诸如由于执行垃圾收集的压缩技术,或潜在由于其他原因)在块容器中移动数据块。本小节中描述了用于跟踪数据块在块容器中的移动的各实施例。
图12示出了根据一示例实施例的块容器304的框图。如图12所示,块容器304大致类似于图3中的块容器304,但在文件头部318中还包括块容器标识符1202和块容器世代指示1204。块容器标识符1202是赋予块容器304的唯一标识符(例如,标识号),用于将块容器304与可能存在于块存储300中的其他块容器区分开。块容器世代指示1204指示块容器304的修订或世代。例如,每当在块容器304中移动一个或多个数据块322时,可修改世代指示1204(例如,可将其从诸如0或其他开始值等开始世代级别增加到下一世代级别)。
在一实施例中,块容器304可由块容器标识符1202和块容器世代指示1204的组合(例如,可形成块容器304的文件名)来标识。在另一实施例中,块容器304可由被赋予块容器304的唯一标识符来标识,其可被映射(例如,使用诸如散列表等索引结构)到特定物理数据流(例如,文件等)和关于该数据流的位置(例如,偏移)。在一实施例中,块容器标识符1202和块容器世代指示1204两者都可以是整数。块容器304可具有固定的大小(即,固定数量的条目),或者可具有可变的大小。例如,在一个示例实施例中,可将定义块容器304的每个块容器文件的大小设为存储大约16000个块,并且平均数据块大小为64KB,其中块容器文件的大小被设为1GB。在其他实施例中,块容器文件可具有替代的大小。
可根据元数据400(图4)的数据块标识符404以各种方式引用存储在块容器304中的数据块322。例如,数据块可具有可使用索引结构(例如,散列表或类似结构)映射(例如,通过容器标识符或在容器内的偏移)到特定容器内的具体位置的唯一标识符。在另一示例中,图13示出了根据一示例实施例的数据块标识符1300的框图。在各实施例中,流映射310可将数据块标识符1300作为数据块标识符404存储在元数据314中。如图13所示,数据块标识符1300包括数据块容器标识符1302、局部标识符1304、块容器世代值1306和块偏移值1308。块容器标识符1302具有其中存储有数据块322的块容器304的块容器标识符1202的值。局部标识符1304是赋予数据块322的标识符(例如,数字值),该标识符对于存储有数据块322的块容器304中的被赋值的数据块322是唯一的(例如,是数据块的唯一的、每容器标识符)。块容器世代值1306具有其中存储有数据块322的块容器304在数据块322被存储在块容器304中的时候的块容器世代指示1204的值。注意,赋予数据块322的局部标识符1304的值在块容器304的整个历史中(例如,在所有世代中)对于数据块322是唯一的,并且该值是不可变的。块偏移值1308是块容器304中的数据块322在数据块322被添加到块容器304中的时候的偏移。
因此,根据图13中的实施例,数据块322可由流映射310通过数据块标识符1300来引用,数据块标识符1300包括块偏移值1308,块偏移值指示块容器304中的数据块322在它们被存储时的偏移。然而,如果随后在块容器304中移动数据块322(即,块容器304中的数据块322的偏移改变),则在流映射310中使用的数据块322的现有数据块标识符1300可具有针对块偏移值1308的不正确的值。
这个概念在图14中示出。图14示出根据一实施例的其中数据流被存储在数据存储中的图10的示例,并且还图解了将数据块从数据存储中移除的效果。如图14所示,类似于图10,第二数据流1002b具有相应的流映射1004b(例如,存储在流容器302中,图14中未示出),并具有存储在块容器1006中的数据块1014b、1014c、1014e和1014f。然而,与图10相反,已将第一数据流1002a从块存储移除。因此,第一流映射1004a不再存在。此外,将本示例中仅被流映射1004a引用的数据块1014a和1014b从块容器1006移除(例如,通过垃圾收集技术)。而且,由于数据块1014a和1014d不再存在于块容器1006中,从而留下了未使用空间/存储间隙,因此压缩算法已在块容器1006中移动了1014b、1014c、1014e和1014f,以回收未使用空间。如图14所示,在块容器304中,数据块1014b已被转移至块容器1006中的第一偏移位置(数据块1014a之前所在的位置),数据块1014c已被转移至邻接在数据块1014b之后的另一偏移位置,数据块1014e已被转移至邻接在数据块1014c之后的另一偏移位置,并且数据块1014f已被转移至邻接在数据块1014e之后的另一偏移位置。通过这种方式,可将块容器304中之前由数据块1014a和1014d填充的存储空间回收。
然而,由于数据块1014b、1014c、1014e和1014f已在块容器1006中移动了,因此流映射1004b中的数据块标识符1012a-1012d不再指向数据块1014b、1014c、1014e和1014f(例如,表示指针1012a-1012d的箭头被示为指向数据块1014b、1014c、1014e和1014f的之前位置)。如果在再水合数据流1002b的尝试中使用流映射1004b,则该尝试将失败,因为数据块1014b、1014c、1014e和1014f在它们之前的位置是不可取回的。因此,期望具有用于在其新偏移处定位数据块1014b、1014c、1014e和1014f的技术。
在一实施例中,块存储可实现可靠的块定位器,该块定位器可用于跟踪已移动的数据块。与传统技术相反,该可靠的块定位器并不使用用于将数据块标识符映射到物理块位置的全局索引。传统技术使用将块标识符映射到块数据物理位置的全局索引。存储系统的规模(例如,兆兆字节的100倍或更大)以及平均块大小(例如,64KB)使得这一全局索引非常大。如果将这一全局索引全部加载到存储器中,则它将消耗大量的可用存储器和处理器资源。如果不将该索引加载到存储器中,则数据访问将变得很慢,因为需要将该索引的各部分持续地分页存储到存储器中。此处描述的各实施例并不使用这样的全局索引,因此保留了系统资源。
在一实施例中,可靠的块定位器是以重定向表的形式来实现的,诸如图3中的块容器304的重定向表320。该重定向表可被存储在块容器304中或分开存储。下面描述的重定向表涉及单个容器,但是在另一实施例中,重定向表可以服务多个容器。重定向表可存储在块容器304中已被移动的数据块322的一个或多个条目。每一条目标识已移动的数据块322并具有数据块偏移值,该数据块偏移值指示数据块322在块容器304中其新位置处的位置。在数据流的再水合期间可参考重定向表,以定位数据流中已移动的任何数据块。
例如,图15示出了根据一示例实施例的重定向表1500的框图。如果在块容器304中移动数据块322,则使用重定向表1500来定位数据块322(包括作为数据块来存储的流映射)。例如,重定向表1500允许为了作为垃圾收集和压缩过程的一部分的空间回收而在块容器304中移动数据块,并且仍可基于数据块322的原始块标识符来对该数据块进行可靠的定位。如图15所示,重定向表1500包括多个条目1502,诸如第一条目1502a和第二条目1502b。可将任何数量的条目1502包括在重定向表1500中,包括成百的、成千的、以及甚至更多数量的条目1502。每一条目1502包括局部标识符1504和已改变的块偏移值1506。例如,第一条目1502a包括第一局部标识符1504a和第一已改变的块偏移值1506a,且第二条目1502b包括第二局部标识符1504b和第二已改变的块偏移值1506b。
局部标识符1504是将数据块322最初存储在块容器304时赋予数据块322的唯一局部标识符(图13中的局部标识符1304)。已改变的块偏移值1506是被移动了的、具有相应的局部标识符1504的数据块322的新的块偏移值。因此,可使用数据块的局部标识符来访问重定向表1500,以确定数据块的已改变的块偏移值。
例如,图15中的局部标识符1504a可以是赋予图14中的数据块1014b的局部标识符。可使用赋予数据块1014b的局部标识符来访问重定向表1500中的条目1502a,以确定已改变的块偏移值1506a,该已改变的块偏移值1506a指示数据块1014b在块容器304中的新位置。
注意,重定向表1500可具有任何大小。例如,在一实施例中,重定向表1500的大小以(数据块的预定最大数量-由于压缩而删除的数据块的预定最小数量)×(重定向表条目的大小)为界。在一些情况下,数据块的重新定位可能很少发生。在一实施例中,在确定了数据块的已改变的块偏移值之后,可将流映射中从该流映射指向数据块的任何指针修改成该经改变的块偏移值,并且可将条目1502从重定向表1500移除。在一些情况中,通过这种方式重定向表1500可能随着时间的推移而没有条目1502。
可以各种方式来将条目添加到重定向表中。例如,图16示出了根据一示例实施例的用于存储数据流的流程图1600。参考图17如下描述流程图1600。图17示出了根据一示例实施例的数据块重定向系统1700的框图。如图17所示,数据块重定向系统1700包括重定向表修改器1702和世代增量器1704。例如,在一实施例中,可将数据块重定向系统1700实现在图1中的块存储接口116中。基于有关流程图1600的讨论,进一步的结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图1600如下。
流程图1600开始于步骤1602。在步骤1602,修改块容器中的内容。例如,在一实施例中,可移动图12的块容器304中的一个或多个数据块322。可通过诸如垃圾收集之后的碎片整理过程、压缩过程,或其他过程之类的维护任务(例如,图1中的维护模块106)来移动这些数据块322。
在步骤1604中,将一个或多个条目添加到重定向表中,该一个或多个条目指示块容器中的一个或多个数据块的由于步骤1602而改变的块偏移值。例如,如图17所示,重定向表修改器1702接收已移动数据块指示1706,该已移动数据块指示1706指示根据步骤1602的维护任务而在图12的块容器304中移动了的一个或多个数据块322。可从执行步骤1602的维护任务接收已移动数据块指示1706,并且已移动数据块指示1706可指示:块容器304的块容器标识符、每一个已移动数据块(例如,通过局部标识符1304)、以及已移动数据块在块容器304中的偏移。重定向表修改器1702被配置成将与已移动数据块指示1706中指示的一个或多个已移动数据块322相对应的一个或多个条目1502添加至重定向表1500。例如,对于每一个已移动数据块322,重定向表修改器1702生成条目1502,该条目1502将该已移动数据块322的局部标识符值指示为局部标识符1504并将该已移动数据块322的新偏移值指示为已改变的块偏移值1506。
在步骤1606,块容器头部中的世代指示由于步骤1602而增大。例如,如图17所示,世代增量器1704接收已移动数据块指示1706,该已移动数据块指示1706指示数据块已在图12的块容器304中移动,如通过已移动数据块指示1706中接收到的块容器标识符所标识的。因此,世代增量器1704修改块容器304的块容器世代指示1204。例如,在一实施例中,块容器世代指示1204可具有初始值0,并且每当在块容器304中移动数据块322时,都可增加块容器世代指示1204来指示更高的世代值。在其他实施例中,可以其他方式来修改块容器世代指示1204。
因此,当使用存储在引用流映射310中的数据块标识符(图13中的数据块标识符1300)来查找图12的块容器304中的数据块322时,可检查块容器304的块容器世代指示1204以查看块容器304的当前世代是否与数据块标识符1300中的块容器世代值1306相同。如果它们相同,则可将数据块322定位在由数据块标识符1300中的块偏移值1308所指示的偏移处。如果不同,则读取重定向表1500来确定数据块322在块容器304中的已改变的偏移值。
例如,图18示出根据一示例实施例的用于在块容器中定位数据块的流程图1800。例如,可由图11中的再水合模块1102在从流映射再水合数据流时执行流程图1800。参考图19如下描述流程图1800。图19根据一示例实施例示出再水合模块1930的框图,该再水合模块1930与流容器302和块容器304进行通信以根据数据流请求1910来再水合数据流。如图19所示,再水合模块1930包括数据流组装器1902、世代检查器1906和数据块取回器1908。基于有关流程图1800的讨论,进一步的结构及操作的实施例对于相关领域的技术人员将是显而易见的。流程图1800和图19描述如下。
在图19中,数据流组装器1902接收数据流请求1910,该数据流请求1910指示与要被再水合的数据流相对应的流映射,诸如存储在流容器302中的流映射1904。数据流组装器1902处理流映射1904,从而为被流映射1904引用的每一数据块生成数据块请求1912。
流程图1800开始于步骤1802。在步骤1802中,接收对数据块的请求,该请求包括数据块的标识符,该数据块标识符包括块容器标识符、局部标识符、块容器世代值和第一块偏移值。例如,在一实施例中,由数据流组装器1902所生成的数据块请求1912可包括图13中的数据块标识符1300,以标识所请求的数据块322。如图13所示,数据块标识符1300可包括所请求的数据块322的块容器标识符1302、局部标识符1304、块容器世代值1306和块偏移值1308。定位具有与数据块标识符1300中的块容器标识符1302相匹配的块容器标识符1202的块容器。例如,所定位的块容器可以是图3中的块容器304。如下访问所定位的块容器以取回所请求的数据块。操作行进至步骤1804。
在步骤1804,确定匹配块容器标识符的块容器的世代指示是否匹配块容器世代值。例如,如图19所示,世代检查器1906接收对所请求的数据块的数据块请求1912。世代检查器1906访问块容器304(以上被标识为具有与所请求的数据块322的块容器标识符1302相匹配的块容器标识符1202)。世代检查器1906被配置为将块容器304的块容器世代指示1204与所请求的数据块322的块容器世代值1306进行比较,并输出世代匹配指示1914。如果它们的值不匹配(例如,块容器世代指示1204的值大于所请求的数据块322的块容器世代值1306的值),则世代匹配指示1914指示未找到匹配,并且操作行进至步骤1806。如果它们的值确实匹配,则世代匹配指示1914指示找到匹配,且操作行进至步骤1810,在步骤1810中可遵循用于取回所请求的数据块的标准I/O路径(或,其他路径)。
在步骤1806,搜索与块容器相关联的重定向表,以查找包括对局部标识符的匹配的条目,该条目包括与第一块偏移值不同的第二块偏移值。例如,如图19所示,数据块取回器1908接收世代匹配指示1914和数据块请求1912。如果世代匹配指示1914指示在步骤1804中没有找到匹配,则数据块取回器1908访问重定向表1500以得到具有与所请求的数据块322的局部标识符1304匹配的局部标识符1504的条目1502中的已改变的块偏移值1506(图15)。如图19所示,数据块取回器1908接收与块偏移值1308的第一块偏移值不同的第二块偏移值1916。操作行进至步骤1808。
在步骤1808中,从块容器取回在第二块偏移值处的数据块。例如,如图19所示,数据块取回器1908访问块容器304以得到位于第二块偏移值1916处的数据块322z。数据块322z是已在块容器304中从块偏移值1308移动至第二块偏移值1916的所请求的数据块322。
如图19所示,数据块取回器1908输出数据块1918,在当前示例中是数据块322z。数据块1918被数据流组装器1902接收。以此方式,数据流组装器1902从数据块取回器1908接收被流映射1904引用的所有数据块322,这些数据块是根据相应的块偏移值1308直接从块容器304取回的,或者是按照被重定向表1500重定向从块容器304取回的。如图19所示,数据流组装器1902生成数据流1920,该数据流1920是数据流请求1910中指示的所请求的数据流的再水合形式。如本文其他地方所述,数据流组装器1902将接收到的所有数据块322组装在一起来形成数据流1920。
注意,驻留在数据流的重解析点中的流映射引用标识符(例如,图10中的流链接1008a或1008b)可与图13中的数据块标识符1300具有相同的结构。如上所述,流映射310可具有数据块322的形式,其包含流映射元数据而不包含最终用户文件数据。因此,定址流映射310的过程可与定址数据块322相同——两种技术都可使用数据块标识符1300结构。经优化的数据流通过将流映射310的数据块标识符1300放置在文件重解析点(附属于实际数据流/文件对象)处来引用流映射310。流映射标识符包含[容器标识符、局部标识符、世代值、偏移值]信息,该信息可用于(直接地或者通过重定向表)在流容器302内部定位流映射310数据块。因此,在一实施例中,流容器302的格式和布局可以与块容器304的格式和布局实质上相同。
D.示例垃圾收集实施例
当经优化的数据流被删除且其相应数据块不再被引用时,块存储中由未使用的数据块填充的存储空间可被回收。在本小节中描述了用于执行“垃圾收集”和压缩的实施例,其中被已删除数据块填充的存储空间被回收。各实施例可相对快地执行,并且可与所存在的经优化的数据的量成比例地缩放。此外,这些实施例在机器资源消耗(存储器、磁盘I/O)方面是非常高效的。
许多当前使用的数据优化方案使用引用计数(或引用列表或引用表)来检测填充可被回收的存储空间的过时数据块。根据这些方案,对每个数据块维护引用计数,该引用计数对引用相应数据块的所存储的数据流的数量进行计数。如果引用计数达到0,则该数据块不再被使用而该存储空间可被回收。然而,维护数据块的引用计数(或引用列表或引用表)在机器资源方面效率很低。这是因为:该引用计数在每次非唯一数据块作为要存储的新数据流的一部分而被接收时,以及每当删除数据块时(例如,每当涉及该数据块的数据流被删除时)都被更新。在各实施例中,不对数据块维护引用计数(或引用列表或引用表),从而相对于当前使用的方案保留了机器资源。根据各实施例,当经优化的数据流(例如,以去重复的方式存储的文件)被删除时,块存储可将与该数据流的流映射相对应的元数据块标记/指示为已删除,而不需要立即与该数据块交互。该数据块随后可被垃圾收集,而该数据块所填充的空间可被压缩,如下面的各实施例所述。
在一实施例中,垃圾收集可通过标识并标记过时数据块然后压缩来执行,在压缩时容器被压缩以删除所标识的过时数据块并回收该存储空间。例如,图20示出了根据一示例实施例的用于执行一个或多个块容器的垃圾收集的流程图2000。在一实施例中,流程图2000可由图1的块存储接口116执行。基于有关流程图2000的讨论,进一步的结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图2000如下。
在流程图2000的步骤2002中,基于仅被指示为已删除的流映射块引用,来标识一个或多个块容器中存储的未使用的数据块。例如,参考图1,块存储接口116可接收删除存储在块存储118中的数据流的请求。每当接收到这样的请求时,通过提供在与该已删除数据流相对应的数据存储118中存储的流映射中的已删除指示,块存储接口116可将该数据流指示为已删除。例如,参考图3,第一流映射310a和和第二流映射310b可以流映射数据块(“流映射块”)的形式存储在流容器302中。如果请求从块存储300删除与第二流映射310b相对应的数据流(例如,如由该删除请求中第二流映射310b的流映射标识符/定位符所指示的),则块存储接口116可在第二流映射310b的流映射块的元数据314b中包括删除指示。这样,流容器302中包括删除指示的每个流映射块与已被请求删除的数据流相对应。
根据所存储的元数据400(图4),流容器302中每个流映射块/流映射310的元数据314引用块容器304中的一个或多个数据块322。所引用的数据块322是该相应数据流中所包括的数据块。如此,块存储接口116可通过分析元数据400来标识由被指示为已删除的流映射块所引用的数据块。对于仅由被指示为已删除的流映射块/流映射310引用的数据块,块存储接口116可将该数据块标识为未使用。
在步骤2004中,向被标识为已删除的数据块提供指示。例如,块容器304中在步骤2002中被标识为未使用的数据块322可被块存储接口116指示。块存储接口116可在被标识来删除的数据块322中的块头部324或其他地方提供删除指示。替代地,块存储接口116可生成列出(例如,通过数据块标识符和/或其他信息)被标识来删除的数据块322的删除日志或其他数据结构。
在步骤2006中,由被指示为已删除的数据块填充的块容器中的存储空间被回收。例如,块存储接口116可回收块容器304中之前由被在步骤2004中指示的数据块322填充的存储空间。块存储接口116可以各种方式收回该存储空间,包括生成新块容器并从块容器304复制未被指示为已删除的数据块322到该新块容器中。通过在该新块容器中顺序追加非已删除数据块322,可在该新块容器中回收该存储空间。然后可使用该新块容器来取代块容器304。
图21和图22示出了根据示例实施例的用于执行流程图2000的流程图。例如,图21示出了根据一示例实施例的用于标识和指示数据块来删除的流程图2100(例如,流程图2000的步骤2002和2004)。此外,图22示出了根据一示例实施例的用于回收由被指示来删除的数据块填充的存储空间的流程图。例如,流程图2100和2200可由块存储接口116来执行。参考图23描述流程图2100和2200如下。图23示出了根据一示例实施例的与流容器302和块容器304通信以回收由已删除的数据块填充的存储空间的垃圾收集模块2302的框图。如图23所示,垃圾收集模块2302包括流映射块扫描器2304、已删除数据块指示器2306、以及存储空间回收器2308。基于有关流程图2100和2200的讨论,进一步的结构及操作的实施例对于相关领域的技术人员将是显而易见的。流程图2100被描述如下,接着是对流程图2200的描述。
流程图2100开始于步骤2102。在步骤2102中,多个流映射块被扫描以确定未被指示为已删除的任何流映射块。例如,如图23所示,流映射块扫描器2304可接收垃圾收集启动信号2328,该启动信号2328指示出垃圾收集要由垃圾收集模块2302执行。信号2328可以周期性地、在块容器304的存储空间被填充到预定的量或百分比时、通过用户指令、和/或以其他方式来生成。在被信号2328启动之后,流映射块扫描器2304就扫描流映射块2324(例如,图3中示出的流映射310a-310n)以确定所述流映射块2324中未被指示为已删除的任何流映射块。例如,流映射块扫描器2304可在每个流容器302中对流映射块2324执行顺序扫描。如上所述,当其相应数据流已被请求删除时,流映射块2324的元数据314可存储删除指示。在另一实施例中,流映射块扫描器2304可扫描指示流容器302的已删除流映射块的一个或多个之前生成的删除日志(例如,如下所述的)来确定未被指示为已删除的流映射块2324。因此,根据这些实施例,流映射块扫描器2304可确定所述流映射块2324中不包括删除指示的任何流映射块。所确定的流映射块可被流映射标识符(流映射块的数据块标识符)标识。
在步骤2104中,由被指示为未删除的每个流映射块所引用的数据块标识符被包括在布隆(Bloom)过滤器中。如上面在步骤2104中所述,流映射块扫描器2304标识了所述流映射块2324中未被指示为已删除的一个或多个流映射块。流映射块扫描器2304可分析在步骤2104中标识的流映射块2324中的每一个来确定相应的被引用的数据块(例如,通过数据块标识符)。在一实施例中,流映射块扫描器2304可使用诸如布隆过滤器等数据结构来跟踪由所标识的流映射块2324所引用的数据块。如图23所示,流映射块扫描器2304可包括布隆过滤器生成器2314。布隆过滤器生成器2314被配置成生成布隆过滤器2310,布隆过滤器2310包括由被指示为未删除的流映射块所引用的数据块标识符。尽管此处描述了使用布隆过滤器,然而在替代的实施例中,可使用其他数据结构(例如,散列表或类似结构/技术)来代替布隆过滤器来确定已删除流映射。
布隆过滤器是相关领域的技术人员公知的数据结构。布隆过滤器是可被程序代码用于可靠地确定某一条目是否不是某一集合的成员的紧致集。布隆过滤器具有0假否定率并具有一定(小)百分比的假肯定率。在一实施例中,布隆过滤器2310可以是被初始设定为全0的位数组。为了将一元素添加到布隆过滤器2310(例如,特定数据块的数据块标识符),该元素被馈送至一组k个散列函数以生成k个数组位置。在布隆过滤器2310中将这k个数组位置中的每一个设为1以在布隆过滤器2310中包括该元素。在替代的实施例中,可使用除布隆过滤器外的数据结构(例如,表、映射、数组等)来跟踪由被标识为未删除的流映射块2324所引用的数据块。
在另一实施例中,可使用诸如散列表等其他关联数据结构,而不是使用布隆过滤器生成器2314和布隆过滤器2310。布隆过滤器的优势在于:布隆过滤器更加紧凑并且比大多数替代方案更存储器高效。布隆过滤器相对于诸如散列表等其他数据结构的不足在于:布隆过滤器可能有假肯定而不回收所有的未使用空间。
在步骤2106中,该多个流映射块被扫描以确定被指示为已删除的任何流映射块。例如,流映射块扫描器2304可扫描流映射块2324来确定所述流映射块2324中被指示为已删除的任何流映射块。如上所述,当其相应数据流被请求删除时,流映射块2324的元数据314可包括删除指示。因此,流映射块扫描器2304可确定所述流映射块2324中包括删除指示的任何流映射块。所确定的流映射块可被流映射标识符(流映射块的数据块标识符)标识。在另一实施例中,流映射块扫描器2304可扫描指示流容器302的已删除流映射块的一个或多个之前生成的删除日志(例如,如下所述的)来确定被指示为已删除的流映射块2324。
在步骤2108中,确定由确定为被指示为已删除的流映射块所引用的并且未被包括在布隆过滤器中的数据块标识符。例如,流映射块扫描器2304可分析在步骤2106中标识的具有删除指示的流映射块2324中的每一个以确定所引用的数据块。如图23所示,流映射块扫描器2304输出标识所引用的数据块(例如,通过数据块标识符)的所标识的数据块指示2332。如图23所示,已删除数据块指示器2306接收布隆过滤器2310和指示2332。已删除数据块指示器2306将在指示2332中接收的数据块标识符应用到布隆过滤器2310以确定未包括在布隆过滤器2310中的数据块标识符。如上所述,布隆过滤器没有假否定。这样,如果布隆过滤器2310返回未在其中找到特定数据块标识符,则保证此结果是正确的。这样,如果在跟踪所有非已删除数据块的布隆过滤器中未找到一数据块标识符,则该数据块标识符必定是只被已删除块引用的,并且因此与未使用的数据块相对应。以此方式,已删除数据块指示器2306确定由被确定为被指示为已删除的流映射块2324所引用的、并且未包括在布隆过滤器2310中的数据块标识符,来确定一个或多个未使用的数据块(由数据块标识符标识)。
通过在一个或多个专用流容器中排列流映射块,各实施例可高效地扫描所有流映射块,因为所有流映射块的总大小与原始的(未经优化的)数据的总大小相比小得多。其比值大概是流映射条目的大小与数据块的平均大小的比值。在流映射条目大小为64字节而平均数据块大小为64KB的实施例中,所有流映射块的总大小与原始数据的总大小的比值是1比1000。而且,可使用大部分顺序的I/O来扫描所有流映射块。注意,当前描述的用于标识未使用的数据块的技术不假定数据块是如何存储在块存储中的。数据块可被存储在如本文所述的数据容器中,或者可被存储在任何其他数据结构中。此外,对为块存储中的每个数据块维护的数据流的引用的计数/列表/表不是必需的。此外,数据块标识符和流映射块标识符可具有唯一标识数据块和流映射块的任何值,如图13中示出的数据块标识符1300的结构、自动增量的数字、随机生成的全局唯一ID(GUID)等。而且,当前描述的技术指定每个流映射条目400包含数据块标识符。其他字段(例如,数据流偏移、位置指示符)是可任选的。
在步骤2110中,将与在步骤2108中确定的数据块标识符相对应的数据块指示为已删除。如图23所示,已删除数据块指示器2306输出已删除数据块指示2334,已删除数据块指示2334指示被确定为未使用的数据块(通过数据块指示符)。在一个实施例中,如图23所示,已删除数据块指示器2306可在块容器304的删除日志2312中存储已删除数据块指示2334。删除日志2312存储在指示2334中接收到的数据块指示符,这些数据块指示符是未使用的数据块的数据块指示符(可能已从存储中被删除)。在另一实施例(图23中未示出)中,已删除数据块指示器2306可在已删除数据块指示2334中所标识的每个数据块的元数据中存储删除指示。用这种方式原地更新数据块记录元数据可向块存储增加可靠性风险(例如,如果在更新中间该系统崩溃)。用删除日志2312来跟踪已删除数据块可提供在压缩阶段(例如,如下面参考流程图2200所描述的)扫描已删除数据块时的改进的性能。然而,可以使用任何一种技术。
此外,如图23所示,可存在散列索引2326。散列索引2326存储多个条目,每个条目将一数据块标识符映射到其相应数据块的散列。散列索引2326可按照需要被引用以比较数据块来确定它们是否是彼此的重复。例如,如果新接收的数据块具有与块容器304中已存储的数据块的散列值相匹配的散列值,则该新的和已存储的数据块是重复。在一实施例中,对于在已删除数据块指示2334中被指示为已删除的每个数据块,可从散列索引2326删除条目(例如,通过已删除数据块指示器2306)。通过删除这些条目,维护散列索引2326与块容器304同步(假定在已删除数据块指示2334中被指示为已删除的数据块最终被删除)。
因此,根据流程图2100,确定未使用的数据块并将其指示为已删除。随后,被该未删除数据块填充的存储空间可被回收而块容器304可被压缩。例如,可执行流程图2200来回收该存储空间。注意,根据流程图2200的回收可在执行流程图2100之后立即执行或在稍后的时间执行。例如,如果被指示为已删除(例如,在删除日志2312中,在数据块元数据中等)的数据块的数量大于预定阈值(例如,总块容器大小的20%或其他百分比),则可执行流程图2200。如果被指示为已删除的数据块的数量低于该阈值,则可推迟或不执行块容器304的存储回收/压缩。使用这样的预定阈值可防止以相对小的存储空间回收增益使用系统资源的回收程序被执行。
注意,可使用其他技术来确定未使用的数据块。例如,可以一种或多种方式修改流程图2100。例如,在流程图2100的步骤2102中,可扫描一个或多个删除日志以确定未被指示为已删除的任何流映射块。在步骤2104中,由被指示为未删除的每个流映射块所引用的数据块标识符可被包括在布隆(Bloom)过滤器中。接下来,可生成删除位图,该删除位图将正被处理的一个或多个流容器302的多个流映射块、被指示为未删除的流映射块(如在步骤2102中确定的)、以及流容器302中的任何其他流映射块指示为已删除。然后可删除该删除日志。作为对步骤2106的替代,可扫描该删除位图以确定被指示为已删除的任何流映射块。在步骤2110中,可将未被包括在该布隆过滤器中的、由被确定为被指示为已删除的流映射块(如在步骤2106中确定的)所引用的任何数据块标识符指示为已删除。此替代实施例的一个示例优点在于:该删除位图是一种可用于描述容器的已删除和未删除状态的极紧凑结构,并且可比删除日志更高效地实现这一点。此外,删除日志变得不需要,并且可比在先前技术中更早地被删除。
如图22所示,流程图2200开始于步骤2202。在步骤2202中,该块容器中未被指示为已删除的每个数据块被复制到新容器文件。例如,如图23所示,存储空间回收器2308包括数据块复制器2316和重定向表填充器2120。在一实施例中,数据块复制器2316将块容器304中未被指示为已删除的每个数据块322复制到(用于新块容器的)新容器文件中。例如,如图23所示,数据块复制器2316可接收删除日志2312,删除日志2312包括被指示来删除的数据块的数据块标识符。数据块复制器2316可将在删除日志2312中不具有数据块标识符的每个数据块322复制到新块容器。在块容器304中的数据块322可在其元数据中存储删除指示的另一实施例中,数据块复制器2316可分析块容器304中的每个数据块322的元数据,并可将其元数据中不具有删除指示的每个数据块322复制到新块容器中。
图24示出了根据一示例实施例的被从块容器304(例如,第一或原始块容器)复制到新块容器2400(例如,作为第二块容器)的数据块的示例的框图。在图24的示例中,数据块322a、322c、322f和322h被指示来删除(例如,在删除日志2312中和/或在其自己的元数据中),且数据块322b、322d、322e和322g未被指示来删除。尽管数据块322a、322c、322f和322h被指示来删除,然而它们仍然存在于块容器304中。因此,数据块复制器2316被配置成为新块容器2400生成新容器文件,并且将未被指示来删除的数据块322b、322d、322e和322g复制到新块容器2400的新容器文件中。例如,数据块复制器2316可按顺序将数据块322b、322d、322e和322g复制到新块容器2400以保持它们的次序与在块容器304中的次序相同。此外,数据块复制器2316可将数据块322b、322d、322e和322g复制到新块容器2400以彼此毗邻定位,以使得数据块322b、322d、322e和322g之间不存在未使用的存储空间,从而创建经压缩的新块容器2400。
在步骤2204中,填充新容器文件的重定向表以为每个所复制的数据块将局部标识符映射到容器文件中的新偏移。例如,在一实施例中,重定向表填充器2120可被配置成填充类似于图15的重定向表1500的新块容器的重定向表。新块容器的重定向表允许以与上面关于重定向表1500所描述的类似的方式来对存储在新块容器中的数据块进行数据访问。类似于图15,重定向表填充器2120可被配置成为新块容器填充重定向表以对每个所复制的数据块包括一条目。数据块的每个条目可包括该数据块的局部标识符1304和该数据块在新块容器中的块偏移值1308。此外,数据块的条目可包括块容器世代值和该数据块在块容器304中的块偏移值1308,以将该块容器世代值和在块容器304中的第一偏移值直接映射到在新块容器中的第二偏移值。
例如,关于图24中的示例,通过重定向表填充器2120用与被复制到新块容器2400的数据块322b、322d、322e和322g相对应的四个新条目(以及可能的与从块容器304复制到新块容器2400的附加数据块相对应的更多条目)来填充该重定向表。每个条目将数据块322的局部标识符映射到新块容器2400中的相应块偏移值。
在这一点上,可任选地,可各自驻留于高速缓存存储器中的新容器文件(例如,新块容器2400)可被从该高速缓存存储器转储清除并被存储在存储中。本文中其他地方描述了这种存储器和存储的示例。
尽管图22中未示出,然而流程图2200可以任选地包括另一步骤,该另一步骤中通过用从相应数据块的合并日志获得的新数据块标识符来取代散列条目中的数据块标识符来修改所述散列索引的至少一个条目。在一实施例中,存储空间回收器2308可包括散列索引更新器模块,该模块被配置成将散列索引2326更新以指向新块容器中的所复制的数据块。例如,对于每个所复制的数据块,存储空间回收器2308可扫描重定向表来获得用于所复制的数据块的散列值的新块标识符和块头部。存储空间回收器2308可在散列索引2326中查找该散列值(数据块散列值通常是散列索引中的键)来在散列索引236中定位所复制的数据块的条目或记录。存储空间回收器2308可通过用所复制的数据块的新数据块指示符来取代该记录中的现有数据块指示符来修改该记录以指向在新块容器中的新数据块位置。
再参考流程图2300,存储空间回收器2308可将该新块容器的文件名重命名为块容器304的文件名以用该新块容器来取代块容器304。例如,在步骤2206中,该块容器的原始文件名被重命名为第三文件名。参考图24,块容器304的文件名可被重命名为第三(例如,伪的或临时的)文件名。在步骤2208中,该新容器文件的文件名被重命名为该块容器的原始文件名。参考图24,新块容器2400的文件名可被重命名为块容器304的文件名(在步骤2206中对其重命名之前的文件名)。在步骤2210中,删除该块容器。参考图24,可删除被重命名到第三文件名的块容器304这样,新块容器2400取代了块容器304。
在这一点上,取代块容器304的新块容器2400被压缩而任何未使用的存储空间被回收。可按照需要的频度执行流程图2100和2200来回收未使用的存储空间。
在一实施例中,可能需要减少该新块容器的重定向表的大小。例如,在一实施例中,一个或多个块容器的重定向表可被加载,而可从这些重定向表生成以该局部标识符和该新数据块标识符为键的临时索引。流容器302的流映射可被枚举,并且每个流映射所引用的数据块可被枚举。可在该临时索引中查找数据块标识符的局部标识符1304部分。如果找到匹配,则可用新数据块标识符来更新该流映射中的数据块引用。
注意,在一个实施例中,数据块标识符可被原地追加(例如,取代)到流容器302中的流映射块中。在另一实施例中(例如,为了改进的可靠性),可以用与上面对于块容器所描述的方式类似的方式来生成新流容器,并且可遵循流程图2200的一部分(例如,步骤2202、2204、2206、2208和2210)来用更新后的流映射填充新流容器。在这样的实施例中,流映射块在与旧流容器中相同的偏移处被复制到新流容器。而且,不需要更新流映射块标识符的世代号。该流容器文件可通过执行流程图2200来压缩。
E.用于提供热点释放的示例实施例
在经优化的数据的名字空间中,某些数据块不断重复(例如,重复数千次)。换言之,存储在块存储中的某些数据块可被数千数据流(例如,文件)或者甚至更大数量的数据流引用。如果这些被高度引用的数据块(在本文中也称为“热点”)中的一个丢失(例如,在存储中被破坏),则数千数据流可能丢失,这是数据存储系统的可靠性顾虑。在本小节描述了用于提供用于热点释放的数据块冗余的实施例,其中为被频繁引用的数据块(“热点”)自动制作并存储备份副本。结果,如果被频繁引用的数据块在块存储中被破坏,则可检测该破坏,并且可使用该数据块的备份副本。此外,如果备份副本被破坏,则可使用该数据的原始副本来恢复该备份副本。另外,可采用其他技术来实现元数据的可靠存储,如N路复制(在多于两个副本中复制数据块)、擦除编码技术等。
许多当前使用的用于改善存储可靠性的技术限制了可对唯一数据块所作的引用的数量。例如,根据一种技术,维护对块存储中的每个数据块的引用的总数量的计数。当对某一数据块的引用的总数量超出阈值时,制作该数据块的备份副本。然而,维护数据块的引用计数(或引用列表,或引用表)在机器资源方面效率很低。这是因为:该引用计数在每次非唯一数据块作为要存储的新数据流的一部分而被接收时,以及每当删除数据块时(例如,每当涉及该数据块的数据流被删除时)都被更新。
因此,在各实施例中,被最多使用的数据块(具有最高引用计数的块)被标识并被镜像(创建第二副本)以使得在发生破坏时(坏的存储扇区等),在访问该数据块时可使用该第二副本。以此方式,可减少在出现被破坏的数据块时对被损坏的数据流的暴露。各实施例随着所存储的数据的不断增加的量而缩放,在机器资源方面消耗很少,并且不需要维护对每个数据块的引用计数,这在缩放和资源利用率方面有助于块存储。
在一实施例中,提供冗余数据块来改善存储可靠性可以通过标识被最多引用的数据块的某一前百分比(例如,1%等)中的数据块和/或具有比阈值大的引用数量的数据块来执行。备份副本可被存储在备份块容器或其他存储位置中。例如,图25示出根据一示例实施例的用于备份块容器中的数据块的流程图2500。在一实施例中,流程图2500可由图1的块存储接口116执行。基于有关流程图2500的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图2500如下。
在流程图2500的步骤2502中,接收数据块以存储在块容器中。例如,参考图1,块存储接口116可接收数据块以存储在块存储118中的块容器中。
在步骤2504中,确定所接收的数据块是否是“热点”(被高度引用的数据块)并且尚未被复制以进行备份。热点数据块可被定义成被包括在所有存在的块容器中的前预定百分比的最多被引用的数据块中,或具有大于预定引用阈值的引用数量,或两者的数据块。在一实施例中,块存储接口116可被配置成确定所接收的数据块是否是可希望被存储在备份容器中并且尚未存储在备份容器中的高度被引用的数据块。在一实施例中,可希望被存储在备份容器中的高度被引用的数据块的标准包括该数据块在所有存在的块容器中的最多被引用的数据块的前预定百分比中,和/或具有大于预定引用阈值的引用数量。例如,如果在最多被引用方面数据块被分类在所有存在的块容器中存储的数据块的前1%、5%、10%或前他前百分比中,则可确定该数据块为高度被引用的。作为附加或替代的,如果数据块具有大于预定阈值的引用数量(通过流映射),诸如10次引用、50次引用、100次引用或其他阈值引用数量,则可确定该数据块为高度被引用的。
在步骤2506中,如果确定所接收的数据块是热点并且还没有被复制以进行备份,则所接收的数据块的备份副本被存储在备份容器中。如果确定所接收的数据块是高度被引用的,则该数据块可被复制,且该数据块的副本可被存储在诸如备份块容器等备份存储中。如果数据块的第一、主副本变得丢失或以其他方式被破坏,则可使用备份存储中的数据块的副本。
图26A和26B示出了根据一示例实施例的用于执行流程图2500的过程。例如,图26A和26B示出了根据一示例实施例的用于备份高度被引用的数据块的流程图2600。在一实施例中,流程图2600可由块存储接口116执行。参考图27描述流程图2600如下。图27示出了根据一示例实施例的与流容器302、块容器304和备份容器2704通信以备份被频繁引用的数据块的备份存储模块2702的框图。如图27中所示,备份存储模块2702包括引用处理模块2706、块存储器模块2708、和重新合并模块2710。为了便于描绘,图27中示出了单个块容器304。然而,在各实施例中,在包含图27的块容器304的块存储中可存在任意数量的块容器,并且所有存在的块容器可与块容器304一起被处理。而且,在各实施例中,可存在任何数量的备份容器2704。而且,在各实施例中,可存在任何数量的流容器302。基于有关流程图2600的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图2600如下。
如图26A所示,流程图2600开始于步骤2602。在步骤2602中,确定所接收的数据块是否是存储在任何块容器中的数据块的重复。例如,如图27中所示,引用处理模块2706接收所接收的数据块2714。数据块2714是被接收以存储在块容器304中的数据块。例如,数据块2714可以是要存储的数据流的多个数据块中的一个数据块。因为块容器304被包括在以去重复方式存储数据块的块存储中,所以引用处理模块2706确定所接收的数据块2714是否是已经存储在块容器304中的数据块322的重复。例如,数据块2714可以在指示数据块2714是否已存储在块容器中的存储请求中接收,并且引用处理模块2706可基于该存储请求来确定数据块2714是否具有存储在块容器304中的重复。替代地,引用处理模块2706可通过生成数据块2714的散列,并将所生成的散列与散列索引2326(当存在散列索引2326时)中存储的散列进行比较来确定数据块2714是否具有存储在块容器304中的重复。散列索引2326存储块容器304中存储的各数据块322中的每一个数据块的散列,并因此如果数据块2714的散列与散列索引2326中的散列相匹配,则数据块2714是块容器304中存储的数据块的重复。如果数据块2714是重复,则流程2600的操作前进至步骤2604。如果数据块2714不是块容器304中存储的数据块的重复,则流程2600的操作前进至步骤2610。注意,步骤2602是可任选的。在各实施例中,可跳过步骤2602,而操作可改为进行至步骤2604。
在步骤2604中,确定所接收的数据块在引用计数表中是否有条目。例如,如图27所示,存在引用计数表2712。引用计数表2712可被维护在存储器中。引用计数表2712被配置成存储关于该块存储的任何块容器304中所存储的数据块322的一部分数据块的条目。引用计数表中的条目的数量至少与所有块容器中的热点的数量相同。热点的数量取决于各种标准和原始数据大小。例如,如果热点数据块被定义为被引用100次或更多的数据块,则热点的最大数量是原始数据大小除以100然后再除以平均数据块大小。如果热点块被定义为被最多引用的块的前1%,则热点的最大数量是所有块容器中的唯一数据块的数量除以100。为了减少重新合并的数量(例如,如下所述的),在一实施例中,可将该引用计数表的大小设定为是所有块容器中的热点的估计数量的若干倍。例如,如果热点块被定义为被最多引用的块的前1%,则引用计数表2712可维护关于该块存储的所有块容器304的数据块322的约2%的数据块的条目。引用计数表2712的一部分维护关于被高度引用的数据块322的当前被跟踪的/已知的前预定百分比(例如,1%)的数据块的条目,其中每个条目包括引用计数。引用计数表2712的剩余部分被用于跟踪所接收的数据块的确切引用计数或一些所接收的数据块的估计引用计数。因此,引用计数表2712跟踪关于块容器304的数据块322的总数量的一部分的引用计数,而不同于跟踪所有所存储的数据块的引用计数的一些当前使用的技术。
在一实施例中,引用计数表2712的每个条目或记录可包括用于相应的所跟踪的数据块322的以下字段(以任何次序):
第一字段:数据块标识符(例如,图13的数据块标识符1300),
第二字段:引用计数(例如,确切计数值或预期计数值),
第三字段:该引用计数是否是确切值的指示(例如,真/假),以及
第四字段:该数据块是否被复制的指示(例如,真/假)。
只有第一、第二和第四字段必须存在,而第三字段是可选的。在没有第三字段的情况下,认为所有引用计数是非确切的。注意,数据块标识符可以是唯一标识数据块或流映射块的任何值,如图13中所示的数据块标识符1300的结构、自动增量的数字、随机生成的全局唯一ID(GUID)等。引用处理模块2706可以通过将数据块2714的数据块标识符(例如,与数据块2714一起接收的、从散列索引2326获得的等等)与引用计数表2712中的各条目的数据块标识符进行比较来确定所接收的数据块2714是否在引用计数表中有条目,并且如果出现匹配,则数据块2714的条目是存在的。
如果所接收的数据块2714在引用计数表2712中具有条目,则操作从步骤2604前进至步骤2606。如果所接收的数据块2714在引用计数表2712中不具有条目,则操作从步骤2604前进至步骤2608。
在步骤2606中,在该引用计数表中的该所接收的数据块的条目中将引用计数值增加。在步骤2606的情况中,其中数据块2714是块容器304中的数据块322的重复,且在引用计数表2712中存在关于数据块2714的条目,则数据块2714在引用计数表2712中的条目中的引用计数被引用处理模块2706增加,或者在各实施例中以不同于被增量的其他方式来修改。例如,该引用计数可增1以指示接收到(例如通过被存储的包括所接收的数据块2714的新数据流)对(存储在块容器304中的)数据块2714的另外的引用。操作从图26A中的步骤2606前进至图26B中的步骤2612。
在步骤2608中,关于所接收的数据块的条目被添加到该引用计数表中。在步骤2608的情况中,其中如果不跳过步骤2602则数据块2714是块容器304中的数据块322的重复(或者如果跳过步骤2602则可以是或可以不是块容器中的数据块322的重复),并且在引用计数表2712中不存在关于数据块2714的条目,由引用处理模块2706向引用计数表2712为数据块2714添加新条目。在此情况中,尽管数据块2714是重复,数据块2714没有足够多的引用而被认为是高度被引用的数据块,如数据块2714在引用计数表2712中没有条目所证实的那样。被添加到引用计数表2712的数据块2714的新条目包括数据块2714的数据块标识符、数据块2714的引用计数值(其为初始引用计数值(例如,引用计数值1)和预期计数值(例如,“Ce”)的和)、数据块2714的引用计数值不是确切值的指示、以及数据块2714未在备份容器2704中被复制的指示。
如果不跳过步骤2602,则预期计数值Ce是关于具有存储在块容器304中的重复的数据块的用于引用计数表2712的新条目的预期引用计数值。因为该数据块具有已经存储在块容器304中的重复,则它们的确切引用计数值不是已知的,并且因此使用预期计数值Ce来提供估计引用计数值。可以逐应用地选择预期计数值Ce的值。预期计数值Ce的上界可以是从引用计数表2712丢弃的数据块中的最大引用计数(例如,“Cd”)。在一实施例中,可将预期计数值Ce设定为1以避免不必要地复制数据块。如果跳过了步骤2602,则Ce的下界是0而不是1。操作从图26A中的步骤2608前进至图26B中的步骤2612。
在步骤2610中,关于所接收的数据块的条目被添加到该引用计数表中。在步骤2610的情况中,其中数据块2714不是块容器304中的数据块322的重复,并且因此是块容器304中的新数据块,则关于数据块的条目将不存在于引用计数表2712中。因此,关于数据块2714的条目可由引用处理模块2706添加到引用计数表2712。关于数据块2714的条目包括数据块2714的数据块标识符、所接收的数据块的初始引用计数值(例如,引用计数值1)、数据块2714的引用计数值是确切值的指示、以及数据块2714未在备份容器2704中被复制的指示。在根据步骤2610为数据块2714添加新条目之后,数据块2714的处理完成。
例如,参考图27中所示的块容器304和备份容器2704,引用计数表2712可包括在下面的表1中所示的示例信息(为说明的目的而提供)。
关于表1中的第一个条目,数据块2714可能已作为数据块322b的重复而被接收,而关于数据块2714/322b的条目可能已经存在于表1中。在此情况中,流程图2600的步骤2606可能已经被执行,从而将数据块2714/322b的引用计数值从14增加到了15。如关于数据块2714/322b的条目中所示,该引用计数值被指示为确切的,且数据块2714/322b被指示为已在备份容器2704中被复制。
关于表1中的第二个条目,数据块2714可能已经作为新数据块被接收到块容器304中,并作为数据块322h被存储在块容器304中。在此情况中,流程图2600的步骤2610可能已经被执行,从而为数据块2714/322h向表1添加一条目。如表1中所示,数据块2714/322h的新条目包括数据块322h的数据块标识符、初始引用计数值1、该引用计数值是确切的的指示、以及数据块2714/322h没有在备份容器2704中被复制的指示。
关于表1中的第三个条目,数据块2714可能已作为数据块322c的重复而被接收,而数据块2714/322b的条目可能并非已存在于表1中。在此情况中,流程图2600的步骤2608可能已经被执行,从而为数据块2714/322c向表1添加一条目。如表1中所示,关于数据块2714/322c的新条目包括数据块322c的数据块标识符、初始引用计数值1加上示例预期计数值1(和为2)、该引用计数值不是确切的的指示、以及数据块2714/322c没有在备份容器2704中被复制的指示。
在步骤2612中,确定所接收的数据块是否在备份容器中被复制。例如,参考图27,引用处理模块2706可确定数据块2714是否在备份容器2704中被复制。引用处理模块2706可以各种方式来做出确定。例如,如果在步骤2602中确定数据块2714不是块容器304的数据块322的重复,或者在步骤2604中确定在引用计数表2712中没有条目,引用处理模块2706可确定数据块2714没有在备份容器2704中被复制。如果关于数据块2714的条目存在于引用计数表2712中,则引用处理模块2706可访问引用计数表2712的指示该数据块是否被复制的字段(如第四字段)以做出该确定。如果确定数据块2714没有在备份容器2704中被复制,则操作从步骤2612前进到步骤2614。如果确定数据块2714在备份容器2704中被复制,则对数据块2714的处理完成。
在步骤2614中,确定所接收的数据块是否具有大于已复制的数据块的最小引用计数值的引用计数值,和/或所接收的数据块的引用计数值是否大于预定阈值。在一实施例中,如果该数据块具有大于当前在备份容器2704中被复制的数据块的最小引用计数Cz的引用计数,则认为该数据块具有在各数据块的前1%或其他前百分比的引用数量。因此,引用处理模块2706可被配置成将数据块2714的引用计数值(来自引用计数表2712中的相应条目)与最小引用计数Cz进行比较。
在一实施例中,可维护预定阈值Y,该预定阈值Y是数据块必须超出以便被备份复制的最小阈值引用计数值。预定阈值Y可具有任何适当值,如10次引用、20次引用或其他值。因此,在一实施例中,引用处理模块2706可被配置成还将数据块2714的引用计数值与预定阈值Y进行比较。
在一实施例中,如果数据块2714的引用计数值大于最小引用计数Cz和/或大于预定阈值Y,则操作从步骤2614前进至步骤2616。如果数据块2714的引用计数值小于最小引用计数Cz和/或小于预定阈值Y,则对数据块2714的处理完成。
在步骤2616中,所接收的数据块的备份副本被存储在该备份容器中。例如,如图27所示,引用处理模块2706可生成存储指令2716,该存储指令2716指示数据块2714的备份副本应当被存储。如图27所示,块存储器模块2708接收存储指令2716。块存储器模块2708为引用处理模块2706提供与存储(如块容器304和备份容器2704)的接口。如图27所示,块存储器模块2708接收数据块2714。作为存储指令2716中所包括的备份复制请求的结果,块存储器模块2708将数据块2714存储在备份容器2704中。操作从步骤2616行进至步骤2618。
注意,如果在步骤2602中确定数据块2714是新数据块(数据块2714的重复并非已经存储在块容器304中),则引用处理模块2706可生成存储指令2716以指示块存储器模块2708将数据块2714存储在块容器304中。
在步骤2618中,修改所接收的数据块在引用计数表中的条目以包括所接收的数据块在该备份容器中被复制的指示。引用处理模块2706可修改数据块2714在引用计数表2712中的条目(例如,第四字段)来指示数据块2714在备份容器2704中被复制(在步骤2616中被复制)。对数据块2714的处理完成。
对于任何数量的所接收的数据块,可重复流程图2600。例如,在一实施例中,可重复流程图2600直到引用计数表2712被填满(例如,达到预定大小)。在该点处和/或在其他检查点处,可重新合并引用计数表2712以减小其大小,并确保被最高度引用的数据块(例如,前1%)具有被维护在引用计数表2712中的条目。
例如,在一实施例中,可执行图28所示的过程。图28示出了根据一示例实施例的提供用于重新合并引用计数表的过程的流程图2800。例如,图27中所示的重新合并模块2710可根据流程图2800操作。参考图27描述流程图2800如下。基于有关流程图2800的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图2800如下。
如图28所示,流程图2800开始于步骤2802。在步骤2802中,确定该引用计数表是否已达到预定大小。如上所述,引用计数表的大小必须足够大到为所有块容器中的每个热点存储条目。热点的数量取决于标准和原始数据大小。为了减少重新合并的数量(如下所述),各实施例可将该引用计数表的大小设定为是所有块容器中的热点的估计数量的若干倍。例如,在一实施例中,如果热点块被定义为被最多引用的块的前1%,则热点的最大数量是所有块容器中的数据块的数量除以100(即,所有数据块的1%)。而且,如果重新合并模块2710预期块存储在块容器中存储1百万个数据块,它可以确定引用计数表2712的大小并可将所确定的大小与预定阈值大小(如数据块的总数量的2%)进行比较。该预定阈值大小可被计算为:1百万数据块×0.02=20000个条目。因此,在这样的示例中,重新合并模块2710可将引用计数表2712的所确定的大小(以条目为单位)与20000个条目的预定阈值进行比较。在另一实施例中,可以其他方式确定该预定大小。
如果确定引用计数表2712已达到预定大小,则操作从步骤2802前进到步骤2804。如果确定引用计数表2712还没有达到该预定大小,操作从流程图2800退出。
在步骤2804中,重新合并该引用计数表以对于引用计数不是确切的的所有条目确定确切引用计数值。在一实施例中,通过移除不是被高度引用的数据块的一些或全部条目,引用计数表2712可被重新合并模块2710重新合并以减小其大小。操作从步骤2804行进至步骤2806。
在步骤2806中,对于该备份容器中不存在并且在重新合并后的引用计数表中具有条目的数据块,将数据块的备份副本存储在该备份容器中。在一实施例中,重新合并模块2710可分析在步骤2804中生成的重新合并后的引用计数表2712。合并模块2710可对于没有已存储在备份容器2704中的备份副本的在重新合并后的引用计数表2712中有条目的任何数据块322,在备份容器2704中存储备份副本。
而且,尽管在图28中未示出,然而重新合并模块2710可标记不再满足复制标准的数据块来删除(例如,在数据块元数据中、在如图23的删除日志2312等删除日志中存储删除指示等等)以从备份容器2704中删除所标记的数据块。而且,当前已在备份容器2704中被复制的数据块的最小引用计数Cz的新值可由重新合并模块2710在此点处确定。
注意,可以各种方式执行流程图2800的步骤2804的重新合并过程。根据该重新合并过程,旨在将被高度引用的数据块/热点包括在引用计数表2712中。然而,这些数据块中的一些数据块的确切的引用计数值是未知的,因为引用计数表2712不跟踪所有数据块322的引用计数值。因此,在重新合并过程期间,确定确切的引用计数值。而且,注意,数据块可能在重新合并之前成为热点,但是当前技术可能直到重新合并才检测热点数据块。在一些实施例中,可能希望一旦数据块变成热点就复制该数据块。这可以以各种方式处理。在一个实施例中,在步骤2804中将Ce设定为从引用计数表中移除的条目的最大引用计数。替代地,如果一热点块被定义为具有大于预定阈值的引用数量(通过流映射)的数据块,则可将Ce设为1,可创建备份副本,并且如果引用计数达到该预定阈值除以2,则可将该数据库维护在引用计数表2712中块。
例如,图29示出了根据一示例实施例的提供重新合并过程的流程图2900。例如,图27中所示的重新合并模块2710可根据流程图2900操作以重新合并引用计数表2712。参考图27描述流程图2900如下。基于有关流程图2900的讨论,其他结构及操作的实施例对于相关领域的技术人员将是显而易见的。描述流程图2900如下。
如图29所示,流程图2900开始于步骤2902。在步骤2902中,生成第二引用计数表,该第二引用计数表包括第一引用计数表中的关于数据块的条目的子集。例如,第二引用计数表(例如,引用计数表2712b)可由重新合并模块2710生成。第二引用计数表包括与引用计数表2712相同的字段,并且包括引用计数表2712的条目的子集。条目的子集包括引用计数表2712中指示其引用计数值不是确切值(例如,如上所述,在其第三字段中)的数据块的条目。在各实施例中,如果跳过了步骤2602且省略了第三字段,则第二引用计数表可包括第一引用计数表的关于数据块的所有条目。
在步骤2904中,可将第二引用计数表中的所有条目的引用计数值设为0。例如,重新合并模块2710可将第二引用计数表的所有引用计数值(例如,第二字段)设为0。
在步骤2906中,第二引用计数表中的关于每个数据块的引用计数值在每次该数据块被非已删除流映射引用时被增量。重新合并模块2710可扫描该块存储的所有流容器302的流映射块2324来确定哪些流映射未被删除(例如,不包括删除指示、未列入删除日志等的流映射块)。对于被确定为未被删除的流映射块所引用的数据块,重新合并模块2710可在第二引用计数表中增量其引用计数值(例如,第二字段)。在每次数据块被流映射块引用时,该引用计数值被增量,以使流映射对该数据块的引用的总数量被计数。通过将流映射块排列在一个或多个专用流容器中,在各实施例中,可高效扫描所有流映射块,因为所有流映射块的总大小与原始的(未经优化的)数据的总大小相比小得多。该比值大概是流映射条目的大小与数据块的平均大小的比值。在流映射条目大小为64字节而平均数据块大小为64KB的实施例中,所有流映射块的总大小与原始数据的总大小的比值是1比1000。同样,可使用大部分顺序的I/O来扫描所有流映射块。注意,当前示例并不假定数据块是如何被存储在块存储中的。数据块可被存储在如上所述的数据容器中,或者可被存储在任何其他数据结构中。对为块存储中的每个数据块维护的数据流的引用的计数/列表/表不必被维护。此外,数据块标识符和流映射块标识符可具有唯一标识数据块和流映射块的任何值,如图13中示出的数据块标识符1300、自动增量的数字、随机生成的全局唯一ID(GUID)等。而且,本技术只利用每个流映射条目400的数据块标识符。其他字段(例如,数据流偏移、位置指示符)是可任选的。
在步骤2908中,对于第一引用计数表中的每个条目,用第二引用计数表中的相应引用计数值来取代第一引用计数表中的引用计数值。重新合并模块2710可将该引用计数值(例如,第二字段)从第二引用计数表复制到引用计数表2712中的相应条目已取代其引用计数值。
在步骤2910中,在第一引用计数表中的每个条目中,该相应引用计数值被指示为确切值。重新合并模块2710可在引用计数表2712的每个条目中提供引用计数是确切值的的指示(例如,可在每个条目的第三字段中输入“真”)。
在步骤2912中,确定第一引用计数表中不是热点的条目。在一实施例中,重新合并模块2710可将引用计数表2712中的所有条目的引用计数值(例如,第二字段)进行比较以确定哪些条目具有在前预定百分比(例如,1%)中的引用计数值和/或具有大于预定引用阈值(例如,100)的引用数量。所确定的条目对应于热点,所述热点在备份容器2704中具有备份副本。例如,如果这些被高度引用的数据块中的任何一个在备份容器2704中没有备份副本,则根据如上所述的步骤2806(图28)来制作备份副本。
在步骤2914中,可丢弃第一引用计数表中的条目中被确定为不是热点的一些或全部条目。对于被确定为不是被高度引用的是每个数据块,重新合并模块2710可从引用计数表2712删除条目。
如此,被认为是被高度引用的数据块322的备份副本被存储在备份容器2704中。在块容器304中的数据块322的主副本被破坏或以其他方式丢失的情况下(例如,特定数据块被破坏、数据容器304丢失或被部分或全部破坏,等等),可访问这些备份副本。例如,在一实施例中,块存储可在相应流映射块2324中存储的数据块元数据中维护所有数据块的校验和。当接收到对数据块的请求,并且通过图1的块存储接口116来在块存储118中访问该数据块时,块存储接口116可基于在块容器304中被访问的数据块的版本来计算所请求的数据块的校验和。如果所计算的校验和与所请求的数据块的所存储的校验和(例如,存储在数据块元数据中)不匹配,则检测到块容器304中的数据块的破坏。如果被破坏的数据块在备份容器2704中有备份副本,则块存储接口116可访问备份容器2704中的该备份副本并响应于该请求而返回该备份副本。此外,块存储接口116可用在备份容器2704中存储的所请求的数据块的备份副本来取代块容器304中的被破坏的数据块。
III.示例计算设备实施例
数据去重复模块104、维护模块106、数据流API 110、块维护API 112、数据访问API 114、块存储接口116、数据流解析器602、数据块存储管理器604、元数据生成器606、流映射生成器608、元数据收集器802、位置指示符生成器804、再水合模块1102、重定向表修改器1702、世代增量器1704、数据流组装器1902、世代检查器1906、数据块取回器1908、垃圾收集器模块2302、流映射块扫描器2304、已删除数据块指示器2306、存储空间回收器2308、布隆过滤器生成器2314、数据块复制器2316、合并日志生成器2318、重定向表填充器2320、备份存储模块2702、引用处理模块2706、块存储器模块2708、以及重新合并模块2710可以用硬件、软件、固件或其任何组合来实现。例如,数据去重复模块104、维护模块106、数据流API 110、块维护API 112、数据访问API 114、块存储接口116、数据流解析器602、数据块存储管理器604、元数据生成器606、流映射生成器608、元数据收集器802、位置指示符生成器804、再水合模块1102、重定向表修改器1702、世代增量器1704、数据流组装器1902、世代检查器1906、数据块取回器1908、垃圾收集器模块2302、流映射块扫描器2304、已删除数据块指示器2306、存储空间回收器2308、布隆过滤器生成器2314、数据块复制器2316、合并日志生成器2318、重定向表填充器2320、备份存储模块2702、引用处理模块2706、块存储器模块2708、和/或重新合并模块2710可以作为被配置成在一个或多个处理器中执行的计算机程序代码来实现。替代地,数据去重复模块104、维护模块106、数据流API 110、块维护API 112、数据访问API 114、块存储接口116、数据流解析器602、数据块存储管理器604、元数据生成器606、流映射生成器608、元数据收集器802、位置指示符生成器804、再水合模块1102、重定向表修改器1702、世代增量器1704、数据流组装器1902、世代检查器1906、数据块取回器1908、垃圾收集器模块2302、流映射块扫描器2304、已删除数据块指示器2306、存储空间回收器2308、布隆过滤器生成器2314、数据块复制器2316、合并日志生成器2318、重定向表填充器2320、备份存储模块2702、引用处理模块2706、块存储器模块2708、和/或重新合并模块2710可以作为硬件逻辑/电路来实现。
图30描绘了其中可以实现本发明的各实施例的计算机3000的示例性实现。例如,存储系统102和/或其任何部分可被实现在类似于计算机3000的一个或多个计算机系统中,这些计算机系统包括计算机3000的一个或多个特征和/或各另外的特征。计算机3000可以是例如常规个人计算机、移动计算机或工作站形式的通用计算设备,或者,计算机3000可以是专用计算设备。此处所提供的对计算机3000的描述只是为了说明,并不是限制性的。如相关领域的技术人员所知道的,本发明的各实施例可以在其他类型的计算机系统中实现。
如图30所示,计算机3000包括处理单元3002、系统存储器3004,以及将包括系统存储器3004在内的各种系统组件耦合到处理单元3002的总线3006。系统总线3006表示若干类型的总线结构中的任何一种总线结构的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口,以及使用各种总线体系结构中的任何一种的处理器或局部总线。系统存储器3004包括只读存储器(ROM)3008和随机存取存储器(RAM)3010。基本输入/输出系统3012(BIOS)存储在ROM 3008中。
计算机3000还具有一个或多个以下驱动器:用于读写硬盘的硬盘驱动器3014、用于读或写可移动磁盘3018的磁盘驱动器3016、以及用于读或写诸如CD ROM、DVD ROM或其他光介质之类的可移动光盘3022的光盘驱动器3020。硬盘驱动器3014、磁盘驱动器3016,以及光驱动器3020分别通过硬盘驱动器接口3024、磁盘驱动器接口3026,以及光学驱动器接口3028连接到总线3006。驱动器以及它们相关联的计算机可读介质为计算机提供了对计算机可读指令、数据结构、程序模块,及其他数据的非易失存储器。虽然描述了硬盘、可移动磁盘和可移动光盘,但是,也可以使用诸如闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等之类的其他类型的计算机可读存储介质来存储数据。
数个程序模块可被存储在硬盘、磁盘、光盘、ROM,或RAM上。这些程序包括操作系统3030、一个或多个应用程序3032、其他程序模块3034,以及程序数据3036。应用程序3032或程序模块3034可包括例如用于实现以下各项的计算机程序逻辑:数据去重复模块104、维护模块106、数据流API 110、块维护API 112、数据访问API 114、块存储接口116、数据流解析器602、数据块存储管理器604、元数据生成器606、流映射生成器608、元数据收集器802、位置指示符生成器804、再水合模块1102、重定向表修改器1702、世代增量器1704、数据流组装器1902、世代检查器1906、数据块取回器1908、垃圾收集器模块2302、流映射块扫描器2304、已删除数据块指示器2306、存储空间回收器2308、布隆过滤器生成器2314、数据块复制器2316、合并日志生成器2318、重定向表填充器2320、备份存储模块2702、引用处理模块2706、块存储器模块2708、重新合并模块2710、流程图700、流程图900、流程图1600、流程图1800、流程图2000、流程图2100、流程图2200、流程图2500、流程图2600、流程图2800、流程图2900(包括流程图700、900、1600、1800、2000、2100、2200、2500、2600、2800和2900的任何步骤)和/或本文所述的其他实施例。
用户可以通过诸如键盘3038和定点设备3040之类的输入设备向计算机3000中输入命令和信息。其他输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些及其他输入设备常常通过耦合到总线3006的串行端口接口3042连接到处理单元3002,但是,也可以通过其他接口,诸如并行端口、游戏端口、通用串行总线(USB)端口,来进行连接。
显示设备3044也通过诸如视频适配器3046之类的接口连接到总线3006。除了监视器之外,计算机3000还可包括其他外围输出设备(未示出),如扬声器和打印机。
计算机3000通过适配器或网络接口3050、调制解调器3052、或用于通过网络建立通信的其他手段连接到网络3048(例如,因特网)。调制解调器3052(可以是内置的或外置的)通过串行端口接口3042连接到总线3006。
如此处所用的,术语“计算机程序介质”、“计算机可读介质”以及“计算机可读存储介质”被用于泛指介质,诸如与硬盘驱动器3014相关联的硬盘、可移动磁盘3018、可移动光盘3022,以及其他介质,诸如闪存卡、数字视频盘、随机读取存储器(RAM)、只读存储器(ROM)等。这些计算机可读存储介质与通信介质相区别且不重叠。通信介质通常在诸如载波等已调制数据信号中承载计算机可读指令、数据结构、程序模块或者其它数据。术语“已调制数据信号”是指具有以在信号中编码信息的方式被设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括无线介质,如声学、RF、红外和其它无线介质。实施例也针对这些通信介质。
如上文所指示的,计算机程序和模块(包括应用程序3032及其他程序模块3034)可被存储在硬盘、磁盘、光盘、ROM或RAM上。这样的计算机程序也可以通过网络接口3050或串行端口接口3042来接收。这样的计算机程序,当由应用执行或加载时,使得计算机3000能实现此处所讨论的本发明的特征。相应地,这样的计算机程序表示计算机3000的控制器。
本发明还涉及包括存储在任何计算机可使用介质上的软件的计算机程序产品。这样的软件,当在一个或多个数据处理设备中执行时,使数据处理设备如此处所描述的那样操作。本发明的各实施例使用现在已知的或将来已知的任何计算机可使用或计算机可读介质。计算机可读介质的示例包括,但不仅限于,诸如RAM、硬盘驱动器、软盘、CD ROM、DVD ROM、zip磁盘、磁带、磁存储设备、光存储设备、MEM(存储器)、基于纳米技术的存储设备等等之类的存储设备。
VI.结论
尽管上文描述了本发明的各实施例,但是,应该理解,它们只是作为示例来呈现的,而不作为限制。那些精通有关技术的人员将理解,在不偏离如所附权利要求书所定义的本发明的精神和范围的情况下,可以在形式和细节方面进行各种修改。因此,本发明的范围不应该受到上述示例性实施例的任一个的限制,而只应根据下面的权利要求和它们的等效内容进行定义。

Claims (23)

1.一种用于对块存储进行垃圾收集的方法(2000),所述块存储包括被存储为多个数据块的数据,所述多个数据块包括流映射块,每个流映射块与相应的数据流的流映射相对应并且引用被包括在所述相应的数据流中的、存储在所述块存储的一个或多个块容器中的数据块,所述方法包括:
基于只由被指示为已删除的流映射块引用来标识(2002)存储在所述一个或多个块容器中的未使用的数据块,其中每一被指示为已删除的流映射块均对应于已删除的数据流;
将所标识的数据块指示(2004)为已删除;以及
回收(2006)包含被指示为已删除的数据块的一个或多个块容器中的存储空间。
2.如权利要求1所述的方法,其特征在于,每个流映射块通过相应的数据块标识符来引用存储在所述一个或多个块容器中的数据块,所述标识包括:
扫描多个流映射块来确定未被指示为已删除的任何流映射块;
将由被指示为未删除的每个流映射块引用的数据块标识符包括在一数据结构中;
扫描所述多个流映射块来确定被指示为已删除的任何流映射块;以及
确定由被确定为被指示为已删除的流映射块引用的、未包括在所述数据结构中的任何数据块标识符。
3.如权利要求2所述的方法,其特征在于,所述指示包括:
将与被确定为由被指示为已删除的流映射块引用并且未包括在所述数据结构中的数据块标识符相对应的数据块指示为已删除。
4.如权利要求1所述的方法,其特征在于,每个流映射块通过相应的数据块标识符来引用存储在所述一个或多个块容器中的数据块,所述标识包括:
扫描至少一个删除日志来确定未被指示为已删除的任何流映射块;
将由被指示为未删除的每个流映射块引用的数据块标识符包括在一数据结构中;
生成将一个或多个流容器的多个流映射块、被指示为未删除的流映射块、以及其他流映射块指示为已删除的删除位图;
删除经扫描的至少一个删除日志;
扫描所述删除位图来确定被指示为已删除的任何流映射块;以及
确定由被确定为被指示为已删除的流映射块引用的、未包括在所述数据结构中的任何数据块标识符。
5.如权利要求1所述的方法,其特征在于,所述回收包括:
将所述块容器中未被指示为已删除的每个数据块复制到新容器;以及
填充所述新容器的重定向表来针对所复制的每个数据块将所述块容器中的第一块标识符映射到所述新容器中的第二块标识符。
6.如权利要求5所述的方法,其特征在于,所述块存储包括存储多个散列索引条目的散列索引,其中所述散列索引的每个散列索引条目将数据块标识符映射到相应数据块的散列,其中所述回收还包括:
通过用从所述重定向表和数据块的块头部获得的新数据块标识符来取代散列条目中的数据块标识符,来修改所述散列索引的至少一个条目。
7.如权利要求5所述的方法,其特征在于,还包括:
对于所述块存储的每个流映射块,
通过存储在所述流映射块中的关于一个或多个所引用的数据块的相应数据块标识符来在所述块存储的一个或多个块容器的一个或多个重定向表中定位所述一个或多个所引用的数据块;以及
对于定位在所述一个或多个块容器的所述一个或多个重定向表中的所述一个或多个所引用的数据块中的每一个,用所述一个或多个块容器的所述一个或多个重定向表中的相应的新数据块标识符来在所述流映射块中追加所述数据块标识符。
8.如权利要求7所述的方法,其特征在于,所述追加包括:
在所述块容器中的所述流映射块中原地追加数据块标识符。
9.如权利要求7所述的方法,其特征在于,所述追加包括:
生成包括所述流映射块的第二块容器;以及
在所述第二块容器中的所述流映射块中追加数据块标识符,所述第二块容器是流映射容器。
10.一种用于对块存储进行垃圾收集的系统,所述块存储包括被存储为多个数据块的数据,所述多个数据块包括流映射块,每个流映射块与相应的数据流的流映射相对应并且引用被包括在所述相应的数据流中的、存储在所述块存储的一个或多个块容器中的数据块,包括:
用于基于只由被指示为已删除的流映射块引用来标识存储在所述一个或多个块容器中的未使用的数据块的装置,其中每一被指示为已删除的流映射块均对应于已删除的数据流;
用于将所标识的数据块指示为已删除的装置;以及
用于回收包含被指示为已删除的数据块的一个或多个块容器中的存储空间的装置。
11.如权利要求10所述的系统,其特征在于,每个流映射块通过相应的数据块标识符来引用存储在所述一个或多个块容器中的数据块,所述用于标识的装置包括:
用于扫描多个流映射块来确定未被指示为已删除的任何流映射块的装置;
用于将由被指示为未删除的每个流映射块引用的数据块标识符包括在一数据结构中的装置;
用于扫描所述多个流映射块来确定被指示为已删除的任何流映射块的装置;以及
用于确定由被确定为被指示为已删除的流映射块引用的、未包括在所述数据结构中的任何数据块标识符的装置。
12.如权利要求11所述的系统,其特征在于,所述用于指示的装置包括:
用于将与被确定为由被指示为已删除的流映射块引用并且未包括在所述数据结构中的数据块标识符相对应的数据块指示为已删除的装置。
13.如权利要求10所述的系统,其特征在于,每个流映射块通过相应的数据块标识符来引用存储在所述一个或多个块容器中的数据块,所述用于标识的装置包括:
用于扫描至少一个删除日志来确定未被指示为已删除的任何流映射块的装置;
用于将由被指示为未删除的每个流映射块引用的数据块标识符包括在一数据结构中的装置;
用于生成将一个或多个流容器的多个流映射块、被指示为未删除的流映射块、以及其他流映射块指示为已删除的删除位图的装置;
用于删除经扫描的至少一个删除日志的装置;
用于扫描所述删除位图来确定被指示为已删除的任何流映射块的装置;以及
用于确定由被确定为被指示为已删除的流映射块引用的、未包括在所述数据结构中的任何数据块标识符的装置。
14.如权利要求10所述的系统,其特征在于,所述用于回收的装置包括:
用于将所述块容器中未被指示为已删除的每个数据块复制到新容器的装置;以及
用于填充所述新容器的重定向表来针对所复制的每个数据块将所述块容器中的第一块标识符映射到所述新容器中的第二块标识符的装置。
15.如权利要求14所述的系统,其特征在于,所述块存储包括存储多个散列索引条目的散列索引,其中所述散列索引的每个散列索引条目将数据块标识符映射到相应数据块的散列,其中所述用于回收的装置还包括:
用于通过用从所述重定向表和数据块的块头部获得的新数据块标识符来取代散列条目中的数据块标识符,来修改所述散列索引的至少一个条目的装置。
16.如权利要求14所述的系统,其特征在于,还包括:
对于所述块存储的每个流映射块,
用于通过存储在所述流映射块中的关于一个或多个所引用的数据块的相应数据块标识符来在所述块存储的一个或多个块容器的一个或多个重定向表中定位所述一个或多个所引用的数据块的装置;以及
用于对于定位在所述一个或多个块容器的所述一个或多个重定向表中的所述一个或多个所引用的数据块中的每一个,用所述一个或多个块容器的所述一个或多个重定向表中的相应的新数据块标识符来在所述流映射块中追加所述数据块标识符的装置。
17.如权利要求16所述的系统,其特征在于,所述用于追加的装置包括:
用于在所述块容器中的所述流映射块中原地追加数据块标识符的装置。
18.如权利要求16所述的系统,其特征在于,所述用于追加的装置包括:
用于生成包括所述流映射块的第二块容器的装置;以及
用于在所述第二块容器中的所述流映射块中追加数据块标识符,所述第二块容器是流映射容器的装置。
19.一种用于对块存储进行垃圾收集的垃圾收集模块(2302),所述块存储包括被存储为多个数据块(322)的数据,所述多个数据块包括流映射块(2324),每个流映射块与相应的数据流的流映射相对应并且引用被包括在所述相应的数据流中的、存储在所述块存储的一个或多个块容器(304)中的数据块,所述垃圾收集模块(2302)包括:
被配置成基于只由被指示为已删除的流映射块(2324)引用来标识存储在所述一个或多个块容器(304)中的未使用的数据块的流映射块扫描器(2304),其中每一被指示为已删除的流映射块均对应于已删除的数据流;
被配置成将所标识的数据块指示为已删除(2334)的已删除数据块指示器(2306);以及
被配置成回收包含被指示为已删除(2334)的数据块的一个或多个块容器(304)中的存储空间的存储空间回收器(2308)。
20.如权利要求19所述的垃圾收集模块,其特征在于,每个流映射块通过相应的数据块标识符来引用存储在所述一个或多个块容器中的数据块,其中所述流映射块扫描器包括:
被配置成生成布隆过滤器的布隆过滤器生成器;
其中所述流映射块扫描器扫描多个流映射块来确定未被指示为已删除的任何流映射,将由被指示为未删除的每个流映射块引用的数据库块标识符包括在所述布隆过滤器中,扫描所述多个流映射块来确定被指示为已删除的任何流映射块,以及确定由被确定为被指示为已删除的流映射块引用的、未包括在所述布隆过滤器中的任何数据块标识符。
21.如权利要求19所述的垃圾收集模块,其特征在于,所述存储空间回收器包括:
将块容器中未被指示为已删除的每个数据块复制到新容器的数据块复制器;以及
填充所述新容器的重定向表来针对所复制的每个数据块将所述块容器中的第一块标识符映射到所述新容器中的第二块标识符的重定向表填充器。
22.如权利要求21所述的垃圾收集模块,其特征在于,所述块存储包括存储多个散列索引条目的散列索引,其中所述散列索引的每个散列索引条目将数据块标识符映射到相应的数据块的散列,其中所述存储空间回收器通过用从所述重定向表和数据块的头部获得的新数据块标识符取代散列条目中的数据块标识符来修改所述散列索引中的至少一个条目。
23.如权利要求22所述的垃圾收集模块,其特征在于,对于所述块存储中的每个流映射块,通过存储在所述流映射块中的关于一个或多个所引用的数据块的相应的数据块标识符来在所述块存储的一个或多个块容器的一个或多个重定向表中定位所述一个或多个所引用的数据块,并且对于定位在所述一个或多个块容器的所述一个或多个重定向表中的所述一个或多个所引用的数据块中的每一个,用所述一个或多个块容器的所述一个或多个重定向表中的相应的新数据块标识符来在所述流映射块中追加所述数据块标识符。
CN201110428343.4A 2010-12-17 2011-12-19 用于数据去重复块存储的垃圾收集和热点释放 Expired - Fee Related CN102567218B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/971,694 US20120159098A1 (en) 2010-12-17 2010-12-17 Garbage collection and hotspots relief for a data deduplication chunk store
US12/971,694 2010-12-17

Publications (2)

Publication Number Publication Date
CN102567218A CN102567218A (zh) 2012-07-11
CN102567218B true CN102567218B (zh) 2015-08-05

Family

ID=46235981

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110428343.4A Expired - Fee Related CN102567218B (zh) 2010-12-17 2011-12-19 用于数据去重复块存储的垃圾收集和热点释放

Country Status (4)

Country Link
US (1) US20120159098A1 (zh)
CN (1) CN102567218B (zh)
HK (1) HK1173514A1 (zh)
WO (1) WO2012083267A2 (zh)

Families Citing this family (126)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7840537B2 (en) 2006-12-22 2010-11-23 Commvault Systems, Inc. System and method for storing redundant information
US8401996B2 (en) 2009-03-30 2013-03-19 Commvault Systems, Inc. Storing a variable number of instances of data objects
US8578120B2 (en) 2009-05-22 2013-11-05 Commvault Systems, Inc. Block-level single instancing
JP2011154547A (ja) * 2010-01-27 2011-08-11 Toshiba Corp メモリ管理装置及びメモリ管理方法
WO2012045023A2 (en) 2010-09-30 2012-04-05 Commvault Systems, Inc. Archiving data objects using secondary copies
US10394757B2 (en) 2010-11-18 2019-08-27 Microsoft Technology Licensing, Llc Scalable chunk store for data deduplication
US20120158674A1 (en) * 2010-12-20 2012-06-21 Mark David Lillibridge Indexing for deduplication
US8458418B1 (en) * 2010-12-31 2013-06-04 Emc Corporation Replication of deduplicated data between multi-controller systems
US8904128B2 (en) * 2011-06-08 2014-12-02 Hewlett-Packard Development Company, L.P. Processing a request to restore deduplicated data
US8745095B2 (en) 2011-08-12 2014-06-03 Nexenta Systems, Inc. Systems and methods for scalable object storage
US8990171B2 (en) 2011-09-01 2015-03-24 Microsoft Corporation Optimization of a partially deduplicated file
US9069707B1 (en) 2011-11-03 2015-06-30 Permabit Technology Corp. Indexing deduplicated data
US9311250B2 (en) * 2011-12-19 2016-04-12 Intel Corporation Techniques for memory de-duplication in a virtual system
US8639669B1 (en) * 2011-12-22 2014-01-28 Emc Corporation Method and apparatus for determining optimal chunk sizes of a deduplicated storage system
US8712963B1 (en) 2011-12-22 2014-04-29 Emc Corporation Method and apparatus for content-aware resizing of data chunks for replication
US9052824B2 (en) 2012-01-26 2015-06-09 Upthere, Inc. Content addressable stores based on sibling groups
US8631209B2 (en) 2012-01-26 2014-01-14 Upthere, Inc. Reusable content addressable stores as building blocks for creating large scale storage infrastructures
WO2013119201A1 (en) * 2012-02-06 2013-08-15 Hewlett-Packard Development Company, L.P. De-duplication
US9020890B2 (en) 2012-03-30 2015-04-28 Commvault Systems, Inc. Smart archiving and data previewing for mobile devices
US9928210B1 (en) * 2012-04-30 2018-03-27 Veritas Technologies Llc Constrained backup image defragmentation optimization within deduplication system
US9454398B2 (en) * 2013-05-08 2016-09-27 Andrew John Hacker Enhanced data container with extensible characteristics and a system and method of processing and communication of same
US10462108B1 (en) 2012-05-08 2019-10-29 Andrew J. Hacker Enhanced data container with extensible characteristics and a system and method of processing and communication of same
US9489293B2 (en) * 2012-08-17 2016-11-08 Netapp, Inc. Techniques for opportunistic data storage
US9274839B2 (en) 2012-09-27 2016-03-01 Intel Corporation Techniques for dynamic physical memory partitioning
CN103019887B (zh) * 2012-12-12 2016-01-06 华为技术有限公司 数据备份方法及装置
CN103902896A (zh) * 2012-12-24 2014-07-02 珠海市君天电子科技有限公司 自膨胀病毒拦截方法及系统
US9633022B2 (en) * 2012-12-28 2017-04-25 Commvault Systems, Inc. Backup and restoration for a deduplicated file system
US20140214775A1 (en) * 2013-01-29 2014-07-31 Futurewei Technologies, Inc. Scalable data deduplication
US9317218B1 (en) * 2013-02-08 2016-04-19 Emc Corporation Memory efficient sanitization of a deduplicated storage system using a perfect hash function
US9430164B1 (en) 2013-02-08 2016-08-30 Emc Corporation Memory efficient sanitization of a deduplicated storage system
US9613047B2 (en) * 2013-02-13 2017-04-04 Dropbox, Inc. Automatic content item upload
US10275397B2 (en) * 2013-02-22 2019-04-30 Veritas Technologies Llc Deduplication storage system with efficient reference updating and space reclamation
US10140354B2 (en) * 2013-03-01 2018-11-27 Nec Corporation Information processing device, data processing method therefor, and recording medium
US9953042B1 (en) 2013-03-01 2018-04-24 Red Hat, Inc. Managing a deduplicated data index
US9679007B1 (en) * 2013-03-15 2017-06-13 Veritas Technologies Llc Techniques for managing references to containers
US10339112B1 (en) * 2013-04-25 2019-07-02 Veritas Technologies Llc Restoring data in deduplicated storage
US9361028B2 (en) 2013-05-07 2016-06-07 Veritas Technologies, LLC Systems and methods for increasing restore speeds of backups stored in deduplicated storage systems
US10592347B2 (en) 2013-05-16 2020-03-17 Hewlett Packard Enterprise Development Lp Selecting a store for deduplicated data
WO2014185916A1 (en) * 2013-05-16 2014-11-20 Hewlett-Packard Development Company, L.P. Selecting a store for deduplicated data
WO2014185915A1 (en) 2013-05-16 2014-11-20 Hewlett-Packard Development Company, L.P. Reporting degraded state of data retrieved for distributed object
US9256612B1 (en) * 2013-06-11 2016-02-09 Symantec Corporation Systems and methods for managing references in deduplicating data systems
US9201800B2 (en) * 2013-07-08 2015-12-01 Dell Products L.P. Restoring temporal locality in global and local deduplication storage systems
US9900384B2 (en) * 2013-07-12 2018-02-20 Adobe Systems Incorporated Distributed caching in a communication network
US10789213B2 (en) 2013-07-15 2020-09-29 International Business Machines Corporation Calculation of digest segmentations for input data using similar data in a data deduplication system
US10339109B2 (en) 2013-07-15 2019-07-02 International Business Machines Corporation Optimizing hash table structure for digest matching in a data deduplication system
US9836474B2 (en) 2013-07-15 2017-12-05 International Business Machines Corporation Data structures for digests matching in a data deduplication system
US10296598B2 (en) * 2013-07-15 2019-05-21 International Business Machines Corporation Digest based data matching in similarity based deduplication
US10229132B2 (en) 2013-07-15 2019-03-12 International Business Machines Corporation Optimizing digest based data matching in similarity based deduplication
US9594766B2 (en) 2013-07-15 2017-03-14 International Business Machines Corporation Reducing activation of similarity search in a data deduplication system
US10133502B2 (en) 2013-07-15 2018-11-20 International Business Machines Corporation Compatibility and inclusion of similarity element resolutions
US10296597B2 (en) * 2013-07-15 2019-05-21 International Business Machines Corporation Read ahead of digests in similarity based data deduplicaton
US10073853B2 (en) * 2013-07-17 2018-09-11 International Business Machines Corporation Adaptive similarity search resolution in a data deduplication system
US9336076B2 (en) 2013-08-23 2016-05-10 Globalfoundries Inc. System and method for controlling a redundancy parity encoding amount based on deduplication indications of activity
CN106775496B (zh) * 2013-10-23 2020-01-21 华为技术有限公司 一种存储数据处理方法及装置
US10324897B2 (en) 2014-01-27 2019-06-18 Commvault Systems, Inc. Techniques for serving archived electronic mail
US9886457B2 (en) 2014-03-10 2018-02-06 International Business Machines Corporation Deduplicated data processing hierarchical rate control in a data deduplication system
US10423481B2 (en) * 2014-03-14 2019-09-24 Cisco Technology, Inc. Reconciling redundant copies of media content
US9946724B1 (en) * 2014-03-31 2018-04-17 EMC IP Holding Company LLC Scalable post-process deduplication
US9753955B2 (en) 2014-09-16 2017-09-05 Commvault Systems, Inc. Fast deduplication data verification
US10255304B2 (en) * 2014-09-30 2019-04-09 International Business Machines Corporation Removal of garbage data from a database
US9588977B1 (en) * 2014-09-30 2017-03-07 EMC IP Holding Company LLC Data and metadata structures for use in tiering data to cloud storage
US10031934B2 (en) 2014-09-30 2018-07-24 International Business Machines Corporation Deleting tuples using separate transaction identifier storage
US20170322878A1 (en) * 2014-10-28 2017-11-09 Hewlett Packard Enterprise Development Lp Determine unreferenced page in deduplication store for garbage collection
WO2016086411A1 (zh) * 2014-12-05 2016-06-09 华为技术有限公司 一种控制器、闪存装置、识别数据块稳定性的方法以及在闪存装置中存储数据的方法
US9852076B1 (en) 2014-12-18 2017-12-26 Violin Systems Llc Caching of metadata for deduplicated LUNs
US10210168B2 (en) * 2015-02-23 2019-02-19 International Business Machines Corporation Managing data in storage according to a log structure
US9940234B2 (en) * 2015-03-26 2018-04-10 Pure Storage, Inc. Aggressive data deduplication using lazy garbage collection
US9639274B2 (en) 2015-04-14 2017-05-02 Commvault Systems, Inc. Efficient deduplication database validation
US10324914B2 (en) 2015-05-20 2019-06-18 Commvalut Systems, Inc. Handling user queries against production and archive storage systems, such as for enterprise customers having large and/or numerous files
CN105701024B (zh) * 2015-12-31 2018-11-06 华为技术有限公司 一种存储设备及其垃圾数据回收的方法
CN107122124B (zh) * 2016-02-25 2021-06-15 中兴通讯股份有限公司 数据处理方法及装置
US10546138B1 (en) 2016-04-01 2020-01-28 Wells Fargo Bank, N.A. Distributed data security
CN107957848B (zh) * 2016-10-14 2020-01-10 上海交通大学 重删处理方法及存储设备
CN110226153A (zh) * 2016-11-29 2019-09-10 净睿存储股份有限公司 垃圾收集系统和过程
US10846301B1 (en) * 2017-02-28 2020-11-24 Veritas Technologies Llc Container reclamation using probabilistic data structures
US20180260155A1 (en) * 2017-03-13 2018-09-13 Reduxio Systems Ltd. System and method for transporting a data container
CN108572789B (zh) * 2017-03-13 2022-01-28 阿里巴巴集团控股有限公司 磁盘存储方法和装置、消息推送方法和装置及电子设备
US11269764B2 (en) 2017-03-21 2022-03-08 Western Digital Technologies, Inc. Storage system and method for adaptive scheduling of background operations
US11188456B2 (en) * 2017-03-21 2021-11-30 Western Digital Technologies Inc. Storage system and method for predictive block allocation for efficient garbage collection
US10901944B2 (en) * 2017-05-24 2021-01-26 Microsoft Technology Licensing, Llc Statelessly populating data stream into successive files
CN107329903B (zh) * 2017-06-28 2021-03-02 苏州浪潮智能科技有限公司 一种内存垃圾回收方法及系统
CN107368260A (zh) * 2017-06-30 2017-11-21 北京奇虎科技有限公司 基于分布式系统的存储空间整理方法、装置及系统
CN110019052A (zh) * 2017-07-26 2019-07-16 先智云端数据股份有限公司 分布式重复数据删除的方法及储存系统
US11163446B1 (en) * 2017-07-31 2021-11-02 EMC IP Holding Company LLC Systems and methods of amortizing deletion processing of a log structured storage based volume virtualization
EP3659043B1 (en) 2017-08-25 2023-02-22 Huawei Technologies Co., Ltd. Apparatus and method for storing received data blocks as deduplicated data blocks
CN107818136B (zh) * 2017-09-26 2021-12-14 华为技术有限公司 用于回收垃圾对象数据的方法和装置
CN109697021A (zh) * 2017-10-23 2019-04-30 阿里巴巴集团控股有限公司 一种磁盘快照的数据处理方法及装置
US10848538B2 (en) 2017-11-28 2020-11-24 Cisco Technology, Inc. Synchronized source selection for adaptive bitrate (ABR) encoders
CN110427391B (zh) * 2018-04-28 2023-07-28 伊姆西Ip控股有限责任公司 确定重复数据的方法、设备和计算机程序产品
US10970254B2 (en) * 2018-05-02 2021-04-06 International Business Machines Corporation Utilization of tail portions of a fixed size block in a deduplication environment by deduplication chunk virtualization
US10915246B2 (en) * 2018-05-14 2021-02-09 Netapp, Inc. Cloud storage format to enable space reclamation while minimizing data transfer
US11210312B2 (en) * 2018-06-08 2021-12-28 Microsoft Technology Licensing, Llc Storing data items and identifying stored data items
US10820066B2 (en) 2018-06-20 2020-10-27 Cisco Technology, Inc. Reconciling ABR segments across redundant sites
US11308038B2 (en) * 2018-06-22 2022-04-19 Red Hat, Inc. Copying container images
CN110851398B (zh) * 2018-08-20 2023-05-09 阿里巴巴集团控股有限公司 垃圾数据的回收处理方法、装置及电子设备
US10963436B2 (en) 2018-10-31 2021-03-30 EMC IP Holding Company LLC Deduplicating data at sub-block granularity
CN109597798B (zh) * 2018-12-04 2024-07-09 平安科技(深圳)有限公司 网络文件删除方法、装置、计算机设备及存储介质
US10922188B2 (en) * 2019-01-28 2021-02-16 EMC IP Holding Company LLC Method and system to tag and route the striped backups to a single deduplication instance on a deduplication appliance
CN110008141B (zh) * 2019-03-28 2023-02-24 维沃移动通信有限公司 一种碎片整理方法和电子设备
US11940956B2 (en) 2019-04-02 2024-03-26 Hewlett Packard Enterprise Development Lp Container index persistent item tags
US11294805B2 (en) * 2019-04-11 2022-04-05 EMC IP Holding Company LLC Fast and safe storage space reclamation for a data storage system
CN111859028B (zh) * 2019-04-30 2024-08-16 伊姆西Ip控股有限责任公司 创建用于流式存储的索引的方法、设备和计算机程序产品
US11341106B2 (en) 2019-07-19 2022-05-24 Commvault Systems, Inc. Deduplication system without reference counting
CN112394873B (zh) * 2019-08-12 2024-05-24 深信服科技股份有限公司 一种数据管理方法、系统及电子设备和存储介质
US11669246B2 (en) 2019-08-19 2023-06-06 International Business Machines Corporation Storage allocation enhancement of microservices
US11119995B2 (en) 2019-12-18 2021-09-14 Ndata, Inc. Systems and methods for sketch computation
US10938961B1 (en) 2019-12-18 2021-03-02 Ndata, Inc. Systems and methods for data deduplication by generating similarity metrics using sketch computation
US20210224236A1 (en) * 2020-01-21 2021-07-22 Nebulon, Inc. Primary storage with deduplication
US20210224161A1 (en) 2020-01-21 2021-07-22 Nebulon, Inc. Efficient io processing in a storage system with instant snapshot, xcopy, and unmap capabilities
WO2021175446A1 (en) * 2020-03-06 2021-09-10 Huawei Technologies Co., Ltd. Devices and methods for eliminating defragmentation in deduplication
US11429279B2 (en) 2020-09-16 2022-08-30 Samsung Electronics Co., Ltd. Automatic data separation and placement for compressed data in a storage device
US11681453B2 (en) * 2020-09-23 2023-06-20 Hewlett Packard Enterprise Development Lp Data deduplication parameter computation
US11507273B2 (en) * 2020-09-29 2022-11-22 EMC IP Holding Company LLC Data reduction in block-based storage systems using content-based block alignment
KR20220077208A (ko) * 2020-11-30 2022-06-09 삼성전자주식회사 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법
US11755427B2 (en) 2021-06-01 2023-09-12 Alibaba Singapore Holding Private Limited Fast recovery and replication of key-value stores
US11741073B2 (en) 2021-06-01 2023-08-29 Alibaba Singapore Holding Private Limited Granularly timestamped concurrency control for key-value store
US11829291B2 (en) * 2021-06-01 2023-11-28 Alibaba Singapore Holding Private Limited Garbage collection of tree structure with page mappings
US20220382760A1 (en) * 2021-06-01 2022-12-01 Alibaba Singapore Holding Private Limited High-performance key-value store
CN113608683B (zh) * 2021-06-30 2024-05-07 山东海量信息技术研究院 一种双活磁盘的清理方法、系统及相关装置
US12074962B2 (en) 2021-08-10 2024-08-27 Samsung Electronics Co., Ltd. Systems, methods, and apparatus for dividing and encrypting data
CN114401202B (zh) * 2021-12-08 2024-06-21 正孚信安(北京)技术有限公司 一种数据周期监控方法及存储介质
US11941297B2 (en) 2022-04-11 2024-03-26 Netapp, Inc. Garbage collection and bin synchronization for distributed storage architecture
US11934656B2 (en) * 2022-04-11 2024-03-19 Netapp, Inc. Garbage collection and bin synchronization for distributed storage architecture
CN115357384B (zh) * 2022-08-17 2024-02-02 广州鼎甲计算机科技有限公司 重复数据删除存储系统的空间回收方法和装置
US11874749B1 (en) * 2022-09-30 2024-01-16 Dell Products L.P. Streaming slices out of order for efficient backup
US11989434B1 (en) * 2023-04-03 2024-05-21 Dell Products L.P. Optimizing protection of highly deduped data for performance and availability

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5990810A (en) * 1995-02-17 1999-11-23 Williams; Ross Neil Method for partitioning a block of data into subblocks and for storing and communcating such subblocks
US7107419B1 (en) * 2003-02-14 2006-09-12 Google Inc. Systems and methods for performing record append operations
US7567188B1 (en) * 2008-04-10 2009-07-28 International Business Machines Corporation Policy based tiered data deduplication strategy
CN101710323A (zh) * 2008-09-11 2010-05-19 威睿公司 计算机存储去复制操作

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6851276B2 (en) * 2000-10-10 2005-02-08 John Granville Perrins Storage device for drink containers
US7222119B1 (en) * 2003-02-14 2007-05-22 Google Inc. Namespace locking scheme
US8825718B2 (en) * 2006-12-28 2014-09-02 Oracle America, Inc. Methods and apparatus for marking objects for garbage collection in an object-based memory system
TWM324136U (en) * 2007-06-27 2007-12-21 Thai Dieng Industry Co Ltd Unidirectional bearing
US7856437B2 (en) * 2007-07-31 2010-12-21 Hewlett-Packard Development Company, L.P. Storing nodes representing respective chunks of files in a data store
US8782368B2 (en) * 2007-10-25 2014-07-15 Hewlett-Packard Development Company, L.P. Storing chunks in containers
US7962452B2 (en) * 2007-12-28 2011-06-14 International Business Machines Corporation Data deduplication by separating data from meta data
US8300823B2 (en) * 2008-01-28 2012-10-30 Netapp, Inc. Encryption and compression of data for storage
DE112008003826B4 (de) * 2008-04-25 2015-08-20 Hewlett-Packard Development Company, L.P. Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5990810A (en) * 1995-02-17 1999-11-23 Williams; Ross Neil Method for partitioning a block of data into subblocks and for storing and communcating such subblocks
US7107419B1 (en) * 2003-02-14 2006-09-12 Google Inc. Systems and methods for performing record append operations
US7567188B1 (en) * 2008-04-10 2009-07-28 International Business Machines Corporation Policy based tiered data deduplication strategy
CN101710323A (zh) * 2008-09-11 2010-05-19 威睿公司 计算机存储去复制操作

Also Published As

Publication number Publication date
US20120159098A1 (en) 2012-06-21
HK1173514A1 (zh) 2013-05-16
WO2012083267A2 (en) 2012-06-21
WO2012083267A3 (en) 2012-12-27
CN102567218A (zh) 2012-07-11

Similar Documents

Publication Publication Date Title
CN102567218B (zh) 用于数据去重复块存储的垃圾收集和热点释放
CN102541751B (zh) 用于数据去重复的可缩放块存储的方法和系统
JP6033241B2 (ja) データー重複排除のためのバックアップおよび復元方策
US10585857B2 (en) Creation of synthetic backups within deduplication storage system by a backup application
CN102880663B (zh) 部分去重复的文件的优化
CN110073344B (zh) 利用合成基线快照和逐出状态刷新来减少稳定数据逐出
US8904137B1 (en) Deduplication system space recycling through inode manipulation
US9128940B1 (en) Method and apparatus for performing file-level restoration from a block-based backup file stored on a sequential storage device
US9208031B2 (en) Log structured content addressable deduplicating storage
US8504529B1 (en) System and method for restoring data to a storage device based on a backup image
CN103827806B (zh) 闪存阵列中的逻辑扇区映射
CN103098035B (zh) 存储系统
KR20170054299A (ko) 메모리 관리 시의 중복 제거를 위해서 기준 세트로 기준 블록을 취합하는 기법
EP3532935A1 (en) Snapshot metadata arrangement for cloud integration
US20130311521A1 (en) Blob manipulation in an integrated structured storage system
EP3333730A1 (en) Data processing device, data processing program and data processing method
CN102591947A (zh) 用于数据去重复的快速且低ram占用的索引
US11397706B2 (en) System and method for reducing read amplification of archival storage using proactive consolidation
KR20090063733A (ko) 다중 복제를 지원하는 분산 파일 시스템에서 데이터 서버의복구 방법 및 그에 적당한 메타데이터 스토리지 및 저장방법
JP7007565B2 (ja) 情報処理装置および情報処理プログラム
Feng Rewriting Algorithms
CN117807174A (zh) 索引处理方法、装置、计算机设备、介质和程序产品

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1173514

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150729

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150729

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1173514

Country of ref document: HK

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150805

Termination date: 20201219

CF01 Termination of patent right due to non-payment of annual fee