CN104641365B - 在文件存储***中使用检查点管理去复制的***和方法 - Google Patents
在文件存储***中使用检查点管理去复制的***和方法 Download PDFInfo
- Publication number
- CN104641365B CN104641365B CN201280075854.5A CN201280075854A CN104641365B CN 104641365 B CN104641365 B CN 104641365B CN 201280075854 A CN201280075854 A CN 201280075854A CN 104641365 B CN104641365 B CN 104641365B
- Authority
- CN
- China
- Prior art keywords
- file system
- chunking
- checkpoint
- candidate
- file
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1405—Saving, restoring, recovering or retrying at machine instruction level
- G06F11/1407—Checkpointing the instruction stream
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
- G06F11/1453—Management of the data involved in backup or backup restore using de-duplication of the data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/128—Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
- G06F16/152—File search processing using file content signatures, e.g. hash values
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1748—De-duplication implemented within the file system, e.g. based on file segments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1748—De-duplication implemented within the file system, e.g. based on file segments
- G06F16/1752—De-duplication implemented within the file system, e.g. based on file segments based on file chunks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/178—Techniques for file synchronisation in file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using snapshots, i.e. a logical point-in-time copy of the data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种去复制***以及方法,涉及基于软件的***和基于硬件的***之间的交互,其中,基于软件的***管理整个后台去复制处理,而基于硬件的***包括基于硬件的文件***管理器和哈希生成器。文件***检查点机制被改变,以管理后台去复制处理,并且还降低关于识别用于去复制的候选组块以及处理该组块的处理复杂性。
Description
技术领域
本发明总体上涉及文件存储***,尤其涉及文件存储***中的去复制。
背景技术
去复制(deduplication)是一种用于提高存储利用率的机制。它主要包括识别数据存储***中的重复的数据组块(chunk)并消除重复件,同时只保持该数据的单个拷贝以及该单个拷贝的参考。其中,去复制减少了例如在磁盘上和/或固态存储器上存储数据所需的空间的量。
发明内容
在第一示例性实施例中,提供了一种去复制文件存储***中的数据的方法,所述文件存储***运行活动的文件***,所述文件存储***具有基于软件的***以及基于硬件的***,所述基于软件的***包括被配置为与去复制检测/索引引擎接口的基于软件的去复制管理器,所述基于硬件的***包括基于硬件的文件***管理器以及哈希生成器,所述活动的文件***由一系列检查点进行描绘。所述方法涉及:由所述基于软件的去复制管理器制作所述文件***的快照拷贝;由所述基于软件的去复制管理器确定用于去复制的检查点范围;由所述基于软件的去复制管理器基于所述检查点范围在所述快照拷贝中识别候选组块;由所述基于软件的去复制管理器向所述基于硬件的文件***管理器请求,使用所述哈希生成器哈希所述候选组块,所述基于硬件的文件***管理器向所述基于软件的去复制管理器返回所述候选组块的哈希值以及组块元数据;由所述基于软件的去复制管理器向所述去复制检测/索引引擎发送所述候选组块的哈希值,以及当所述候选组块匹配先前索引的组块时,由所述基于软件的去复制管理器从所述去复制检测/索引引擎接收先前索引的组块的组块元数据;基于所述先前索引的组块的组块元数据,由所述基于软件的去复制管理器向所述基于硬件的文件***管理器请求所述候选组块的去复制;基于所述组块元数据,由所述基于硬件的文件***管理器验证是否能够使用先前索引的组块在活动的文件***中去复制所述候选组块;并且一旦确定能够使用先前索引的组块在活动的文件***中去复制所述候选组块,则使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针。
在第二示例性实施例中,提供了一种文件存储***,其运行活动的文件***,所述活动的文件***由一系列检查点进行描绘。所述文件存储***包括:基于软件的***,包括被配置为与去复制检测/索引引擎接口的基于软件的去复制管理器;以及基于硬件的***,包括基于硬件的文件***管理器以及哈希生成器。所述基于软件的去复制管理器被配置为(1)制作所述文件***的快照拷贝,(2)确定用于去复制的检查点范围,(3)基于所述检查点范围在所述快照拷贝中识别候选组块,(4)请求所述基于硬件的文件***管理器使用所述哈希生成器哈希所述候选组块,所述基于硬件的文件***管理器向所述基于软件的去复制管理器返回所述候选组块的哈希值以及组块元数据,(5)向所述去复制检测/索引引擎发送所述候选组块的哈希值,并且当所述候选组块匹配先前索引的组块时,从所述去复制检测/索引引擎接收先前索引的组块的组块元数据,并且(6)请求所述基于硬件的文件***管理器基于所述先前索引的组块的组块元数据,去复制所述候选组块。所述基于硬件的文件***管理器被配置为(1)基于所述组块元数据,验证是否能够使用先前索引的组块在活动的文件***中去复制所述候选组块;并且(2)一旦确定能够使用先前索引的组块在活动的文件***中去复制所述候选组块,则使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针。
在各种可选实施例中,所述候选组块包括来自给定的文件***对象的单一文件***块(block),或者包括来自给定的文件***对象的多个文件***块。
在各种可选实施例中,验证是否能够在活动的文件***中去复制所述候选组块至少部分基于与所述候选组块相关联的检查点编号以及与先前索引的组块相关联的检查点编号,和/或至少部分基于与先前索引的组块的块相关联的参考计数。
在各种可选实施例中,所述使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针包括:增加与每个对应的指针相关联的参考计数。
在各种可选实施例中,所述基于所述检查点范围在所述快照拷贝中识别候选组块包括:检查文件***对象的根节点中的创建检查点;并且至少部分基于所述创建检查点来确定所述文件***对象是否包括任何候选组块。所述确定所述文件***对象是否包括任何候选组块包括:当所述创建检查点处于检查点范围之内并且所述文件***对象不是克隆的对象时,确定与所述文件***对象相关联的所有组块是候选组块;当所述创建检查点处于检查点范围之内并且所述文件***对象是克隆的对象时,遍历对象树结构以识别已经脱离从中克隆所述文件***对象的原始对象的任何组块;并且当所述创建检查点超出检查点范围时,遍历对象树结构以识别在检查点范围内具有修改检查点的任何组块。或者,所述确定所述文件***对象是否包括任何候选组块包括:当所述创建检查点处于检查点范围内,所述文件***对象不是克隆的对象,且所述文件***对象不是稀疏的对象时,确定与所述文件***对象相关联的所有组块是候选组块;当所述创建检查点处于检查点范围内,所述文件***对象不是克隆的对象,且所述文件***对象是稀疏的对象时,遍历对象树结构以识别不稀疏的任何候选组块;当所述创建检查点处于检查点范围内,且所述文件***对象是克隆的对象时,遍历所述对象树结构以识别已经脱离从中克隆所述文件***对象的原始对象的任何候选组块;并且当所述创建检查点超出检查点范围时,遍历对象树结构以识别在检查点范围内具有修改检查点的任何候选组块。
在各种可选实施例中,当先前索引的组块被确定为不可用于去复制时,基于与所述候选组块相关联的组块元数据以及哈希值,索引所述候选组块。
在另一示例性实施例中,提供了一种装置,包括具有体现于其中的计算机程序的有形的、非瞬态计算机可读介质,所述程序用于去复制文件存储***中的数据,所述文件存储***运行活动的文件***,所述活动的文件***由一系列检查点进行描绘,所述计算机程序包括指令,当运行于所述文件存储***的计算机处理器上时,该指令使得所述计算机处理器执行包括以下的处理:制作所述文件***的快照拷贝;确定用于去复制的检查点范围;基于所述检查点范围在所述快照拷贝中识别候选组块;向所述基于硬件的文件***管理器发送请求,请求哈希所述候选组块;从所述基于硬件的文件***管理器接收所述候选组块的组块元数据以及哈希值;基于所述哈希值,确定所述候选组块是否是先前索引的组块的复制件;并且当所述候选组块被确定为是先前索引的组块的复制件时,向所述基于硬件的文件***管理器发送请求去复制所述候选组块,所述请求包括先前索引的组块的组块元数据。
在又一示例性实施例中,提供了一种用于去复制文件存储***中的数据的装置,所述文件存储***运行活动的文件***,所述活动的文件***由一系列检查点进行描绘,所述装置包括:哈希生成器;以及基于硬件的文件***管理器,其被配置为接收来自基于软件的去复制管理器的用于哈希候选组块的请求,基于与所述候选组块相关联的检查点编号确定是否哈希所述候选组块,一旦确定哈希所述候选组块,调用所述哈希生成器哈希所述组块,向所述基于软件的去复制管理器返回所述候选组块的组块元数据以及哈希值,接收来自所述基于软件的去复制管理器的去复制所述候选组块的请求,基于先前索引的组块验证在活动的文件***中是否能够去复制所述候选组块,并且,一旦使用所述先前索引的组块确定在活动的文件***中能够去复制所述候选组块,则使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针。
在另一示例性实施例中,提供了一种用于识别在文件存储***中去复制的候选组块的方法,所述文件存储***具有包括多个文件***对象的活动的文件***,所述活动的文件***由一系列检查点进行描绘,所述去复制与预先确定的检查点范围相关。所述方法包括:检查文件***对象的根节点中的创建检查点;并且至少部分基于所述创建检查点,确定所述文件***对象是否包括任何候选组块,包括:当所述创建检查点处于检查点范围内,所述文件***对象不是克隆的对象,且所述文件***对象不是稀疏的对象时,确定与所述文件***对象相关联的所有组块是候选组块;当所述创建检查点处于检查点范围内,所述文件***对象不是克隆的对象,且所述文件***对象是稀疏的对象时,遍历对象树结构以识别不稀疏的任何候选组块;当所述创建检查点处于检查点范围内,且所述文件***对象是克隆的对象时,遍历所述对象树结构以识别已经脱离从中克隆所述文件***对象的原始对象的任何候选组块;并且当所述创建检查点超出检查点范围时,遍历对象树结构以识别在检查点范围内具有修改检查点的任何候选组块。
可以公开或者要求保护额外的实施例。
附图说明
通过参考下面的具体实施方式并参照附图将更容易地理解实施例的前述特征,其中:
图1是根据本发明的示例性实施例的文件存储***的示意框图;
图2是根据该示例性实施例的软件/硬件架构的示意图;
图3是示出了根据本发明的示例性实施例的对象树结构的一般格式的示意框图;
图4是示出了根据一个示例性实施例的基于软件的去复制管理器的组件的示意图;
图5是根据本发明的某个示例性实施例的用于去复制的示意性逻辑流程图;并且
图6是根据一个示例性实施例的用于识别候选组块的逻辑流程图。
应当指出的是,前述附图和其中所示的要素不一定绘制为一致的尺度或任何比例。除非上下文另有说明,相同的要素用相同的附图标记表示。
具体实施方式
正如在本说明书和所附权利要求中所使用的,下列词汇具有以下所示的含义,除非上下文另有所指:
“存储设备”是用于存储数据的设备或***。存储设备可以包括一个或多个电磁的或磁光的或光盘驱动器、固态存储设备或磁带。为方便起见,存储设备有时被称为“盘”或“硬盘”。数据存储***可以包括相同或不同类型的具有相同或不同的存储容量的存储设备。
“RAID控制器”是这样的设备或***,其将多个存储设备的存储容量合并为存储空间的虚拟空间,可选地,该存储空间的虚拟空间可以被称为“***驱动器”(system drive,“SD”)、“逻辑单元”(logical unit,“LU”或“LUN”)、或者是“卷”。通常,SD大于来自多个存储设备的单个存储设备、绘图空间,并包括冗余信息,以便它能够承受一定数量的磁盘的故障而无数据丢失。在示例性实施例中,各个SD与一个唯一的标识符相关联,该标识符以下称为“逻辑单元标识符(logical unit identifier)”或“LUID”,并且每个SD将不超过预定的最大大小,例如,2TB-64TB或以上。当命令被发送到SD时,RAID控制器通常在同一时间将命令转发给SD的所有存储设备。RAID控制器有助于克服典型存储设备的三个主要限制,即,该存储设备通常为存储***中最慢的组件,它们通常最有可能遭受灾难性的故障,并且它们通常具有相对较小的存储容量。
“RAID***”是这样的设备或***,其包括一个或多个RAID控制器和若干存储设备。通常,RAID***将包含两个RAID控制器(以便如果有一个发生故障后,另一个可以继续工作,并且当两者都正常工作时,分担负载)和几十个存储设备。在示例性实施例中,RAID***通常被配置有2-32个SD。当文件服务器需要存储或取得数据时,它将命令发送到RAID***的RAID控制器,其中,RAID控制器依次地负责向前路由命令至单个存储设备,并且根据需要存储或取得数据。通过一些RAID***,在SD之间可以建立镜像关系,使得被写入到一个SD(称为“主SD”)的数据由RAID***自动写入到另一个SD(在本文中称为“从SD”或“镜像SD”)以实现冗余目的。从SD可能由与主SD相同的RAID***进行管理,或由不同的本地或远程RAID***进行管理。镜像SD有效地提供了跨越SD的RAID 1+0功能性,以便在某些情况下,从SD甚至可能多个SD的丢失或损坏中提供恢复。
“文件***”是存储在文件存储***中的文件和目录(文件夹)的结构。在文件存储***内,文件***通常使用若干虚拟存储构造(construct)来进行管理,并且在示例性实施例中,文件***使用被称为域(range)、条带集(stripeset)以及跨越(span)的虚拟存储构造的分级结构来进行管理。域(range)由主SD自己或主/从SD对组成,主/从SD对应该包含相同的数据,并且因此作为单一的SD提供相同的存储容量。条带集(stripeset)是由一个或多个域组成。跨越(span)是由一个或多个条带集(stripeset)组成。因此,跨越(span)最终由一个或多个SD(通常4至50个SD)组成。跨越可以分成一个或多个文件***,每个文件***具有单独的名称和标识符并且可能具有不同的特性(例如,一个文件***可以用32KB簇(cluster)格式化,而另一个用4KB簇格式化,一个文件***可是蠕虫(Worm)和另一个不是,等等)。在跨越上的每个文件***被单独地进行格式化、安装和卸载。可以以任何顺序和在任何时间创建和删除文件***。文件***通常可被配置为自动扩展(或可替代地,防止或限制自动扩展),或者可以手动进行扩展。
“块(block)”是在文件***中的存储的单位,其对应于在其中存储用户数据和/或***数据的物理存储的部分。(下面讨论的)文件***对象一般包括一个或多个块。
“组块(chunk)”是在文件***中的存储的概念单位,它包括一个或多个文件***对象的块。在本文中所描述的示例性实施例中,去复制是在组块基础上执行的。
值的“集合”可以包括一个或多个值。
为方便起见以下使用标题,但其不应当被解释为以任何方式限制本发明。
参考通常被称为BlueArc TitanTM和MercuryTM文件服务器的由Hitachi数据***销售的各种文件服务器中使用的类型的示例性文件***,对本发明的示例性实施例进行描述,然而应当指出的是,各种概念可应用于其它类型的文件***。
示例性文件存储***
图1是根据本发明的示例性实施例的文件存储***的示意框图。其中,该文件存储***包括若干文件服务器(为简化和方便起见示出了单个文件服务器102),其通过诸如因特网协议网络(例如,因特网)的通信网络104与各种客户端设备1061-106M通信,并且还通过诸如光纤通道网络的存储网络110与各种RAID***1081-108N通信。客户端设备1061-106M和文件服务器102使用一个或多个网络文件协议,例如CIFS和/或NFS,进行通信。文件服务器102和RAID***1081-108N使用存储协议,例如SCSI,进行通信。应当指出的是,该文件存储***可能包括以各种配置互联的多个文件服务器和多个RAID***,包括全网配置,其中任何文件服务器都可以通过冗余和交换光纤通道网络与任何RAID***进行通信。
文件服务器102包括用于管理一个或多个文件***的存储处理器。文件服务器102可以被配置为允许客户端访问部分的文件***,诸如指定名称下的树或子树。按CIFS的说法,这种访问可以被称为“共享”,而按NFS中的说法这样的访问可以被称为“输出(export)”。固有地,文件服务器102可以包括各种硬件实现的和/或硬件加速的子***,例如,如美国专利No.6826615(2337/103)和8180897(2337/108)中所描述的那样,它们的全部内容通过引入合并于此,文件服务器102还可包括基于硬件的文件***,其包括多个链接的子模块,例如,如美国专利No.7457822(2337/104)和8224877(2337/117)所描述的那样,它们的全部内容通过引入合并于此,
每个RAID***108通常包括至少一个RAID控制器(通常两个RAID控制器以用于冗余)以及由(多个)RAID控制器管理的若干物理存储设备(例如,盘)。RAID***108将其存储资源聚集至若干个SD。例如,每个RAID***108可以配置有2-32个SD。每个SD可以被限制到预定的最大大小(例如,2TB-64TB或以上)。将多个存储设备合并至一个SD可以提供若干益处,包括提高的速度(单个存储设备相对缓慢,但数据可以跨越多个存储设备以拓宽瓶颈),增加的容量(单个存储设备相对较小,但可以合并多个存储设备以提供更多的可用空间),抽象性(abstraction)(使用的空间的量可以大于或者小于单个存储设备的大小)和可靠性(resilience)(奇偶校验或冗余信息可以存储在每个存储设备上,以便SD可以承受存储设备的损耗)。
文件服务器102被配置为使用一个或多个SD,其可以来自单一的RAID***或来自多个RAID***。该文件服务器102可以正常询问RAID***以发现每个SD是主要的还是从属的。控制哪些SD被文件服务器102所使用的方法在本文中称为“许可”(licensing)。因此,在实践中,文件服务器102通常对于一些SD被许可而对另一些则不被许可。
固有地,该文件服务器102能够将多个SD合并成较大的存储池,在本文中称为“跨越(span)”。跨越基本上是多个SD的RAID 0阵列。将多个SD合并成跨越可以提供类似于将多个物理磁盘合并成SD所获得的那些若干益处,包括增加的速度(在多个RAID***上扩展多个SD之间的I/O可以进一步拓宽存储瓶颈),增加的存储容量(跨越可以大于可能被限制为2TB的单个SD)和允许更灵活的存储空间分配的额外的抽象性。
软件/硬件架构
在某些示例性实施例中,文件服务器通过基于软件的***和基于硬件的***之间的特殊分工来实施去复制。图2是根据该示例性实施例的软件/硬件架构的示意图。这里,基于软件的***210包括各种软件组件,其包括在操作***211下运行的基于软件的去复制管理器212和去复制检测/索引引擎213,操作***211运行在微处理器***(例如包括微处理器和相关的存储器和外设)上。提供进程间通信通道214(例如,经由Bossock套接字层(socket layer))以允许基于软件的去复制管理器212和去复制检测/索引引擎213之间的通信。基于硬件的***220包括各种硬件组件,该组件包括基于硬件的文件***管理器221,其与基于硬件的哈希生成器(hash generator)222(将在下面更充分讨论)以及文件***223通信,文件***223被存储在各种存储器和存储设备中,其中一些可以在文件服务器102内(例如,在内部缓冲存储器中)并且其中一些可以在文件服务器102外(例如,被存储在各种RAID***或其他存储***中)。提供接口230以允许基于软件的去复制管理器212和基于硬件的文件***管理器221之间的通信。
其中,图2中所示的分工允许基于软件的去复制管理器212在后台管理去复制功能,从而控制去复制对基于硬件的文件***的性能的影响,并且也减少基于软件的组件和基于硬件的组件之间的通信量。如下面所讨论的,基于软件的去复制管理器212和基于硬件的文件***管理器221都包括减少执行去复制所需的处理量和通信量的各种优化。
文件***对象以及树结构
文件服务器102在文件***中存储各种类型的对象。对象一般可以被分类为***对象以及文件对象。文件对象被创建以用于存储用户数据以及关联的属性,诸如文字(word)处理器或者电子数据表(spread sheet)文件。***对象由文件存储***创建用于管理信息,并且包括如下内容,例如根目录对象,空闲空间分配对象,修改的检查点对象列表对象,修改的保留的(retained)对象列表对象,以及软件元数据对象,这里仅举几例。更具体地,目录对象被创建以用于存储目录信息。空闲空间分配对象被创建以用于存储空闲空间分配信息。修改的检查点对象列表对象以及修改的保留的对象列表对象(这两者都将在下文进行更详细地描述)被创建以用于存储分别涉及检查点以及保留的检查点的信息。软件元数据对象(将在下文进行更详细地描述)是用于保持与文件或者目录对象关联的额外文件属性的特殊对象(即,不能适合在如下文所描述的文件或者目录对象之内的预先指定的区域之内的文件属性,诸如CIFS安全属性等),并且其是由文件或者目录对象的创建器所创建的,该创建器包括对于文件或者目录对象之内的软件元数据对象的参考。
在某些实施例中,使用具有根节点的树结构(称为动态超级块或者DSB)来管理文件***的实例。文件服务器102可以维持多个DSB以存储表示不同检查点的文件***的不同版本(例如,当前“工作”版本以及一个或多个“检查点”版本)。在一个示例性实施例中,DSB包括指向间接对象的指针,该间接对象依次地包括指向其它对象的指针。通过间接对象所参考的每个对象与对象编号相关联。***对象通常具有固定的、预定义的对象编号,因为它们一般总是存在于***当中。文件对象通常从可用的对象编号池中被动态地分配对象编号,并且在某些情况下这些文件对象编号可以被重新使用(例如,当文件被删除时,其对象编号可以被释放,以被随后的文件对象重新使用)。可以通过对象编号索引间接对象以便获得指向对应的对象的指针。
一般而言,在文件***中的每个对象,包括间接对象、每个***对象以及每个文件对象,都是使用独立的树结构来进行实施的,其中,树结构包括独立的对象根节点(rootnode,有时被称为root onode)并且可选地包括若干间接节点(indirect node,有时称为indirect onode),直接节点(direct node,有时称为direct onode),以及存储块。DSB包括指向间接对象的根节点的指针。间接对象包括指向其它对象的根节点的指针。
图3是示出了根据本发明的示例性实施例的对象树结构的一般格式的示意框图。根(“R”)节点302可以指向各种间接(“I”)节点304,每个节点304可以指向若干直接(“D”)节点306,每个节点306可以指向若干存储块(“B”)308。在实践中,对象树结构可以例如根据对象的大小发生很大的变化。另外,当信息被增加至对象和从对象删除时,特定对象的树结构可随时间而变化。例如,当更多的存储空间被用于对象时,节点可以被动态地增加至树结构;并且可以根据需要使用不同层级的间接(例如,间接节点可以指向直接节点或者其它间接节点)。
当对象被创建时,为对象创建对象根节点。最初,该“空”对象的根节点没有指向任一间接节点、直接节点、或者数据块的指针。
当数据被增加至对象时,它首先被放入直接从根节点所指向的数据块。一旦在根节点中的所有的直接块指针被填满,则创建具有从根节点到直接节点的指针的直接节点。如果对象中的数据增长以填满了直接节点中的所有的数据指针,则创建间接节点。
例如在美国专利No.7457822(2337/104)(其通过上面的引用合并于此)以及美国专利No.8041735(2337/105)(其全部内容通过引用合并于此)所描述的那样的检查点机制被包括以在各种时间制作文件***的可选的保留的拷贝以及临时拷贝。具体地,文件***请求的处理被一系列检查点所划定,该一系列检查点被安排为以不低于一些用户指定的间隔,诸如每10秒发生。对于每个连续的检查点,在盘上存储当前文件结构信息,其取代来自紧接在前面的检查点的先前存储的文件结构信息。检查点被依次地编号并且被用于临时组合(group)文件请求的处理。每个文件***对象均与创建该对象于其中的检查点相关联,并且创建检查点编号被存储在对象根节点中。
为用于各种目的,在选择的时间点了解文件***结构可能是有用的。通过允许存储与当前保存的检查点相关联的文件***结构数据来提供该能力,为方便起见,在下文中,当前保存的检查点被称为保留的检查点或者快照(snapshot)。该保留的检查点基本上是在特定的检查点的文件***结构的只读版本。可以制作多个保留的检查点,并且包括机制以用于删除所选择的保留的检查点或者将文件***恢复至所选择的保留的检查点(例如,将文件***返回至灾难之后的已知状态)。
在本发明的某些实施例中,包括了例如在美国专利申请公开No.US2012/0130949(2337/130)(其全部内容通过参考合并于此)所描述的文件克隆机制,以允许诸如当用户制作文件的拷贝时,在文件***内快速创建文件的拷贝(克隆)。在示例性实施例中,源对象的克隆至少最初是由包含源对象的各种要素(例如,间接节点、直接节点以及数据块)的参考的结构所表示的。只读以及可变的克隆都可以被创建。源文件和克隆最初共享这些要素并且当对源文件或者可变的克隆进行改变的时候继续共享未修改的要素。描述与源文件关联的数据流(即,间接/直接节点)的用户数据块或者元数据块均不需要在克隆被创建的时候被拷贝。在适当的时间,克隆的文件可以被“去克隆”。
对象根节点包括检查点编号以识别检查点,在该检查点中对象是被最后修改的(检查点编号最初识别在其中对象被创建的检查点,并且随后每次对象在新检查点被修改时检查点编号改变)。在示例性实施例中,在其中创建对象的检查点编号也被存储在对象根节点中。
对于对象根节点所对应的实际的数据,对象根节点包括指向与对应的对象关联的数据的每个块的独立指针。一般而言,指向多达16个数据块的指针被存储在对象根节点中。对于超出16块的数据,在对象树中需要一个或多个直接节点和/或间接节点,其中,在每个节点中根据需要存储的合适的指针链接各种节点。这些指针存储与对应的数据块或者节点关联的在盘上的块的扇区(sector)编号。
直接节点包括检查点编号并且被布置为存储与对象有关的块(例如,大约60或者61个块)的某编号的位置。
当第一直接节点被完全地利用以识别数据块时,则一个或多个间接节点被用于识别第一直接节点以及额外的直接节点,该额外的直接节点具有对应于对象的数据块。在这种情况下,对象根节点具有指向间接节点的指针,并且间接节点具有指向对应的直接节点的指针。当间接节点被完全地利用时,则在必要时采用额外的中间间接节点(interveningindirect node)。这种结构允许部分文件的快速识别,而不管文件的分段存储(fragmentation)。
如以上所讨论的,间接节点提供根节点和直接节点之间的间接的层级。下面的信息被存储在一个示例性实施例的间接节点中:
●检查点编号。
●指向或者间接或者直接节点的指针(例如,多达60个这样的指针)。
●CRC以及各种健全双字(sanity dwords),以允许检查间接节点的有效性。
如以上所讨论的,直接节点提供指向盘上的数据块的直接的指针。下面的信息被存储在一个示例性实施例的直接节点中:
●检查点编号。
●若干数据块描述符(例如,多达60个这样的描述符)。每个数据块描述符包括指向数据块的指针、检查点编号以及说明块是否被零填充的比特。
●CRC以及各种健全双字,以允许检查间接节点的有效性。
在每个节点(即,根节点、间接节点、直接节点)内,指向块或者其它节点的每个指针与检查点编号相关联以表明检查点与由指针参考的块/节点相关联。在下文描述的某些示例性实施例中,这些检查点编号被用于确定特定的文件***是否应当对于对象组块进行调查研究以用于可能的去复制。
尽管上述描述了文件***对象树结构是如何在写入对象时用分配给占有的位置(populated)的树节点和数据块来进行管理的,但是某些示例性实施例支持稀疏的文件***对象,其中可以写入文件***对象而无需分配所有的数据块以及树节点,并且对于对象的一些零填充的部分无需零填充数据块。
例如,如果对于文件的写入具有超过文件的当前末端的起始偏移,则当前末端和新的写入数据的开始之间的文件的未定义的部分技术上必须用零进行填充。如果对象的长度被设定为大于当前长度也会发生相同的事情。如果文件被创建并且然后长度被设定为例如1GB,则这可能是特别地有问题的。为这样的文件***对象完全地分配数据块将会需要将被分配至对象的盘块实际地用零写入。对于1GB的文件,这将花费,比如说,10秒钟的量级。对于1TB的文件,它将可能花费比如说3小时的量级。
在本发明的某些实施例中,通过具有比特可以避免该问题,其中,所述比特具有说明该块是否零填充的每个数据块指针。如果设定了该比特,则文件服务器知道该块应当用零进行填充,即使在盘上它可以包含非零数据。如果该块被读取,则为该块返回零而非实际的盘上的内容。如果用不填充整个块的写入来写入该块,则没有被正在写入的块的部分写入零,并且重置比特以表明该块不是零填充的。值得注意的是,在这种情况下,将为文件的所有的零填充的部分分配盘块,虽然盘块将不会实际地用零进行填充。
在一些实例中,甚至不为这样的文件***对象的零填充的部分分配数据块以及相关的树节点,因为分配数据块以及树节点可能花费过多的大量时间。例如,对于4K的盘块大小,1TB对象需要大约4百万直接节点以及较少的数量的间接节点,这将花费40秒钟的量级以写入盘。此外,所需的所有的数据块的空闲空间分配以及随后的对于空闲空间位图的更新都将显著地增加该时间。如果在文件创建开始之后立即取得检查点,则对于整个该时间,整个***一般将停止(至任意卷)的服务请求。
在某些示例性实施例中,通过双重方法(twofold approach)来解决该问题。解决方案的第一方面是不为零填充的文件部分实际地分配盘块。这意味着当对象存储发现对零填充的块的写入时,它将首先不得不为该块分配盘空间,并且在有关的节点结构(onodestructure)中放置指向它的指针。
第二方面建立在第一方面之上,并且,除了不分配数据块之外,还涉及不创建节点结构。为实施该方面,每个节点指针具有表明它所指向的节点是否被分配的比特。如果为否,则仅当需要节点有效的操作发生时,为其分配盘空间并且***正确的指针。这样,大量的零填充的对象可以仅具有根节点,显然,该根节点可以被非常快速地创建。
仅仅为了示例,下面示出了包含在根节点以及从根节点参考的下一级节点中的信息的类型的说明(具有下划线并在括号内的是注释):
文件的根节点的示例
onode/ccache:onode-o 16392
onode/ccache:Read 1024bytes from sector 0x38b560(ByteOffset0x716ac000)
onode/ccache:
onode/ccache:ActiveRootNode
onode/ccache:AsciiDescriptor:RONA
onode/ccache:SanityDWord0:WFS1(valid)
onode/ccache:ObjectNumber:0x4008(Type:OBJ_TYPE_FSOBJECT_FILE)
onode/ccache:Checkpoint:0x123ab(当该对象是最后被修改时的检查点编号)
onode/ccache:ReuseCount:0x123ab
onode/ccache:WriteCount:0x3
onode/ccache:IndirectionCount:2
onode/ccache:ResiliencyMode:None
onode/ccache:DataLength:1MB(1048576B)
onode/ccache:FreeRootOnodePtr:0x0(unused)
onode/ccache:SavedRootOnodePtr:0x0(unused)
onode/ccache:BlockPtr[00]:0x38d0c8(Checkpoint:0x123ab)(指向在检查点 0x123ab写入的数据块的指针)
onode/ccache:BlockPtr[01]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[02]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[03]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[04]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[05]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[06]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[07]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[08]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[09]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[10]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[11]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[12]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[13]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[14]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:BlockPtr[15]:(Checkpoint:0x123ab)(ZeroFill)(Sparse)
onode/ccache:LeafOnodePtr:0x38b5c0(Checkpoint:0x123ab)(指向剩余的数据 块的额外的节点树)
onode/ccache:Format TimeStamp:0x5034155431d149c3
onode/ccache:WfsEnode
onode/ccache:<Enode contains file's attributes-snipped>
onode/ccache:
onode/ccache:Cloned Checkpoint:0x0(如果该对象是另一个对象的克隆,则克 隆的检查点将是非零的。)
onode/ccache:Reserved[1]:0x0
onode/ccache:Reserved[2]:0x0
onode/ccache:BlockCount:0x100(sparse blocks)
onode/ccache:CreationChkpoint:0x123ab(其中该对象被创建的检查点)
onode/ccache:Crc32:0xcbe306ba(valid)
onode/ccache:SanityDWord1:WFS2(valid)
节点树中的下一级的示例:
onode/ccache:onode-s 0x38b5c0
onode/ccache:Read 1024bytes from sector 0x38b5c0(ByteOffset0x716b8000)
onode/ccache:Leaf Onode:
onode/ccache:IndirectOnode
onode/ccache:AsciiDescriptor:IONA
onode/ccache:SanityDWord0:WFS1(valid)
onode/ccache:ObjectNumber:0x4008(Type:OBJ_TYPE_FSOBJECT_FILE)
onode/ccache:Checkpoint:0x123ab(当该节点被写入时的检查点,其必须匹配在 指向该节点的指针—在本示例中,从上述根节点的叶子节点指针—中的检查点字段 (field))
onode/ccache:ReuseCount:0x123ab
onode/ccache:WriteCount:0x3
onode/ccache:ResiliencyMode:None
onode/ccache:ObjectPtr[00]:0x38b5b8(Checkpoint:0x123ab)(指向树的第一 下一分支的指针)
onode/ccache:ObjectPtr[01]:0x38b5c8(Checkpoint:0x123ab)(指向树的第二 下一分支的指针)
onode/ccache:ObjectPtr[02]:0x38b5d0(Checkpoint:0x123ab)(指向树的第三 下一分支的指针)
onode/ccache:ObjectPtr[03]:0x38b5d8(Checkpoint:0x123ab)(指向树的第四 下一分支的指针)
onode/ccache:Reserved[0]:0x0
onode/ccache:Reserved[1]:0x0
onode/ccache:Reserved[2]:0x0
onode/ccache:Crc32:0x25972e2f(valid)
onode/ccache:SanityDWord1:WFS2(valid)
去复制检测/索引引擎
虽然本发明的实施例并不限于任意特定的去复制检测/索引引擎,但是在某些示例性实施例中,去复制检测/索引引擎213是从Permabit Technology Corporation ofCambridge,MA得到许可的被称为ALBIREOTM数据优化软件的商业可用软件产品(下文中称为“该引擎”),其被提供为预编译的共享的库以及可执行的以及被整合至基于软件的***210。
该引擎支持两种类型的索引,即,稀疏索引以及默认索引。索引是基于组块的SHA-256哈希(hash)。两种索引类型都使用每索引组块的四字节的内存表项(in-memory entry)以及盘上(on-disk)数据结构,在该数据结构中关于组块的信息被记录为它们被呈现给该引擎的(并且以呈现的顺序的)样子。该盘上数据结构用于存储关于每个组块的特定应用信息(在下文中被称为“组块元数据”(chunk metadata),并将在下文进行更加详细地讨论)。在某些示例性实施例中,使用稀疏索引,这是因为稀疏索引对于后台去复制处理可以是更优选的,在该处理中,不必以暂时的顺序(即,以组块被实际修改的顺序)去复制来处理组块,即使这样的暂时的方位一般是优选考虑的。优选地(但不是必须地),盘上的数据结构被存储在与其相关的文件***之内,这允许在EVS以及文件***迁移期间盘上的数据结构自动地随文件***移动。
基于检查点的去复制
在非常高的层级,去复制处理涉及识别候选进行去复制的组块,确定特定的候选组块是否是文件***内的其它组块的复制件,以及使用对于其它组块的参考来替换复制件组块,以便候选组块(以及由此复制件数据)不需要被存储。或者该其它组块的复制件的其它候选组块也可以使用对于该其它组块的参考来替换,从而进一步减少存储的数据量。
本发明的某些示例性实施例改变了文件***检查点机制以管理后台去复制处理,而且还减少了关于识别候选去复制的组块以及处理这样的组块的处理复杂性。
在某些实施例中,改变(leverage)检查点的一种方式是由基于软件的去复制管理器执行作为在连续的去复制循环中的后台功能的去复制,其中,去复制循环运行于各种时间(其可以是被安排的,在某条件下执行的或者手动启动的,其中所述条件可以包括诸如在预先确定的编号的块已经被修改之后或者在预先确定的编号的检查点已经取得之后),并且每个循环都涵盖预先确定的范围内的检查点编号,该检查点编号不一定是连续的。在一个示例性实施例中,在每个检查点,自从早前的检查点被追踪且累积而改变的块的编号,以及自从最后的去复制循环在文件***中被改变的块的编号,被用于确定何时开始去复制循环。如果基于软件的去复制管理器确定去复制已经落后活动的文件***预先确定的量(例如,自从去复制的最后的检查点范围开始,多于预先确定的编号的块已经被修改),则基于软件的去复制管理器可以省略若干检查点范围的去复制以“追上”活动的文件***。检查点编号也由基于软件的去复制管理器使用以减少检测候选组块所需的处理量,并且检查点编号也由基于硬件的文件***管理器使用以减少验证匹配去复制所需的处理量并且还执行复制件组块的实际的去复制。下面将对检查点的使用进行更详细的讨论。
下面的示例性去复制处理的描述假定每个组块包括单一文件***块,并且因此,对于该示例性实施例,术语“组块”和“块”基本上是可以互换的。稍后,将描述对更一般的实施例的一些考虑,其中每个组块可以包括多个文件***块。
如图4所示意地示出的,在某些示例性实施例中,基于软件的去复制管理器212使用被分为3个i层级的“管线(pipeline)”架构。这里,基于软件的去复制管理器212包括“检测改变的块(Detect Changed Block)”层级402,“获取去复制意见(Get DeduplicationAdvice)”层级404,以及“去复制组块(Deduplicate Chunk)”层级406。在该示例性实施例中,每个层级发布来自单一线程的异步请求。
图5是根据本发明的某些示例性实施例的去复制的示意性逻辑流程图。
一般而言,作为后台功能,基于软件的去复制管理器212在框502中取得文件***的快照,并在框504中确定用于去复制的检查点范围。检查点范围包括基部(base)检查点编号(称为“检查点-低”)以及上部(upper)检查点编号(称为“检查点-高”),其中检查点-高通常是与快照关联的检查点编号,而检查点-低是预先确定的以前的检查点,其可以与去复制的紧接前一迭代的检查点-高值相同或不同。任务被发送至“检测改变的块”序列(queue),其包含文件***标识符(其允许如下面所讨论的支持多个文件***的去复制)、该去复制循环将开始于此的对象编号、在单一任务中应当被检查的对象的编号、基部检查点编号(检查点-低)、以及上部检查点编号(检查点-高)。
在框506中,基于软件的去复制管理器212的检测改变的块的线程池/进程402处理文件***的“快照”拷贝,以识别在预先确定的检查点范围内修改的以及因此成为去复制候选的组块。下面讨论识别候选组块的示例性处理。
当发现候选组块时(框508中的是),检测改变的块层级402将任务发送至包括关于候选组块的相关信息(例如,块指针以及组块的检查点)的获取去复制意见层级404。在框510中,获取去复制意见层级404经由接口230将请求发送到基于硬件的文件***管理器221,以有条件地(即,受到下面讨论的某限制)从存储器中读取候选组块并且使用基于硬件的哈希生成器222计算候选组块的哈希值。
在读取/哈希特定的候选组块之前,基于硬件的文件***管理器221决定是否读取并哈希该候选组块,这是因为例如,自从取得了被基于软件的去复制管理器212所使用的文件***的快照拷贝,与候选组块关联的文件***对象可能已经被删除或者删减了而排除该候选组块,或者自从取得了被基于软件的去复制管理器212所使用的文件***的快照拷贝,组块可能已经被修改。在前者的情况下,不需要为候选组块计算哈希值,从而节省处理资源并且降低基于软件的去复制管理器以及基于硬件的文件***管理器之间的通信。在后者的情况下,如果候选组块与其在“快照”拷贝中处于相同的检查点,则如以上所讨论,基于硬件的文件***管理器221为候选组块计算哈希值并且将哈希值以及关联的组块元数据传递至基于软件的去复制管理器。
假定基于硬件的文件***管理器221决定读取/哈希候选组块,则基于硬件的文件***管理器221调用哈希生成器222以生成哈希,并且然后将关于候选组块的哈希以及相关的组块元数据(其中包括,对象编号,检查点编号等)传回至获取去复制意见层级404。相对于由基于软件的去复制管理器212请求整个候选组块(在一个示例性实施例中,其可以是32千字节(Kbyte))并且(例如,由基于软件的去复制管理器212或者由去复制检测/索引引擎213)在基于软件的***210之内执行哈希,该机制通过传递哈希值以及相关的组块元数据(在一个示例性实施例中,其处于64字节的信息的量级上–256比特哈希值加上多达32字节的组块元数据)而非整个候选组块而降低了基于软件的***210以及基于硬件的***220之间的通信,并且还通过在硬件执行哈希功能降低了基于软件的***210中的微处理器的负荷。
假定哈希了候选组块(框512中的是),则在框514,获取去复制意见层级404经由接口214调用去复制索引/匹配引擎213以确定是否该哈希值匹配先前索引的组块的哈希值。如果候选组块的哈希不匹配先前索引的组块的哈希(框516中的否),则获取去复制意见层级404通常指令去复制检测/索引引擎213通过为该哈希值存储从基于硬件的文件***管理器221接收的组块元数据来索引候选组块(即,候选组块变为先前索引的组块,用于将来的复制件检测)。而另一方面,如果候选组块的哈希匹配先前索引的组块的哈希(框516中的是),则去复制索引/匹配引擎213将先前索引的组块的存储的组块元数据返回至获取去复制意见层级404,其接着将任务发送至去复制组块线程池/进程406。
去复制组块层级406(基于由去复制检测/索引引擎213返回的组块元数据)锁定与先前索引的组块相关联的对象,并且在框518将请求发送至基于硬件的文件***管理器221以验证该匹配并且基于由去复制检测/索引引擎213返回的组块元数据有条件地去复制候选组块。
当基于硬件的文件***管理器221被通知候选组块匹配先前索引的组块时,基于硬件的文件***管理器221必须决定是否去复制候选组块,这是因为,自从取得了被基于软件的去复制管理器212所使用的文件***的快照拷贝甚至自从生成哈希时,活动的文件***中的相关信息可能已经改变,从而使得先前索引的组块和/或候选组块对于去复制目的已经过时了。例如,至基于软件的去复制管理器识别出候选组块为复制件的时候,与候选组块关联的对象可能已经从活动的文件***中被删除了,与候选组块关联的对象可能已经被删减了从而使得候选组块不再是对象的一部分,或者候选组块可能已经被修改了。因此,候选组块的匹配仅仅是暂时性的,并且必须在候选组块可以被去复制之前处于有效。因此,基于硬件的文件***管理器221有效先前索引的组块以及使用检查点编号的候选组块,具体地通过比较先前索引的块指针的当前检查点与从索引在组块元数据中返回的检查点,以确保两个块没有改变并且仍然处于使用中,并且因此可用于去复制。
即使先前索引的组块以其他方式可用于去复制候选组块,在某些示例性实施例中,如果与先前索引的组块相关联的块已经被参考(即,被共享)预先确定的最大次数,则基于硬件的文件***管理器221可能还是不能去复制候选组块。因此,在这样的示例性实施例中,可以参考(即,共享)特定的块的次数可能被限制了。在该示例性实施例中,基于硬件的文件***管理器221为该块检查参考计数(下面讨论),以确定是否已经达到最大参考计数。如果已经达到最大参考计数,表明不可以使用来自先前索引的组块的块来去复制该候选组块,则基于硬件的文件***管理器221通知去复制组块层级406。
假定基于硬件的文件***管理器221确定候选组块可以被去复制,则除其他事项外,基于硬件的文件***管理器221使用先前索引的组块的参考替换对于对应的文件***对象中的候选组块的参考,增加与先前索引的组块相关联的参考计数,并且将候选组块标记为释放的,从而减少文件***对象所需的存储空间的量。
如果候选组块被基于硬件的文件***管理器221成功地去复制了(框520中的是),则如果仍然有要处理的对象(框526中的否),处理基本上返回至框506。然而如果候选组块没有被基于硬件的文件***管理器221成功地去复制(框520中的否),并且,正如下面更全面地讨论的那样,这样的去复制候选组块的失败是由于先前索引的组块已经达到其最大参考计数从而不可用于去复制候选组块而造成的(框522中的是),则在框524中,去复制组块线程层级406通常指令去复制检测/索引引擎213通过为该哈希值存储从基于硬件的文件***管理器221接收的组块元数据来索引候选组块(即,候选组块变为用于将来复制件检测的先前索引的组块)。无论是否去复制了该候选组块,以及无论索引是否基于候选组块进行了更新,如果仍然有要被处理的对象(框526中的否),则处理基本上返回框506。
识别候选组块
正如以上所讨论的,检测改变的块层级402将必须识别文件***中的改变以尝试将它们去复制。在某些示例性实施例中,基于软件的去复制管理器212遍历间接对象,使用检查点编号识别被改变的对象并且然后识别该被改变的对象之内的被改变的块。图6是根据一个示例性实施例的识别候选组块的逻辑流程图。这里,在框602中检测改变的块层级402检查文件***对象的根节点。如果对象的创建检查点处于检查点范围之内(框604中的是),则除非对象是克隆的对象(下面讨论),否则与文件***对象相关联的所有的块将在该检查点范围之内完成改变,并因此文件***对象的所有块通常将被考虑为候选组块(可选地具有例外,下面讨论)。
如果文件***对象是克隆的对象(框606中的是),则仅仅已经脱离原始对象(即,从中克隆对象的那个对象)的文件***对象的块将被认为是候选组块,从而在框608中,检测改变的块层级402“遍历(walk)”(即,穿越(traverse))对象树以识别已经脱离原始对象的任意候选块。这样的脱离的块将具有大于对象的在其中克隆的检查点编号的检查点编号,其被存储在对象根节点中。
如果文件***对象不是克隆的对象(框606中的否)但是对象是稀疏的对象(框610中的是),则不是将对象的所有的块视为候选组块(其中有一些块可能是未被分配的),而是可选地,在框612中,基于软件的去复制管理器212可以“遍历”对象树以仅发现已经被分配并且被写入的块并且将这些块视为候选组块。
如果对象的创建检查点处于检查点窗口之内并且对象不是克隆的而且对象也不是稀疏的(在如上述处理稀疏的对象的一些实施例中),则在框614中,检测改变的块层级402将对象的所有的块视为候选组块。
如果对象的创建检查点小于检查点范围的底部(框604中的否),则在框616,检测改变的块线程池/进程402“遍历”对象树以识别在检查点范围内已经改变的任意候选块。
另外或者可选地,在各种可选实施例中,基于硬件的文件***管理器221可以保持被改变的对象列表和/或被改变的块列表,并且检测改变的块层级402可以使用这样的列表以识别在给定的检查点范围之内的文件***中的改变。
数据打包(PACKING)
在某些示例性实施例中,相对于正如通常所做的在独立的块中存储每个数据片段,为了节约存储空间,***可以允许来自相同的文件***对象或者来自不同文件***对象的多个数据片段(segment)(例如,小于整个块的用户数据片段和/或节点)被打包成单一的块。例如,多达预先确定的数量的节点可以被存储在单一的块中,或者多个数据片段(甚至是与多于一个文件***对象相关联的数据)都可以被存储在单一的块中。
例如,当数据片段请求存储空间时,***并非为数据片段请求且获取整个块,而是可以为数据片段请求并获取一个或多个扇区,其中扇区不必须处于块边界的开始并且可以从现有的部分填充的块中进行分配,并且因此多个数据片段可以共享单一块。对于某类型的数据片段(例如,叶节点是固定大小的)可以以固定大小的增量分配扇区,或者对于其它类型的数据片段(例如,可变大小的用户数据片段)可以以可变大小的增量分配扇区。这样的打包的块基本上由多个实体共享(并且因此由多个实体参考),并且类似于由于去复制导致的可以由多个实体共享(并且因此由多个实体参考)块的方式,不可以删除这样的打包的块直至已经删除在块中包含的所有的数据片段。因此,类似于由于去复制导致的块的共享,***必须能够追踪与该打包的块相关联的参考的编号,例如,使用下面更详细地描述的与用于去复制的相同的参考计数机制。当将数据片段增加至块时,参考计数递增,并且当将数据片段从块中移除时,参考计数递减。
在某些具体示例性实施例中,根节点将被存储在独立的块中并且将不被打包以避免对处理根节点的某应用(utility)(例如,“fixfs”应用)的修改,虽然固定大小的叶节点和可变大小的数据块可以被打包。关于数据块的打包,如果在现有的部分填充的块中没有足够的空间以存储给定的数据片段,则通常数据片段将被存储在新的块中,而非在现有的部分填充的块中存储部分数据片段并在新的块中存储数据片段的剩余部分,虽然某些实施例可以允许这样的数据片段的“分割(splitting)”。
应当指出的是,如本文所讨论的,可以以类似于去复制其它数据块的方式来去复制打包的块。
块参考计数
如以上所讨论的,对于去复制以及数据打包,块可以被两个或者更多实体参考(共享)。因此,需要机制以为每个块追踪参考。通常,使用参考计数追踪参考,并且不可以删除块除非并直至参考计数达到零(即,当删除参考块的最后的实体的时候)。
虽然本发明不限于任意特定的用于为每个块追踪参考计数的机制,但在某些实施例中,使用位图来追踪参考计数,其中该位图具有与每个块关联的多个比特。在某些示例性实施例中,位图是现有的空闲空间位图(FSB)的修改版本,空闲空间位图(FSB)不仅被用于追踪块的状态(例如,使用的块相对空闲的块,其在原始FSB中包括每块的两个比特)也用于追踪参考计数。为方便起见,本文中这样的位图被称为“参考计数位图(Reference CountedBitmap)”或者“RCB”。例如,RCB可以包括每个编码的块的四个或者八个比特,从而体现块的状态(例如,使用的块相对空闲的块)和参考计数。下面仅是一个示例性编码方案,其使用每块八个比特,其允许去复制以及利用每块多达八个根节点来打包的根节点:
-值(value)=0:块没有被分配
-值=[1,239(0xEF)]:正常块或者快照块的参考计数
-值=[240(0xF0),247(0xF7)]:打包的块的参考计数(参考计数1至8)
-值=248(0xF8)至255(0xFF):未使用的/保留的
可选地,可以使用独立的位图或者其它数据结构以追踪每个块的参考计数。增强的去复制
在某些示例性实施例中,当先前索引的组块不再与其原始对象关联(例如,因为与先前索引的组块关联的原始对象已经被删除或者删减)时,去复制的处理不需要被放弃。取而代之地,可以经由包含索引的组块中的块的链接的列表的文件***来维持独立的数据结构。该数据结构可以经文件***被保存在已知的对象中。当如以上所讨论的由去复制检测/索引引擎213检测到复制件时,则该数据结构可以被用于定位与先前索引的组块关联的块,然后其可以被检查以确定该块是否可以被用于去复制候选组块(例如,块的内容没有改变)。如果先前索引的组块被用于去复制候选组块,则与每个块相关联的参考计数递增,并且块随后不可以被释放除非并且直至其不再被参考。
处理多层文件***中的去复制
在某些示例性实施例中,文件***可以是多层文件***(MTFS),例如,在美国专利申请No.13/043,837(2337/128)(其全部内容通过引用合并于此)中所描述的那样。MTFS可以通过将文件***元数据放置在更快的存储器(元数据层)上来改善性能。
优选地,去复制将不允许用户对象共享用于在元数据层的文件***元数据的块,因为如果允许,则有可能甚至在块已经停止作为部分文件***的元数据之后,用户对象可能仍然保持元数据层中的块。
应当指出的是,对于元数据共享在用户数据层中的块一般是可接受的。
处理能复原的对象
某些示例性实施例可以支持所谓的“能复原的(resilient)”对象,其中,能复原的对象是为其存储对象的两个完整拷贝的文件***对象。该能复原的对象可以被去复制,虽然它们不应当以这样的方式被去复制:任意块被两个拷贝共享(这将基本上去除对象的能复原的特性)。因此,当去复制能复原的对象时,***将确保两个拷贝不结束于指向盘上的相同的数据。
NVRAM保留(RESERVATION)
在某些示例性实施例中,在去复制期间执行的修改操作将不被记录至NVRAM。这意味着在崩溃(crash)的情况下,随后的还原(rollback)将清除在最后的检查点之后在文件***中发生的所有的去复制。
多个文件***的去复制
可以以各种方式处理多个文件***的去复制,诸如,例如使用用于多个文件***的单一索引或者使用用于每个文件***的独立的索引。某些示例性实施例将使用后一种方法。
快照恢复文件
在某些示例性实施例中,对象的快照拷贝可以通过在活动的文件***中分配新的对象编号并且然后使得对象的节点树以及块指针与快照中的文件共享,来进行恢复。每个共享的块将需要使其参考计数递增。如果碰到处于其最大参考计数的块,则将拷贝该块,并将活动的对象更新以指向拷贝的块。该新的对象将被***至活动的文件***目录树,如果有需要,允许原始的以及快照恢复的对象共同存在。在根节点中可以包括标记(flag)以表明该对象已经被快照恢复。可以允许活动的对象的修改同时根据需要,递增共享的块的参考计数。用于去复制的可选组块大小
在上述的示例性实施例中,每个组块包括给定的文件***对象的单一的块,从实施的立场来看,其为去复制提供若干简化,这通过可选实施例的下面的讨论将变得清楚,在该实施例中,每个组块包括多个块(例如,每组块四个或者八个块)。
由于对于给定量的分配的内存,去复制检测/索引引擎基本上可以索引固定的数量的组块,因此更大的组块大小允许索引更大量的数据,虽然在一些情况下更大的组块大小可能减少检测复制件的可能性(例如,匹配4K组块的数据的可能性一般可能高于匹配256K组块的数据的可能性)。
在某些具有每组块具有多个块的示例性实施例中,根据预先确定的方案将对象分至组块。例如,对象可以被连续地分至N-块的组块,例如,块1–N,块(N+1)–2N等。
为了将这样的多个块的组块整合至上述的去复制方案中,每个组块必须被分配有检查点编号。在某些示例性实施例中,组块检查点编号是具有最高检查点编号的块的检查点编号。
另外,当去复制多个块的组块时,必须更新与候选组块相关联的对象,以使用来自先前索引的组块的相应的参考来替换在候选组块中所有的块的参考。块参考计数通常将按逐块原则(block-by-block basis)(相对于组块原则)进行处理,以便可以仅仅共享尚未达到最大参考计数的块。
可选的去复制管理
在上述的示例性实施例中,去复制被执行为后台功能,修改的组块的检测以及复制件组块的去复制都是如此。然而,发明人意识到,其它类型的去复制管理也是可能的。例如,在一个可选例中,去复制可以当修改组块是在写入路径中同步发生,从而使得,当写入到来时,由去复制检测/索引引擎哈希并处理组块,并且如果检测到复制件,则作为写入操作的一部分将其去复制。这样的同步的去复制会将等待时间(latency)引入写入路径,这可能负面地影响文件***的性能。在另一可选例中,可以以“混合(hybrid)”同步/异步方式执行去复制,以便当写入到来时,由去复制检测/索引引擎(如同在上述的同步解决方案的那样)哈希并处理组块的同时,组块自己被写入存储器(如同在全后台去复制处理中的那样),并且如果检测到复制件,则稍后在后台将其去复制。
可选的哈希生成器的使用
在本发明的某些实施例中,基于硬件的***220被配置使得可以由基于软件的***和/或由基于硬件的***调用哈希生成器222以用于附加或者代替去复制的其它基于哈希的功能,诸如,例如IPsec、SMB2签名(signing)、HCP外部迁移或者利用SHA-256哈希的其它功能。
其他方面
上面描述了去复制以及数据打包特征。这些机制应当彼此互相排他地进行考虑,即,某些实施例可能实施去复制而非数据打包,某些其它实施例可能实施数据打包而非去复制,并且还有其它实施例可能实施去复制以及数据打包两者。优选地,在示例性实施例中,实施能够被用于去复制以及数据打包两者的参考计数机制(例如,参考计数位图或者其它机制),以例如允许将来一个或者两个特性的增加。
虽然上面参考整合至基于软件的***210的商业可用的去复制检测/索引引擎对示例性实施例进行了描述,但是应当指出的是,可以实施各种可选实施例,其中去复制检测/索引引擎作为基于软件的去复制管理器的一部分或者作为基于硬件的文件***管理器的一部分。当去复制检测/索引引擎被实施为基于硬件的文件***管理器的一部分时,在为候选组块生成哈希值之后,基于硬件的文件***管理器通常将调用去复制检测/索引引擎,而不将哈希值传递至基于软件的去复制管理器。
应当指出的是,可以在图中使用箭头以表示通信、传递,或者涉及两个或者更多实体的其它活动。双端箭头一般表示活动可以在双向发生(例如,在一个方向的命令/请求以及在另一方向的对应的响应,或者由任一实体发起的点对点的通信),虽然在一些情况下,活动可以不必在双向发生。单端箭头一般表示活动专门或者主要在一个方向,虽然应当指出的是,在某些情况下,这样的方向性的活动实际可能涉及双向的活动(例如,从发送器至接收器的消息以及从接收器至发送器返回的确认,或者早于传递的连接的建立以及传递之后的连接的终止)。因此,表示具体的活动的在具体的图中使用的箭头的类型是示例性的而不应当被视为限制性的。
应当指出的是,为方便起见,上面使用了标题,不应以任意方式将其解释为限制本发明。
应当指出的是,在本文中可以使用诸如“客户端”以及“服务器”的术语以描述在本发明的某些实施例中可能使用的设备,不应当将其解释为将本发明限制至任意特定的设备类型,除非上下文另有需要。因此,设备可以包括而不限于节点、服务器、计算机、装置或者其它类型的设备。该设备通常包括一个或多个网络接口,其用于通信网络上的通信以及相应地配置为执行设备功能的处理器(例如,具有内存以及其它外设和/或特定应用硬件的微处理器)。通信网络一般可以包括公共和/或私人网络;可以包括局域、广域、城域存储和/或其它类型的网络;还可以采用通信技术,包括而不限于模拟技术、数字技术、光学技术、无线技术(例如,蓝牙)、网络技术以及互联网技术。
还应当注意的是,设备可以使用通信协议和消息(例如,由设备创建、发送、接收、存储和/或处理的消息),并且这样的消息可以由通信网络或者媒介传递。除非上下文另有需要,本发明不应当被解释为限于任意特定的通信消息类型,通信消息格式,或者通信协议。因此,通信消息一般可以包括而不限于,帧、包、数据报、用户数据报、单元、或者其它类型的通信消息。除非上下文另有需要,对特定通信协议的参考是示例性的,并且应当理解的是,可选实施例可以适当地采用该通信协议的变型(例如,随时间进行的协议的修改或者延伸)或者将来已知的或者开发的其它协议。
还应当注意的是,本文中可能对逻辑流进行了描述以说明本发明的各个方面,其不应当被解释为将本发明限定至任意特定的逻辑流或者逻辑实施。描述的逻辑可以被划分成不同的逻辑块(例如,程序、模块、功能或者子程序)而不改变总体的结果或者脱离本发明的真正保护范围。通常,可以使用不同逻辑构造(例如,逻辑门、循环元、条件逻辑以及其它逻辑构造)实施,或者以不同的顺序增加、修改、省略、执行逻辑要素,而不改变总体的结果或者脱离本发明的真正保护范围。
上述的示例性实施例包括用于处理器(例如,微处理器、微控制器、数字信号处理器或者通用目的计算机)使用的计算机程序逻辑和基于硬件的逻辑。基于硬件的逻辑可以包括用于可编程的逻辑设备(例如,现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其它PLD)、独立组件、集成电路(例如,特定应用集成电路(ApplicationSpecific Integrated Circuit,ASIC)),或者包括它们的任意组合的任意其它装置来使用的可编程的逻辑。计算机程序逻辑实施一些或全部的描述的功能,通常是被实施为计算机程序指令的集合,其中,计算机程序指令被转换为计算机可执行的形式,如此存储在计算机可读介质中,并且在操作***的控制下由微处理器执行。基于硬件的逻辑实施一些或全部的描述的功能,可以使用一个或多个适当配置的FPGA来进行实施。
计算机程序逻辑实施本文中先前的描述的所有或者部分的功能可以体现为各种形式,包括但不限于源代码形式、计算机可执行形式以及各种中间形式(例如,由汇编器、编译器、链接器或者***生成的形式)。源代码可以包括用于各种操作***或者操作环境使用的以任意的各种程序语言(例如,对象代码、汇编语言或者高级语言,诸如Fortran,C,C++,JAVA,或者HTML)实施的一系列计算机程序指令。源代码可以定义并且使用各种数据结构以及通信消息。源代码可以处于计算机可执行形式(例如,经由解释器),或者源代码可以(例如,经由翻译器,汇编器,或者编译器)被转换至计算机可执行形式。
计算机程序逻辑实施所有或者部分的本文先前的描述功能可以在单一处理器上(例如,并行地)在不同时间进行执行,或者可以在多个处理器上在相同的或者不同时间进行执行,并且可以在单一操作***进程/线程或者在不同操作***进程/线程下运行。因此,术语“计算机处理”一般是指计算机程序指令集合的执行,而不管不同的计算机进程是否在相同的或者不同处理器上进行执行,并且不管不同的计算机进程是否运行在相同的操作***进程/线程或者不同操作***进程/线程下。
可以以任意形式(例如,源代码形式、计算机可执行形式或者中间形式)或永久地或暂时地在有形的存储介质诸如半导体存储器设备(例如,RAM、ROM、PROM、EEPROM、或者快闪可编程的(Flash-Programmable)RAM)、电磁存储器设备(例如,软盘或者固定的盘)、光学存储器设备(例如,CD-ROM)、PC卡(例如,PCMCIA卡)或者其它存储器设备中固定计算机程序。可以以任意形式以信号固定计算机程序,其中,所述信号使用任意的各种通信技术可发送至计算机,所述通信技术包括但不限于模拟技术、数字技术、光学技术、无线技术(例如,蓝牙)、网络技术、以及互联网技术。计算机程序可以以任意形式分发为可移动存储介质以及打印的或者电子文档(例如,压缩包装软件),用计算机***预加载(例如,在***ROM或者固定的盘上),或者经通信***(例如,因特网或者万维网)从服务器或电子公告板分发。
硬件逻辑(包括用于可编程的逻辑设备使用的可编程的逻辑)实施本文中先前的描述的所有或者部分的功能可以使用传统的手动方法来设计,或者使用各种工具诸如计算机辅助设计(CAD)、硬件描述语言(例如,VHDL或AHDL)或PLD编程语言(例如,PALASM,ABEL或CUPL)进行设计、捕获、模拟或电子地记载。
可以或永久地或暂时地在有形的存储介质诸如半导体存储器设备(例如,RAM、ROM、PROM、EEPROM、或者快闪可编程的(Flash-Programmable)RAM)、电磁存储器设备(例如,软盘或者固定的盘)、光学存储器设备(例如,CD-ROM)、或者其它存储器设备中固定可编程的逻辑。可以以信号固定可编程的逻辑,其中,所述信号使用任意的各种通信技术可发送至计算机,所述通信技术包括但不限于模拟技术、数字技术、光学技术、无线技术(例如,蓝牙)、网络技术、以及互联网技术。可编程的逻辑可以分发为可移动存储介质以及打印的或者电子文档(例如,压缩包装软件),用计算机***预加载(例如,在***ROM或者固定的盘上),或者经通信***(例如,因特网或者万维网)从服务器或电子公告板分发。当然,本发明的一些实施例可以被实施为软件(例如,计算机程序产品)以及硬件的组合。而本发明的其它实施例被实施为整体硬件或者整体软件。
本发明可以以其他特定形式来体现而不脱离本发明的真正范围,并且基于这里的教导对于本领域技术人员许多变化和修改将是清楚的。对“本发明”的任何引用都意在指本发明的示例性实施例,并且不应被解释为是指本发明的所有实施例,除非上下文另有要求。在所有方面都应仅是说明性地而不是限制性地考虑所述实施例。
Claims (13)
1.一种文件***服务器,包括:
计算机***(210),其包括处理器,所述处理器被配置为执行操作***和在所述操作***上执行的软件部件,所述软件部件包括去复制管理部件(212);以及
可编程逻辑设备(220),其与所述计算机***接口并且包括被配置为管理文件***的文件***管理单元(221);
所述文件***服务器被配置为执行去复制在包括所述文件***服务器的数据存储***中的数据,包括执行如下处理:
-从与所述文件***相关的数据的多个数据单元当中,识别通过所述计算机***(210)进行去复制的候选数据单元;
-通过所述计算机***(210)请求所述可编程逻辑设备(220)发送所识别出的候选数据单元的哈希值;
-通过所述可编程逻辑设备(220)向所述计算机***(210)返回所请求的所识别出的候选数据单元的哈希值;以及
-当基于所接收到的哈希值确定所识别出的候选数据单元是先前索引的数据单元的复制件时,通过所述计算机***(210)请求所述可编程逻辑设备(220)去复制所识别出的候选数据单元,
其中,所述去复制是指消除所识别出的候选数据单元,
其中,所述文件***服务器进一步被配置为执行如下处理:
通过所述计算机***(210)制作所述文件***的快照拷贝;以及
通过所述计算机***(210)从通过所述可编程逻辑设备(220)管理的所述文件***的多个检查点当中确定用于去复制的检查点范围;
其中,所述识别通过所述计算机***(210)进行去复制的候选数据单元是基于所确定的检查点范围而在所述快照拷贝中执行的。
2.根据权利要求1所述的文件***服务器,其中,所述文件***服务器进一步被配置为执行如下处理:
当所述候选数据单元匹配先前索引的数据单元时,通过所述计算机***(210)提供所述先前索引的数据单元的元数据;以及
基于所提供的元数据,通过所述可编程逻辑设备(220)验证是否能够使用先前索引的数据单元在所述文件***中去复制所述候选数据单元。
3.根据权利要求1所述的文件***服务器,其中,当确定能够使用先前索引的数据单元在所述文件***中去复制所述候选数据单元时,所述文件***服务器进一步被配置为执行如下处理:
通过所述可编程逻辑设备(220)使用与先前索引的数据单元相关联的对应的指针来替换与所述候选数据单元相关联的多个指针中的每一个指针。
4.根据权利要求1所述的文件***服务器,其中,
所述候选数据单元包括来自给定的文件***对象的单一文件***块;或者
所述候选数据单元包括来自给定的文件***对象的多个文件***块。
5.根据权利要求2所述的文件***服务器,其中,
所述验证是否能够在所述文件***中去复制所述候选数据单元至少部分基于与所述候选数据单元相关联的检查点编号以及与先前索引的数据单元相关联的检查点编号。
6.根据权利要求2所述的文件***服务器,其中,
所述验证是否能够在所述文件***中去复制所述候选数据单元至少部分基于与先前索引的数据单元相关联的参考计数。
7.根据权利要求3所述的文件***服务器,其中,
所述使用与先前索引的数据单元相关联的对应的指针来替换与所述候选数据单元相关联的多个指针中的每一个指针包括:增加与每个对应的指针相关联的参考计数。
8.根据权利要求1所述的文件***服务器,其中,所述识别通过所述计算机***(210)进行去复制的候选数据单元包括:
检查文件***对象的根节点中的创建检查点;以及
至少部分基于所述创建检查点来确定所述文件***对象是否包括任何候选数据单元。
9.根据权利要求8所述的文件***服务器,其中,所述确定所述文件***对象是否包括任何候选数据单元包括:
当所述创建检查点处于检查点范围之内并且所述文件***对象不是克隆的对象时,确定与所述文件***对象相关联的所有数据单元是候选数据单元;
当所述创建检查点处于检查点范围之内并且所述文件***对象是克隆的对象时,遍历对象树结构以识别已经脱离从中克隆所述文件***对象的原始对象的任何数据单元;以及
当所述创建检查点超出检查点范围时,遍历所述对象树结构以识别在检查点范围内具有修改检查点的任何数据单元。
10.根据权利要求8所述的文件***服务器,其中,所述确定所述文件***对象是否包括任何候选数据单元包括:
当所述创建检查点处于检查点范围内,所述文件***对象不是克隆的对象,且所述文件***对象不是稀疏的对象时,确定与所述文件***对象相关联的所有数据单元是候选数据单元;
当所述创建检查点处于检查点范围内,所述文件***对象不是克隆的对象,且所述文件***对象是稀疏的对象时,遍历对象树结构以识别不稀疏的任何候选数据单元;
当所述创建检查点处于检查点范围内且所述文件***对象是克隆的对象时,遍历所述对象树结构以识别已经脱离从中克隆所述文件***对象的原始对象的任何候选数据单元;以及
当所述创建检查点超出检查点范围时,遍历所述对象树结构以识别在检查点范围内具有修改检查点的任何候选数据单元。
11.根据权利要求1所述的文件***服务器,其中,所述文件***服务器进一步被配置为执行如下处理:
当所述候选数据单元匹配先前索引的数据单元时,通过所述计算机***(210)提供所述先前索引的数据单元的元数据;以及
当先前索引的数据单元被确定为不可用于去复制时,基于与所述候选数据单元相关联的所提供的元数据以及哈希值,索引所述候选数据单元。
12.一种用于去复制在包括文件***服务器的数据存储***中的数据的方法,其中所述文件***服务器包括:
计算机***(210),其包括处理器,所述处理器被配置为执行操作***和在所述操作***上执行的软件部件,所述软件部件包括去复制管理部件(212);以及
可编程逻辑设备(220),其与计算机***接口并且包括被配置为管理文件***的文件***管理单元(221);
所述方法包括:
-从与所述文件***相关的数据的多个数据单元当中,识别通过所述计算机***(210)进行去复制的候选数据单元;
-通过所述计算机***(210)请求所述可编程逻辑设备(220)发送所识别出的候选数据单元的哈希值;
-通过所述可编程逻辑设备(220)向所述计算机***(210)返回所请求的所识别出的候选数据单元的哈希值;
-当基于所接收到的哈希值确定所识别出的候选数据单元是先前索引的数据单元的复制件时,通过所述计算机***(210)请求所述可编程逻辑设备(220)去复制所识别出的候选数据单元,
其中,所述去复制是指消除所识别出的候选数据单元,
其中,所述文件***服务器进一步被配置为执行如下处理:
通过所述计算机***(210)制作所述文件***的快照拷贝;以及
通过所述计算机***(210)从通过所述可编程逻辑设备(220)管理的所述文件***的多个检查点当中确定用于去复制的检查点范围;
其中,所述识别通过所述计算机***(210)进行去复制的候选数据单元是基于所确定的检查点范围而在所述快照拷贝中执行的。
13.一种数据存储***,包括:
一个或多个根据权利要求1-11中任一项所述的文件***服务器;以及
多个客户端计算机,其经由通信网络与所述一个或多个文件***服务器可通信地连接。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2012/056032 WO2014046650A1 (en) | 2012-09-19 | 2012-09-19 | System and method for managing deduplication using checkpoints in a file storage system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104641365A CN104641365A (zh) | 2015-05-20 |
CN104641365B true CN104641365B (zh) | 2019-05-31 |
Family
ID=50341791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280075854.5A Active CN104641365B (zh) | 2012-09-19 | 2012-09-19 | 在文件存储***中使用检查点管理去复制的***和方法 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10176189B2 (zh) |
EP (1) | EP2898424B8 (zh) |
JP (1) | JP5925968B2 (zh) |
CN (1) | CN104641365B (zh) |
WO (1) | WO2014046650A1 (zh) |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2997497B1 (en) * | 2013-05-16 | 2021-10-27 | Hewlett Packard Enterprise Development LP | Selecting a store for deduplicated data |
US10496490B2 (en) | 2013-05-16 | 2019-12-03 | Hewlett Packard Enterprise Development Lp | Selecting a store for deduplicated data |
US20140372717A1 (en) * | 2013-06-18 | 2014-12-18 | Microsoft Corporation | Fast and Secure Virtual Machine Memory Checkpointing |
US10223208B2 (en) * | 2013-08-13 | 2019-03-05 | Sandisk Technologies Llc | Annotated atomic write |
US9772789B1 (en) * | 2014-03-25 | 2017-09-26 | EMC IP Holding Company LLC | Alignment fixing on a data protection system during continuous data replication to deduplicated storage |
US10027547B1 (en) * | 2014-03-28 | 2018-07-17 | EMC IP Holding Company LLC | Autonomic self-optimization of protection storage |
US10198321B1 (en) * | 2014-04-01 | 2019-02-05 | Storone Ltd. | System and method for continuous data protection |
CN105446964B (zh) * | 2014-05-30 | 2019-04-26 | 国际商业机器公司 | 用于文件的重复数据删除的方法及装置 |
WO2016050315A1 (en) | 2014-10-02 | 2016-04-07 | Hitachi Data Systems Engineering UK Limited | Method and an apparatus, and related computer-program products, for managing access request in multi-tenancy environments |
KR101960339B1 (ko) * | 2014-10-21 | 2019-03-20 | 삼성에스디에스 주식회사 | 파일 동기화 방법 |
US10061834B1 (en) * | 2014-10-31 | 2018-08-28 | Amazon Technologies, Inc. | Incremental out-of-place updates for datasets in data stores |
US9830342B2 (en) * | 2014-11-20 | 2017-11-28 | International Business Machines Corporation | Optimizing database deduplication |
US10248623B1 (en) * | 2015-03-30 | 2019-04-02 | EMC IP Holding Company LLC | Data deduplication techniques |
US9612749B2 (en) * | 2015-05-19 | 2017-04-04 | Vmware, Inc. | Opportunistic asynchronous deduplication using an in-memory cache |
CN105094924B (zh) * | 2015-08-21 | 2018-06-26 | 华为技术有限公司 | 镜像文件的导入方法及装置 |
US9703643B2 (en) * | 2015-11-25 | 2017-07-11 | International Business Machines Corporation | Calculation of representative values for similarity units in deduplication of snapshots data |
US10585611B2 (en) * | 2016-04-26 | 2020-03-10 | Netapp Inc. | Inline deduplication |
CN111427855B (zh) * | 2016-09-28 | 2024-04-12 | 华为技术有限公司 | 一种存储***中重复数据删除方法、存储***及控制器 |
WO2018075042A1 (en) * | 2016-10-20 | 2018-04-26 | Hitachi, Ltd. | Data storage system, process, and computer program for de-duplication of distributed data in a scalable cluster system |
US11644992B2 (en) * | 2016-11-23 | 2023-05-09 | Samsung Electronics Co., Ltd. | Storage system performing data deduplication, method of operating storage system, and method of operating data processing system |
US11416447B2 (en) * | 2017-06-08 | 2022-08-16 | Hitachi Vantara Llc | Deduplicating distributed erasure coded objects |
US10521400B1 (en) * | 2017-07-31 | 2019-12-31 | EMC IP Holding Company LLC | Data reduction reporting in storage systems |
CA3071965C (en) * | 2017-08-10 | 2024-01-16 | Shardsecure, Inc. | Method for securing data utilizing microshard fragmentation |
US10884868B2 (en) * | 2017-10-05 | 2021-01-05 | Zadara Storage, Inc. | Dedupe as an infrastructure to avoid data movement for snapshot copy-on-writes |
US10776256B2 (en) * | 2018-05-16 | 2020-09-15 | International Business Machines Corporation | Sharing consumed off-heap for parallel data loading |
CN109522291B (zh) * | 2018-11-29 | 2022-06-21 | 郑州云海信息技术有限公司 | 一种迁移文件***的方法、装置以及计算机可读存储介质 |
US20200311030A1 (en) * | 2019-03-28 | 2020-10-01 | EMC IP Holding Company LLC | Optimizing file system defrag for deduplicated block storage |
US11429573B2 (en) * | 2019-10-16 | 2022-08-30 | Dell Products L.P. | Data deduplication system |
CN111078276B (zh) * | 2019-12-20 | 2022-12-30 | 抖音视界有限公司 | 应用程序的冗余资源处理方法、装置、设备及存储介质 |
CN111104206B (zh) * | 2019-12-25 | 2023-09-01 | 曙光信息产业(北京)有限公司 | 虚拟机存储迁移方法、装置和计算机设备 |
US11468012B2 (en) * | 2020-02-28 | 2022-10-11 | EMC IP Holding Company LLC | Garbage collection assisted deduplication in a log structured file system |
US11093442B1 (en) * | 2020-03-25 | 2021-08-17 | EMC IP Holding Company LLC | Non-disruptive and efficient migration of data across cloud providers |
US11321278B2 (en) * | 2020-04-29 | 2022-05-03 | Rubrik, Inc. | Light-weight index deduplication and hierarchical snapshot replication |
CN111639008B (zh) * | 2020-05-29 | 2023-08-25 | 杭州海康威视***技术有限公司 | 基于双端口ssd的文件***状态监测方法、装置及电子设备 |
US11537526B2 (en) * | 2020-09-10 | 2022-12-27 | Micron Technology, Inc. | Translating of logical address to determine first and second portions of physical address |
US11500819B2 (en) | 2020-09-22 | 2022-11-15 | Vmware, Inc. | Supporting deduplication in file storage using file chunk hashes |
US11385817B2 (en) | 2020-09-22 | 2022-07-12 | Vmware, Inc. | Supporting deduplication in object storage using subset hashes |
CN115033525B (zh) * | 2021-03-05 | 2023-06-09 | 荣耀终端有限公司 | 文件***管理方法及电子设备 |
CN113721861B (zh) * | 2021-11-01 | 2022-02-08 | 深圳市杉岩数据技术有限公司 | 基于定长块的数据存储实现方法和计算机可读存储介质 |
US20230409522A1 (en) | 2022-06-16 | 2023-12-21 | Oracle International Corporation | Scalable and secure cross region and optimized file system delta transfer for cloud scale |
WO2023244491A1 (en) * | 2022-06-16 | 2023-12-21 | Oracle International Corporation | Techniques for replication checkpointing during disaster recovery |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE390788T1 (de) | 1999-10-14 | 2008-04-15 | Bluearc Uk Ltd | Vorrichtung und verfahren zur hardware-ausführung oder hardware-beschleunigung von betriebssystemfunktionen |
US7457822B1 (en) * | 2002-11-01 | 2008-11-25 | Bluearc Uk Limited | Apparatus and method for hardware-based file system |
US8041735B1 (en) | 2002-11-01 | 2011-10-18 | Bluearc Uk Limited | Distributed file system and method |
US8165221B2 (en) * | 2006-04-28 | 2012-04-24 | Netapp, Inc. | System and method for sampling based elimination of duplicate data |
US7921077B2 (en) * | 2006-06-29 | 2011-04-05 | Netapp, Inc. | System and method for managing data deduplication of storage systems utilizing persistent consistency point images |
US8762345B2 (en) * | 2007-05-31 | 2014-06-24 | Netapp, Inc. | System and method for accelerating anchor point detection |
US9767120B2 (en) * | 2008-01-16 | 2017-09-19 | Hitachi Data Systems Engineering UK Limited | Multi-way checkpoints in a data storage system |
US8190835B1 (en) * | 2007-12-31 | 2012-05-29 | Emc Corporation | Global de-duplication in shared architectures |
US20090193210A1 (en) | 2008-01-29 | 2009-07-30 | Hewett Jeffrey R | System for Automatic Legal Discovery Management and Data Collection |
US8117464B1 (en) * | 2008-04-30 | 2012-02-14 | Netapp, Inc. | Sub-volume level security for deduplicated data |
US9063947B2 (en) * | 2008-08-18 | 2015-06-23 | Hewlett-Packard Development Company, L.P. | Detecting duplicative hierarchical sets of files |
US8626723B2 (en) * | 2008-10-14 | 2014-01-07 | Vmware, Inc. | Storage-network de-duplication |
JP5162701B2 (ja) * | 2009-03-05 | 2013-03-13 | 株式会社日立ソリューションズ | 統合重複排除システム、データ格納装置、及びサーバ装置 |
US9009429B2 (en) * | 2009-03-30 | 2015-04-14 | Hewlett-Packard Development Company, L.P. | Deduplication of data stored in a copy volume |
US8205065B2 (en) * | 2009-03-30 | 2012-06-19 | Exar Corporation | System and method for data deduplication |
US8095756B1 (en) * | 2009-04-28 | 2012-01-10 | Netapp, Inc. | System and method for coordinating deduplication operations and backup operations of a storage volume |
BRPI1013794A8 (pt) * | 2009-06-26 | 2017-10-10 | Simplivity Corp | Método de adaptar um processo de indexação de acesso uniforme com uma memória de acesso não uniforme e sistema de computador |
US8032498B1 (en) * | 2009-06-29 | 2011-10-04 | Emc Corporation | Delegated reference count base file versioning |
US8171063B1 (en) * | 2009-06-30 | 2012-05-01 | Symantec Corporation | System and method for efficiently locating and processing data on a deduplication storage system |
US8234250B1 (en) * | 2009-09-17 | 2012-07-31 | Netapp. Inc. | Processing data of a file using multiple threads during a deduplication gathering phase |
US8595188B2 (en) | 2009-11-06 | 2013-11-26 | International Business Machines Corporation | Operating system and file system independent incremental data backup |
US9239843B2 (en) * | 2009-12-15 | 2016-01-19 | Symantec Corporation | Scalable de-duplication for storage systems |
US8738668B2 (en) * | 2009-12-16 | 2014-05-27 | Renew Data Corp. | System and method for creating a de-duplicated data set |
US8407193B2 (en) | 2010-01-27 | 2013-03-26 | International Business Machines Corporation | Data deduplication for streaming sequential data storage applications |
US8843459B1 (en) | 2010-03-09 | 2014-09-23 | Hitachi Data Systems Engineering UK Limited | Multi-tiered filesystem |
US8370593B2 (en) * | 2010-04-14 | 2013-02-05 | Hitachi, Ltd. | Method and apparatus to manage groups for deduplication |
US8898114B1 (en) * | 2010-08-27 | 2014-11-25 | Dell Software Inc. | Multitier deduplication systems and methods |
EP2787439B1 (en) * | 2010-11-22 | 2016-04-27 | Hitachi Data Systems Engineering UK Limited | File cloning and de-cloning in a data storage system |
US8930653B1 (en) * | 2011-04-18 | 2015-01-06 | American Megatrends, Inc. | Data de-duplication for information storage systems |
US8782003B1 (en) * | 2011-05-13 | 2014-07-15 | Emc Corporation | Synchronization of storage using log files and snapshots |
CN108664555A (zh) * | 2011-06-14 | 2018-10-16 | 慧与发展有限责任合伙企业 | 分布式文件***中的去重复 |
US8521705B2 (en) * | 2011-07-11 | 2013-08-27 | Dell Products L.P. | Accelerated deduplication |
US8832035B2 (en) * | 2011-08-30 | 2014-09-09 | Netapp, Inc. | System and method for retaining deduplication in a storage object after a clone split operation |
US8543609B1 (en) * | 2011-09-29 | 2013-09-24 | Emc Corporation | Snapshots in deduplication |
US8521704B2 (en) * | 2011-09-30 | 2013-08-27 | Symantec Corporation | System and method for filesystem deduplication using variable length sharing |
-
2012
- 2012-09-19 WO PCT/US2012/056032 patent/WO2014046650A1/en active Application Filing
- 2012-09-19 JP JP2015533024A patent/JP5925968B2/ja active Active
- 2012-09-19 CN CN201280075854.5A patent/CN104641365B/zh active Active
- 2012-09-19 EP EP12884949.4A patent/EP2898424B8/en active Active
- 2012-09-19 US US14/429,185 patent/US10176189B2/en active Active
-
2016
- 2016-02-17 US US15/045,946 patent/US9928250B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US9928250B2 (en) | 2018-03-27 |
US20150234710A1 (en) | 2015-08-20 |
EP2898424B8 (en) | 2019-08-21 |
EP2898424A1 (en) | 2015-07-29 |
JP5925968B2 (ja) | 2016-05-25 |
WO2014046650A1 (en) | 2014-03-27 |
EP2898424A4 (en) | 2017-02-08 |
US20160162509A1 (en) | 2016-06-09 |
EP2898424B1 (en) | 2019-07-17 |
US10176189B2 (en) | 2019-01-08 |
CN104641365A (zh) | 2015-05-20 |
JP2015534684A (ja) | 2015-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104641365B (zh) | 在文件存储***中使用检查点管理去复制的***和方法 | |
US10942813B2 (en) | Cloud object data layout (CODL) | |
US9043540B2 (en) | Systems and methods for tracking block ownership | |
US8751515B1 (en) | System and method for file-based virtual machine incremental backup | |
EP2959373B1 (en) | Object-level replication of cloned objects in a data storage system | |
US8849759B2 (en) | Unified local storage supporting file and cloud object access | |
US9996429B1 (en) | Mountable container backups for files | |
US8386733B1 (en) | Method and apparatus for performing file-level restoration from a block-based backup file stored on a sequential storage device | |
US8527455B2 (en) | Seeding replication | |
US20180267985A1 (en) | Management of cloned objects in file systems | |
CN110062925A (zh) | 用于云集成的快照元数据布置 | |
US10311152B2 (en) | System for queue based object cloning | |
US20150052366A1 (en) | Efficient data rehydration | |
US10078555B1 (en) | Synthetic full backups for incremental file backups | |
US7552146B1 (en) | Method and apparatus for offline and online consistency checking of aggregates and flexible volumes | |
US7899795B1 (en) | Method and system for recovering lost data volumes | |
US9183212B2 (en) | Representing directory structure in content-addressable storage systems | |
US10380141B1 (en) | Fast incremental backup method and system | |
US9727588B1 (en) | Applying XAM processes | |
US10387384B1 (en) | Method and system for semantic metadata compression in a two-tier storage system using copy-on-write | |
US7685186B2 (en) | Optimized and robust in-place data transformation | |
EP3998533B1 (en) | On-demand parallel processing of objects using data connector components | |
US11392543B2 (en) | System and method for optimizing capacity and performance for sparse snapshots | |
CN118159954A (zh) | 用于对具有分层命名空间的文件***上的操作进行排序的方法和*** | |
Appuswamy et al. | File-level, host-side flash caching with loris |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20190424 Address after: American California Applicant after: Hitachi Data Management Co. Ltd. Address before: Burke County, England Applicant before: HITACHI DATA SYSTEM ENGINEERING UK LTD. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |