在文件存储系统中使用检查点管理去复制的系统和方法
【技术领域】
[0001]本发明总体上涉及文件存储系统,尤其涉及文件存储系统中的去复制。
【背景技术】
[0002]去复制(deduplicat1n)是一种用于提高存储利用率的机制。它主要包括识别数据存储系统中的重复的数据组块(chunk)并消除重复件,同时只保持该数据的单个拷贝以及该单个拷贝的参考。其中,去复制减少了例如在磁盘上和/或固态存储器上存储数据所需的空间的量。
【发明内容】
[0003]在第一示例性实施例中,提供了一种去复制文件存储系统中的数据的方法,所述文件存储系统运行活动的文件系统,所述文件存储系统具有基于软件的系统以及基于硬件的系统,所述基于软件的系统包括被配置为与去复制检测/索引引擎接口的基于软件的去复制管理器,所述基于硬件的系统包括基于硬件的文件系统管理器以及哈希生成器,所述活动的文件系统由一系列检查点进行描绘。所述方法涉及:由所述基于软件的去复制管理器制作所述文件系统的快照拷贝;由所述基于软件的去复制管理器确定用于去复制的检查点范围;由所述基于软件的去复制管理器基于所述检查点范围在所述快照拷贝中识别候选组块;由所述基于软件的去复制管理器向所述基于硬件的文件系统管理器请求,使用所述哈希生成器哈希所述候选组块,所述基于硬件的文件系统管理器向所述基于软件的去复制管理器返回所述候选组块的哈希值以及组块元数据;由所述基于软件的去复制管理器向所述去复制检测/索引引擎发送所述候选组块的哈希值,以及当所述候选组块匹配先前索引的组块时,由所述基于软件的去复制管理器从所述去复制检测/索引引擎接收先前索引的组块的组块元数据;基于所述先前索引的组块的组块元数据,由所述基于软件的去复制管理器向所述基于硬件的文件系统管理器请求所述候选组块的去复制;基于所述组块元数据,由所述基于硬件的文件系统管理器验证是否能够使用先前索引的组块在活动的文件系统中去复制所述候选组块;并且一旦确定能够使用先前索引的组块在活动的文件系统中去复制所述候选组块,则使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针。
[0004]在第二示例性实施例中,提供了一种文件存储系统,其运行活动的文件系统,所述活动的文件系统由一系列检查点进行描绘。所述文件存储系统包括:基于软件的系统,包括被配置为与去复制检测/索引引擎接口的基于软件的去复制管理器;以及基于硬件的系统,包括基于硬件的文件系统管理器以及哈希生成器。所述基于软件的去复制管理器被配置为(I)制作所述文件系统的快照拷贝,(2)确定用于去复制的检查点范围,(3)基于所述检查点范围在所述快照拷贝中识别候选组块,(4)请求所述基于硬件的文件系统管理器使用所述哈希生成器哈希所述候选组块,所述基于硬件的文件系统管理器向所述基于软件的去复制管理器返回所述候选组块的哈希值以及组块元数据,(5)向所述去复制检测/索引引擎发送所述候选组块的哈希值,并且当所述候选组块匹配先前索引的组块时,从所述去复制检测/索引引擎接收先前索引的组块的组块元数据,并且(6)请求所述基于硬件的文件系统管理器基于所述先前索引的组块的组块元数据,去复制所述候选组块。所述基于硬件的文件系统管理器被配置为(I)基于所述组块元数据,验证是否能够使用先前索引的组块在活动的文件系统中去复制所述候选组块;并且(2) —旦确定能够使用先前索引的组块在活动的文件系统中去复制所述候选组块,则使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针。
[0005]在各种可选实施例中,所述候选组块包括来自给定的文件系统对象的单一文件系统块(block),或者包括来自给定的文件系统对象的多个文件系统块。
[0006]在各种可选实施例中,验证是否能够在活动的文件系统中去复制所述候选组块至少部分基于与所述候选组块相关联的检查点编号以及与先前索引的组块相关联的检查点编号,和/或至少部分基于与先前索引的组块的块相关联的参考计数。
[0007]在各种可选实施例中,所述使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针包括:增加与每个对应的指针相关联的参考计数。
[0008]在各种可选实施例中,所述基于所述检查点范围在所述快照拷贝中识别候选组块包括:检查文件系统对象的根节点中的创建检查点;并且至少部分基于所述创建检查点来确定所述文件系统对象是否包括任何候选组块。所述确定所述文件系统对象是否包括任何候选组块包括:当所述创建检查点处于检查点范围之内并且所述文件系统对象不是克隆的对象时,确定与所述文件系统对象相关联的所有组块是候选组块;当所述创建检查点处于检查点范围之内并且所述文件系统对象是克隆的对象时,遍历对象树结构以识别已经脱离从中克隆所述文件系统对象的原始对象的任何组块;并且当所述创建检查点超出检查点范围时,遍历对象树结构以识别在检查点范围内具有修改检查点的任何组块。或者,所述确定所述文件系统对象是否包括任何候选组块包括:当所述创建检查点处于检查点范围内,所述文件系统对象不是克隆的对象,且所述文件系统对象不是稀疏的对象时,确定与所述文件系统对象相关联的所有组块是候选组块;当所述创建检查点处于检查点范围内,所述文件系统对象不是克隆的对象,且所述文件系统对象是稀疏的对象时,遍历对象树结构以识别不稀疏的任何候选组块;当所述创建检查点处于检查点范围内,且所述文件系统对象是克隆的对象时,遍历所述对象树结构以识别已经脱离从中克隆所述文件系统对象的原始对象的任何候选组块;并且当所述创建检查点超出检查点范围时,遍历对象树结构以识别在检查点范围内具有修改检查点的任何候选组块。
[0009]在各种可选实施例中,当先前索引的组块被确定为不可用于去复制时,基于与所述候选组块相关联的组块元数据以及哈希值,索引所述候选组块。
[0010]在另一示例性实施例中,提供了一种装置,包括具有体现于其中的计算机程序的有形的、非瞬态计算机可读介质,所述程序用于去复制文件存储系统中的数据,所述文件存储系统运行活动的文件系统,所述活动的文件系统由一系列检查点进行描绘,所述计算机程序包括指令,当运行于所述文件存储系统的计算机处理器上时,该指令使得所述计算机处理器执行包括以下的处理:制作所述文件系统的快照拷贝;确定用于去复制的检查点范围;基于所述检查点范围在所述快照拷贝中识别候选组块;向所述基于硬件的文件系统管理器发送请求,请求哈希所述候选组块;从所述基于硬件的文件系统管理器接收所述候选组块的组块元数据以及哈希值;基于所述哈希值,确定所述候选组块是否是先前索引的组块的复制件;并且当所述候选组块被确定为是先前索引的组块的复制件时,向所述基于硬件的文件系统管理器发送请求去复制所述候选组块,所述请求包括先前索引的组块的组块元数据。
[0011]在又一示例性实施例中,提供了一种用于去复制文件存储系统中的数据的装置,所述文件存储系统运行活动的文件系统,所述活动的文件系统由一系列检查点进行描绘,所述装置包括:哈希生成器;以及基于硬件的文件系统管理器,其被配置为接收来自基于软件的去复制管理器的用于哈希候选组块的请求,基于与所述候选组块相关联的检查点编号确定是否哈希所述候选组块,一旦确定哈希所述候选组块,调用所述哈希生成器哈希所述组块,向所述基于软件的去复制管理器返回所述候选组块的组块元数据以及哈希值,接收来自所述基于软件的去复制管理器的去复制所述候选组块的请求,基于先前索引的组块验证在活动的文件系统中是否能够去复制所述候选组块,并且,一旦使用所述先前索引的组块确定在活动的文件系统中能够去复制所述候选组块,则使用与先前索引的组块相关联的对应的指针来替换与所述候选组块相关联的多个指针中的每一个指针。
[0012]在另一示例性实施例中,提供了一种用于识别在文件存储系统中去复制的候选组块的方法,所述文件存储系统具有包括多个文件系统对象的活动的文件系统,所述活动的文件系统由一系列检查点进行描绘,所述去复制与预先确定的检查点范围相关。所述方法包括:检查文件系统对象的根节点中的创建检查点;并且至少部分基于所述创建检查点,确定所述文件系统对象是否包括任何候选组块,包括:当所述创建检查点处于检查点范围内,所述文件系统对象不是克隆的对象,且所述文件系统对象不是稀疏的对象时,确定与所述文件系统对象相关联的所有组块是候选组块;当所述创建检查点处于检查点范围内,所述文件系统对象不是克隆的对象,且所述文件系统对象是稀疏的对象时,遍历对象树结构以识别不稀疏的任何候选组块;当所述创建检查点处于检查点范围内,且所述文件系统对象是克隆的对象时,遍历所述对象树结构以识别已经脱离从中克隆所述文件系统对象的原始对象的任何候选组块;并且当所述创建检查点超出检查点范围时,遍历对象树结构以识别在检查点范围内具有修改检查点的任何候选组块。
[0013]可以公开或者要求保护额外的实施例。
【附图说明】
[0014]通过参考下面的【具体实施方式】并参照附图将更容易地理解实施例的前述特征,其中:
[0015]图1是根据本发明的示例性实施例的文件存储系统的示意框图;
[0016]图2是根据该示例性实施例的软件/硬件架构的示意图;
[0017]图3是示出了根据本发明的示例性实施例的对象树结构的一般格式的示意框图;
[0018]图4是示出了根据一个示例性实施例的基于软件的去复制管理器的组件的示意图;
[0019]图5是根据本发明的某个示例性实施例的用于去复制的示意性逻辑流程图;并且
[0020]图6是根据一个示例性实施例的用于识别候选组块的逻辑流程图。
[0021]应当指出的是,前述附图和其中所示的要素不一定绘制为一致的尺度或任何比例。除非上下文另有说明,相同的要素用相同的附图标记表示。
【具体实施方式】
[0022]正如在本说明书和所附权利要求中所使用的,下列词汇具有以下所示的含义,除非上下文另有所指:
[0023]“存储设备”是用于存储数据的设备或系统。存储设备可以包括一个或多个电磁的或磁光的或光盘驱动器、固态存储设备或磁带。为方便起见,存储设备有时被称为“盘”或“硬盘”。数据存储系统可以包括相同或不同类型的具有相同或不同的存储容量的存储设备。
[0024]“RAID控制器”是这样的设备或系统,其将多个存储设备的存储容量合并为存储空间的虚拟空间,可选地,该存储空间的虚拟空间可以被称为“系统驱动器”(system drive,“SD”)、“逻辑单元”(logical unit,“LU”或“LUN”)、或者是“卷”。通常,SD大于来自多个存储设备的单个存储设备、绘图空间,并包括冗余信息,以便它能够承受一定数量的磁盘的故障而无数据丢失。在示例性实施例中,各个SD与一个唯一的标识符相关联,该标识符以下称为“逻辑单元标识符(logical unit identifier) ”或“LUID”,并且每个SD将不超过预定的最大大小,例如,2TB-64TB或以上。当命令被发送到SD时,RAID控制器通常在同一时间将命令转发给SD的所有存储设备。RAID控制器有助于克服典型存储设备的三个主要限制,即,该存储设备通常为存储系统中最慢的组件,它们通常最有可能遭受灾难性的故障,并且它们通常具有相对较小的存储容量。
[0025]“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的丢失或损坏中提供恢复。
[0026]“文件系统”是存储在文件存储系统中的文件和目录(文件夹)的结构。在文件存储系统内,文件系统通常使用若干虚拟存储构造(construct)来进行管理,并且在示例性实施例中,文件系统使用被称为域(range)、条带集(stripeset)以及跨越(span)的虚拟存储构造的分级结构来进行管理。域(range)由主SD自己或主/从SD对组成,主/从SD对应该包含相同的数据,并且因此作为单一的SD提供相同的存储容量。条带集(stripeset)是由一个或多个域组成。跨越(span)是由一个或多个条带集(stripeset)组成。因此,跨越(span)最终由一个或多个SD (通常4至50个SD)组成。跨越可以分成一个或多个文件系统,每个文件系统具有单独的名称和标识符并且可能具有不同的特性(例如,一个文件系统可以用32KB簇(cluster)格式化,而另一个用4KB簇格式化,一个文件系统可是蠕虫(Worm)和另一个不是,等等)。在跨越上的每个文件系统被单独地进行格式化、安装和卸载。可以以任何顺序和在任何时间创建和删除文件系统。文件系统通常可被配置为自动扩展(或可替代地,防止或限制自动扩展),或者可以手动进行扩展。
[0027]“块(block) ”是在文件系统中的存储的单位,其对应于在其中存储用户数据和/或系统数据的物理存储的部分。(下面讨论的)文件系统对象一般包括一个或多个块。
[0028]“组块(chunk)”是在文件系统中的存储的概念单位,它包括一个或多个文件系统对象的块。在本文中所描述的示例性实施例中,去复制是在组块基础上执行的。
[0029]值的“集合”可以包括一个或多个值。
[0030]