计算机存储去复制操作的制作方法

文档序号:6579159阅读:179来源:国知局
专利名称:计算机存储去复制操作的制作方法
技术领域
本发明一般地涉及计算机存储去复制(deduplication)操作。
背景技术
典型的计算机文件系统在固定尺寸的小块中存储文件数据,其中固定尺寸的小块 被与每个文件相关联的元数据中维护的指针所指向。在两个指针指向相同块的情况下, 通过改变一个或两个指针使得它们指向同一块可以回收一些存储空间。找到指向相同块 的指针并且随后改变一个或两个指针使得他们指向同一块的过程在这里被称作"去复制 (deduplication)"。这种去复制通常由控制宿主计算机对存储介质的访问的入口连接器 (gateway)执行。 本申请要求了于2008年9月11日递交的美国临时申请No. 61/096,258的权益。

发明内容
根据本发明的一个方面,本发明提供了一种数据中心,包括多个计算机主机以及 所述主机外部的存储系统,所述存储系统包括用于存储有形编码数据块的存储块,所述主 机中的每个包括安装有去复制文件系统驱动器的主机操作系统,文件系统驱动器,以下说 明书和附图中简称为"文件系统",标识出相应存储块中存储的相同数据块。文件系统将这 些相同数据块合并成单个存储块,从而由第一主机排他访问的第一文件和由第二主机排他 访问的第二文件同时指向同一存储块。 根据本发明的另一方面,本发明提供了一种包括计算机可读存储介质的制品,所 述计算机可读存储介质编码有计算机可执行指令的文件系统,所述文件系统在宿主计算机 系统上运行时连接到存储系统管理文件,包括在所述存储系统中编码的共享块文件。所述 文件包含有形编码的指向包含有形编码数据块的存储块的元数据指针,所述共享块文件具 有指向由多个所述元数据指针指向的块的元数据指针,所述文件系统包括用于更新哈希值 索引的写日志处理器,所述哈希值索引具有通过所述共享块文件间接指向共享存储块的共 享条目集,并且具有通过所述共享块文件之外的所述文件间接指向非共享存储块的非共享 条目集,所述哈希值索引被有形编码在所述存储系统上。 根据本发明的又一方面,本发明提供了一种方法,包括第一文件系统在第一宿主 计算机系统上执行,所述第一文件系统通过以下操作来管理向存储系统上的第一文件的第 一写操作将第一数据块写入所述存储系统的第一存储块并使所述第一文件的第一元数据 指针指向所述第一存储块;第二文件系统在第二宿主计算机系统上执行,所述第二文件系 统通过以下操作来管理向存储系统上的第二文件的第二写操作将第二内容写入所述存储 系统的第二块并使所述第二文件的第二元数据指针指向所述第二块;并且所述第二文件管 理器确定所述第二内容是否与所述第一 内容相同;以及如果所述第二内容与所述第一 内容 相同,那么所述第二文件管理器使得所述第二元数据指针指向所述第一块。


图1是根据本发明实施例的数据中心的简要示图。 图2是根据本发明实施例的方法流程图。图2重点示出了与写操作相关联的步骤。 图3是图1数据中心更为详细的示图。 图4是图1数据中心的一对文件集的简要框图。 图5是图2方法的去复制步骤的流程图。图5重点示出了与找到写记录和哈希值 索引条目之间的匹配相关的步骤。 图6是图2方法的去复制步骤的流程图。图6重点示出了与处理指向可变块指针 的匹配相关的步骤。这些步骤可以包括发出合并请求。 图7是图2方法的去复制步骤的流程图。图7重点示出了图2方法的合并请求处 理步骤。 图8是图2方法的去复制步骤的流程图。图8重点示出了与处理指向写时拷贝 (copy-onirite)块指针的匹配相关的步骤。 图9是图2方法的去复制步骤的流程图。图9重点示出了图2方法的清理步骤。
图10A和10B分别示出了根据本发明实施例的Inode节点。
具体实施例方式
图1中描述了实现本发明的数据中心AP1。数据中心AP1包括主机HA和HB以及 存储阵列网络(SAN) 11形式的存储系统。主机HA包括硬件13A,硬件13A包括处理器14A、 介质15A和通信设备16A。计算机可读存储介质15A编码有计算机可执行指令程序,包括应 用17A、操作系统(OS) 19A以及去复制文件系统20A。这里,"介质"指的是有形计算机可读 存储介质,是一类制品。"介质"包括硬盘、光盘以及固态存储设备。应用17A运行在操作系 统19A上,其使用文件系统20A访问SAN 11。主机HB类似地包括硬件13B、处理器14B、介 质15B、通信设备16B、应用17B、操作系统19B以及去复制文件系统20B。
如本领域普通技术人员将猜测到的,本发明适用于多种数据中心以及其他的计算 机系统拓扑结构。本发明适用于具有多个主机的数据中心,并且主机彼此可以不同,例如在 涉及的硬件类型和供电方面、在运行的操作系统和应用的类型与数量方面、以及联网主机 的方案方面可以不同。例如,使用虚拟机技术,一个主机可以在相应的操作系统中运行若干 应用,所有应用共享相同的文件系统。 应用17A和17B与操作系统19A和19B在诸如文件FA、 FB和FC的文件中存储数 据。文件系统20A和20B将数据划分成固定尺寸的块,在本实施例中为4kB,并且将其作为 数据块D1-DN存储在相应的存储块B1-BN中。文件通过元数据块指针与其内容相关联。例 如,文件FA包括与文件FA内的偏移位置相关联的块指针PA1。块指针PA1指向包含数据 块D1的存储块B1。(注意虚箭头代表指针与块的先前关联,而实箭头代表指针与块的当 前关联。)文件通常具有许多指针,并且他们中的不只一个可以指向给定的存储块。例如, 文件FA包括指针PA2和PA3,PA2和PA3都指向存储块B2。还可以是来自不同文件的指针 指向同一块。例如,文件FA的指针PA4和文件FB的指针PB1都指向存储块B4。
如双向箭头21和23所指示的那样,主机HA和HB与SAN 11的通信很大程度上是 独立的。为防止文件访问冲突,主机HA和HB被防止同时访问同一文件。为此目的,每个文件包括可以由主机拥有的锁。尽管文件在任意给定时间至多可以由一个主机访问,但是主 机HA和HB通过释放和取得锁可以分时共享(在不同的时刻访问)文件(例如文件FC)。 出于记忆和说明的目的,两个文件在这里被认为由相应的主机"永久性"拥有主机HA永久 性拥有锁LA,从而主机HB永远不能访问文件FA ;类似地,主机HB永久性拥有锁LB,从而主 机HA永远不能访问文件FB。"永久性"这里指的是"这里所讨论的整个期间段内"。
在数据中心AP1中,去复制被分散。每个主机HA、 HB具有其自己的去复制文件系 统20A、20B。与集中化方式相比,这具有若干优点。不需要专门软件来处理去复制。不存在 可能成为数据中心AP1故障单点或瓶颈的中央主机。此外,本发明可以方便地扩展,因为添 加更多的主机必然为去复制功能贡献更多资源。 根据以下示例可以实现去复制。在去复制之前,指针PA2指向存储块B2,进而指向 数据块D2,而指针PA3指向存储块B3,进而指向数据块D3。在去复制操作25期间,确定数 据块D3与数据块D2等同。通过改变块指针PA3使得其指向存储块B2,数据块D3随后与存 储块B2中的数据块D2有效合并。存储块B3因此被解放以做他用。去复制操作25是由主 机HA执行的,而其能够对文件FA进行排他访问,文件FA以元数据形式包括操作25中涉及 的所有块指针。 然而,本发明不需要一个主机能够访问去复制操作中涉及的两个文件。例如,主 机HA可以发现存储块B5和存储块B4很可能包含等同的数据块,即使没有主机HA能够访 问的文件指向存储块B5。可以通过去复制专用文件27来作出上述可能等同物的发现。主 机HA可以通过发出合并请求并将其存储在去复制专用文件27之一中来记录这个可能等同 物。 一旦主机HB可以获得对合并请求的访问,主机HB可以确定提出的等同物是否有效,如 果有效,那么将块指针PB1(主机HB能够访问该指针)改变成指向存储块B4以实现去复制 操作29。因此,尽管独立行动,主机HA和HB可以通过分时共享去复制专用文件27来合作 实现去复制操作。 由于存储系统通常处理的存储块数量巨大,对每对可能的块进行比较以找到可能 的复制件是不可行的。然而,由于新复制件仅(或者至少主要)在写操作的上下文中出现, 可以通过跟踪写操作来标识出去复制候选者。在本发明的实施例中,作为写操作的一部分, 每个块被检查以寻找可能的匹配。然而,图示的实施例监视写操作,但是延迟去复制操作直 到对计算资源的需求相对较低的时候才进行,从而最小化对应用17A和17B的任何性能干 扰。 写操作 因此,在如图2以流程图示出的方法ME1中,文件系统20A在写操作S1A期间监视 在主机HA上发起的写操作,并且稍后执行去复制操作S2A。文件系统20A在SAN 11上以 4kB块的形式存储信息。(如下文进一步解释的,文件系统20A以分层级的方式使用1MB和 4KB块。) 在步骤S11A处,应用17A发起例如数据向文件FA的写操作。写操作涉及将数据 写入存储在SAN ll上的文件中的位置。由应用17A发起的写操作可以是1)限于单个块; 或者2)涵盖多个块或者至少跨越块边界。在后一种情形中,文件系统20A将写操作分成单 块子操作,其中每个子操作如下文所描述的被看作单块写操作。类似地,应用17A声明的写 地址的范围被转换为文件指针。每个文件指针规定文件标识符(文件ID)和偏移值(指示
7指定文件内的位置)。与每个这样的文件位置相关联的是定义指向4kB存储块(B1-BN)的 块指针的元数据。 在步骤S12A,文件系统20A检测到写操作并生成写记录。在过程中,文件系统20A 生成数据块的哈希值并且将其与来自写请求的文件指针相关联。在图示的实施例中,写记 录仅为整个块被重写的写操作生成。没有写记录以及确定的去复制响应于部分块的写操作 而发生。在另一实施例中,对于写操作仅涉及块的一部分的情形,块的其余部分必须被读取 以生成哈希值。文件系统20A使用生成160位哈希值的SHA-1算法,也被称为"指纹"、"签 名"和"文摘",因此与4kB值对照,比较是在20字节的值之间进行的。具有不同哈希值的 两个块一定不同。SHA-1是抗冲突的(collisionresistant),因此不太可能两个具有相同 哈希值的块将不同。为了防止错配的可能,可以有选择地使用整个块的逐位比较以确认哈 希值比较所指示的匹配。SHA-1哈希值还具有与安全性相关的加密属性,这使得很难从其哈 希值确定块。另一实施例使用其他哈希算法,例如SHA-2和MD5。 在步骤S13A处,文件系统20A访问文件系统20A从应用17A规定的写地址范围生 成的文件指针所指向的块指针。因此,例如,对于块D4向文件FA的写入以及与块指针PA4 相关联的偏移,主机HA将访问块指针PA4。 文件系统20A和20B区分写时拷贝(C0W)块指针和"可变"块指针。可变类型指 针指示目标存储块可以被重写。COW类型指针指示目标存储块不能被重写。例如,诸如图l 中的B2的被不只一个块指针(PA2和PA3)指向的存储块通常不能被重写。作为替代,其内 容可以被拷贝到空闲的存储块,该存储块随后可以被重写而无需无效其他指针。在另一实 施例中,存储块引用计数而非指针类型确定是否可以适当地执行写操作。
在步骤S14A处,文件系统20A确定1)写操作能适当地执行,即,目标块可以被重 写;还是2)写操作必须在目标块的拷贝上执行,例如因为指向该块的其他文件期望其保持 不变。在图示的实施例中,该确定是通过检查步骤S13A中访问的块指针的C0W和可变类型 而作出的。如果指针是可变的,那么在步骤S15A处写操作中规定的数据块重写所指向的 存储块的内容。如果块指针类型为COW,那么执行写时拷贝操作并在步骤S16A处将数据块 写入空闲的存储块。在步骤S17A处,S13A中访问的块指针被改变以指向新的存储块;其类 型仍是"可变"。在步骤S18A处,与新使用的存储块相关联的存储块引用计数从"0"("空 闲")递增至"l"("唯一")。并且,在步骤S18A处,与拷贝源块相关联的存储块引用计数 递减,因为指向它的块指针少了一个。 在步骤S19A处,步骤S12A中生成的写记录被从主机HA传送到SAN11。典型地,写 记录在主机处累积,其中在主机处他们由目的地文件组织。写记录随后被传送到SAN ll上 的写日志以用于他们相应的文件。写记录随后在去复制操作S2A期间使用,通常被安排在 低利用时间,例如2am。方法ME1类似地提供步骤S1B、 S2B和S11B-S19B用以实现主机HB 的操作。 数据中心细节 如图3所示,用于主机HA的文件系统20A包括写记录器31A和去复制器33A。写 记录器31A生成写记录并且将它们暂时存储在主机HA上的日志缓冲器35A中。去复制器 33A包括调度器37A、写日志处理器39A和合并请求处理器43A,其中写日志处理器39A包 括合并请求生成器41A。主机HB的文件系统20B类似地包括带有缓冲器35B的写记录器31B、去复制器33B、调度器37B、带有合并请求生成器41B的写日志处理器39B、以及合并请 求处理器44B。 SAN 11包括包括块Bl和B2在内的存储块、包括文件集FSA和FSB的文件集、哈 希值索引45、以及共享块或"池"文件FP。哈希值索引45、池文件FP、写日志WLA和WLB、以 及合并日志MLA和MLB是去复制专用文件FS(图1)的示例。每个文件集包括"特性"文件 (例如文件集FSA的文件FA),并且还可以包括关联的写日志文件(例如写日志WLA)和/ 或关联的合并日志文件(例如合并日志MLA)。前面句子中出现词语"可以"是因为1)当 不存在与特性文件相关联的写记录的时候,文件集不包括写日志文件;以及2)如果不存在 与特性文件相关联的合并请求,那么文件集不包括合并日志文件。另一实施例提供了空的 写日志文件和空的合并日志文件。 写日志(例如写日志WLA和WLB)和合并日志(例如合并日志MLA和MLB)是具有 与特性文件类似结构的文件。换句话说,他们的内容(包括写记录和合并请求)是以数据 块的形式安排的,而数据块又被存储在存储块B1-BN中。写日志和合并日志包括指向存储 写记录和合并请求的存储块的元数据块指针。处于说明的目的,这里从物理方面(例如,带 有元数据块指针)考量特性文件(例如FA和FB),而从逻辑方面(S卩,具有对内容的直接引 用)考量辅助文件(例如写日志和合并日志)。 当存储写记录时对写日志WLA和WLB进行写入,并且当在去复制期间处理那些记 录时从写日志WLA和WLB读取。并且还对写日志WLA和WLB进行读取以发现可以被清理的 哈希值索引条目。写日志文件的所有权遵从关联主文件的所有权。因此,例如只要主机HA 具有对文件FA的排他访问权,它就具有对写日志WLA的排他访问权。 不管关联主文件是否可访问,主机HA和HB都可以在分时共享基础上(S卩,在不同 的时刻,主机HA和主机HB都具有对这些去复制专用文件的排他访问权)访问所有其它去 复制专用文件。例如,主机HA可以在分时共享的基础上访问合并请求日志MLB,即使它根本 不能访问文件FB。这使得主机HA可以存储由主机HB处理的合并请求。
图4中更详细地示出了文件集FSA和FSB。在图4中,鉴于上面给出的原因,特性 文件FA和FB以其物理形式表示为块指针,而辅助文件WLA、 WLB、 MLA和MLB以其逻辑形式 表示为内容。具体而言,写日志WLA包括写记录WA1和WA2,而写日志WLB包括写记录WB1 和WB2。每个写记录WA1 、 WA2、 WB1 、 WB2包括哈希值HA1 、 HA2、 HB1 、 HB2 (对应于被写入的数 据块)以及文件指针FA1、FA2、FB2、FB2(对应于从操作系统19A和19B的观点出发的写目 的地)。写日志用来基于每个目的地存储写操作的记录以用于后续的去复制处理。
合并日志MLA包括合并请求MA1和MA2 ,而合并日志MLB包括合并请求MB1和MB2 。 每个合并请求MA1、MA2、MB1规定了两个文件指针"本地"文件指针ML1、ML2、MBL,以及"池" 文件指针MP、MP2、MBP。本地文件指针指向关联特性文件中的位置。例如,本地文件指针 ML1指向特性文件FA内的偏移。(注意由于每个辅助文件(写日志或合并日志)仅与一个 特性文件相关联,所以本地文件指针仅需明确规定偏移。)池文件指针指向池文件FP内的 位置。 本地文件指针和池文件指针直接指向具有关联块指针的文件位置。因此,本地文 件指针和池文件指针间接指向存储块。在另一实施例中,合并请求包括来自池文件的块指 针而非池文件块指针。换句话说,在另一实施例中,合并请求直接指向而非通过中间文件(例如FA或FB)间接指向存储块。 哈希值索引45,尽管是在延迟的基础上,用做所有已使用存储块的主列表。哈希值索引45包括将哈希值分配给文件指针的条目47、49等。文件指针指向与关联于下述存储块的块指针相关联的文件地址,其中存储块与哈希值所表示的数据块相关联。换句话说,哈希值索引45利用存储块的内容对存储块间接索引。 哈希值索引45被划分成水平碎片(horizontal shard) 51和53。每个碎片覆盖预定范围的哈希值,例如,碎片51包括以"0"开始的值,而碎片53包括以"l"开始的哈希值。划分哈希值索引使得主机HA和HB 二者可以同时访问相应的碎片,并且随后切换使得每个主机可以访问所有条目。对于更大数目的主机,划分哈希值索引所得碎片的数量可以更多,使得所有或大多数主机可以同时访问哈希值索弓I的相应部分。 在另一实施例中,每个哈希值索引明确与指向同一块的相应块指针的所有文件指针的列表相关联。在图示的实施例中,对于每个哈希值仅列出一个文件指针。对于与不只一个块指针相关联的哈希值,关联的文件指针指向池文件位置。与该池文件位置相关联的块指针指向那些块指针引用的共同块。 池文件FP,与其它文件FA和FB类似,包括锁LP和块指针PS 1和PS2。基本上,哈希值索引条目(例如47、49)指向池文件或其它文件。指向池文件FP的哈希值索引条目指向COW类型块指针,而指向其它文件的哈希值索引条目指向可变类型块指针。COW类型指针指向被共享的块;可变块类型指针指向未被共享的块。在另一实施例中,不存在池文件,并且哈希值索引条目列出与共享块相关联的所有文件指针。
找到匹配 在可以合并存储块内容之前,必须确定它们相同。为此,比较内容的哈希值。更具体地说,写记录中的哈希值与哈希值索引45中可能匹配的哈希值相比较。因此,如图5中所示,步骤S20A涉及获得对哈希值索引45或者至少其碎片51、53之一的排他访问权。在一个或多个实施例中,在找到哈希值匹配之后,块的内容被比较以防止错配。
在步骤S21A处,文件系统20A例如通过检查锁进而标识出主机HA具有排他访问权的文件。在步骤S22A处,写日志处理器39A访问可访问文件的写日志中的写记录;只有那些具有在被访问碎片范围内的哈希值的写记录被处理,直到不同的碎片被访问。在哈希值索引未被划分成碎片的实施例中,所有可访问的写记录可以被访问。即使在哈希值未被分成碎片的实施例中,哈希值也可被排序,使得仅仅哈希值条目的一部分需要被检查以成立"未命中"(无匹配索引条目)。 在步骤S23A处,对于每个写记录,确定记录中的哈希值是否匹配哈希值索引45中的哈希值。如果不存在匹配,那么对应于写记录的数据块是唯一的。去复制是不可能的。然而,哈希值索引在步骤S24A处被更新以包括对应于该写记录的新条目。条目包括写记录的文件指针和哈希值。这完成了对所针对写记录的处理。下面的步骤是在步骤S25A处处理合并请求以及清理去复制专用文件FD。这两个步骤将在下文进一步讨论。
如果在步骤S23A处找到匹配,那么在步骤S27A处访问与哈希值索引中的哈希值相关联的文件指针。参考图4,写记录WA1的哈希值HA1匹配索引条目47中的哈希值HB1。当他们哈希值相等的时候,写记录匹配索引条目。写记录文件指针FA1匹配索引条目文件指针FBI是不需要的也是不太可能的。注意步骤S20A-S27A具有主机HB的对应步骤S20B-S27B。 写记录文件指针FA1规定文件(文件FA)和块指针PA4所位于的该文件中的偏移。
块指针PA4指向包含数据块D4的存储块B4。这里,"WR文件"、"WR偏移"、"WR块指针"、"WR
存储块"和"WR数据块"均指向写记录规定或直接或间接指向的条目。类似地,前缀"IE"指
向原始形式下的索引条目文件指针规定或指向的条目。如果索引条目文件指针已被修改,
那么使用前缀"RE"。 指向唯一存储块的匹配 实际上,不匹配任何预先存在的索引条目的写记录自己被输入到哈希值索引45中。最初,新条目规定写记录规定的相同文件指针(文件和偏移)。该条目保持不变直到其被另一写记录所匹配。同时,IE文件指针指向原始的可变类型WR块指针,而原始可变类型WR块指针又指向WR存储块。然而,由于WR块指针是可变的,所以WR数据块可能在生成写记录的时间与识别出匹配的时间期间已被重写。在这种情况下,WR哈希值和IE哈希值之间的匹配是过时的。 如果处理写记录的主机不能访问IE文件,那么主机将不能确定哈希值索引条目是否是过时的。例如,如果主机HA正在处理用于文件FA的写记录,并且如果该写记录匹配指向文件FB的哈希值索引条目,那么如果想要确定索引条目的有效性,则主机HA实际上将需要主机HB的帮助。然而,由于主机HA和HB独立访问SAN 11,这个合作不能依赖于合作动作。相反,主机HA通过将其块指针拷贝到池文件FP并将去复制任务的剩余部分以合并请求的形式传送到主机HB,而使得其信息可用。 当在步骤S27A处写日志处理器39A确定IE文件不是池文件FP时,在步骤S28A处继续方法ME1,如图6所示。尽管其不能访问IE文件,但是处理写记录的主机必须能够访问WR文件和WR可变类型块指针。该块指针在步骤S28A处被访问。 在步骤S29A处,WR块指针的类型从"可变"变为"C0W"。在步骤S30A处,该新的C0W类型WR块指针被添加到池文件FP,从而其可被所有主机访问。由于WR文件和池文件现在共享WR存储块,因此其计数递增至"2"。 在步骤S31A处,IE文件指针被改变成指向池文件。(注意正是此步骤得到如下推断,即指向文件而非池文件FP的索引条目先前未被匹配。)该最终的修改条目RE文件指针现在指向WR存储块。例如,如果主机HA正在处理通过WR块指针PA4指向WR存储块B4 (如图1所示)的写记录,并且索引条目指向指向IE存储块B5的IE块指针PB1,那么步骤S31A使得修改的条目通过池文件FP4指向RE存储块B4而非IE存储块B5。即使IE存储块B5已被重写,RE数据块(至少在写记录代表的写操作的时候)也对应于匹配IE哈希值。 由于对文件的访问是排他的,因此处理写请求的主机一般将不能访问IE块指针。如果主机不能访问IE文件,那么它不能标识出IE存储块并且不能改变IE块指针以匹配池文件中的一个(来自步骤S30A)。因此,通过发出合并请求并将其存储在用于目标文件的合并日志中,主机将这些任务的责任传送到能够访问IE文件的主机。例如,合并请求生成器41B可以在合并日志MLB中存储合并请求,用以在步骤S25B处由主机HB的合并请求处理器43B进行处理。类似地,主机HB的合并请求生成器41B可以在合并日志MLA中存储合并请求,用以在步骤S25A处由主机HA的合并请求处理器43A进行处理。
在另一实施例中,当主机能够访问索引条目指向的文件时,主机完成匹配确认。因此,只有当处理写记录的主机无法访问索引条目引用的非池文件时,才发出合并请求。
处理合并请求 如图7所示,步骤S25A和S25B包括若干子步骤,这里称为"步骤"。在步骤S34B处,主机HB访问用于主机HB可访问的文件的合并请求。如图4所示,合并请求规定1) IE文件指针,以及2)池文件FP中的RE块指针。RE块指针指向WR存储块。问题是IE数据块是否匹配WR/RE数据块。在步骤S35B处,IE和RE块的内容例如通过生成并比较它们的哈希值而被比较。 如果比较确认IE数据块和RE数据块不相同,那么在步骤S36B处主机HB丢弃合并请求而不执行任何去复制。IE块指针和IE存储块响应于合并请求保持不变。WR存储块仍旧由池文件FP和WR文件"共享"。在另一实施例中,在处理产生合并请求的写记录之前,哈希值索引和池文件回到他们各自的状态。 如果S35B处的比较确认匹配,那么在步骤S37B处使排他文件中的IE块指针与池文件中的COW类型块指针一致。在步骤S38B处,块计数被调节。曾由一个指针指向的IE存储块现在由零指向,因此其计数从"1"递减至"0"。池文件中所指向的IE存储块将其计数从"2"递增至"3"。 例如,如果在处理合并请求的过程中,主机HB确定存储块B5的内容仍旧对应于索引条目哈希值,那么指针PB1将从指向存储块B2改变为指向存储块54,如图1的去复制操作29所示。这完成了方法ME1中关于处理匹配唯一哈希值索引条目的写记录的部分。类似的方法步骤S33A-S38A由主机HA实施。
处理指向池文件的匹配 当写记录匹配唯一索引条目的时候,索引条目被改变,使得其指向池文件而非其原始文件。在图示的实施例中,索引条目在其它方向上没有改变。在另一实施例中,仅仅一个其它块指针和池文件指向的存储块返回具有唯一索引条目,并且以和原始唯一条目相同的方式被处理。 如果在步骤S27A处,匹配的索引条目最初指向池文件FP,那么在步骤S39A处从WR存储块的内容生成新哈希值,如图8所示。如果哈希值不匹配,那么在步骤S40A处写记录被丢弃。在这种情形中,哈希值索引、块指针和块计数均保持不变。 如果在步骤S39A处,匹配被确认(未过时),那么在步骤S41A处主机HA访问池文件条目中的IE块指针。在步骤S42A处WR块指针被更新以匹配池文件FP中的IE块指针。在步骤S43A处,IE存储块计数被递增。在步骤S44A处,WR存储块的计数被递减至零,并且块被释放。主机HB可以实现类似的步骤S39B-S44B,用以处理共享条目的匹配。
清理 清理步骤S26A和S26B在图9中以流程图的方式示出。当空闲存储块首先被写入的时候,其计数从"0"递增至"1"。当块变为共享的时候,其计数递增两次一次是因为池文件中的块指针,一次是因为其被相同或不同特性文件中的第二块指针指向。因此,计数从"1"跳到"3"。 每次尝试重写共享块都将产生COW操作,使得指向原始存储块的指针减少一个;在这种情形中,计数减l。因此,C0W操作可以将计数从"3"降至"2";对块的下一次C0W操作可以将计数从"2"降至"1",这对应于现在仅仅池文件指向存储块的事实。由于没有其它文件指向该块,因此通过将其计数器减至"O"可以释放该块,并且可以清理索引和池文件中对应的条目。 此外,未处理的写日志可以指示唯一存储块已被重写。如果在写日志被处理前另一写日志匹配用于唯一存储块的哈希值,那么方法ME1将确定不存在匹配。通过简单地清理文件指针匹配未处理写记录的文件指针的唯一索引条目,可以避免此种情况。
相应地,清理方法S26A包括在步骤S45A处主机HA扫描哈希值索引45。在步骤S46A处,清理带有匹配那些未处理写记录的文件指针的哈希值索引条目。在步骤S47A处,与具有计数"l"的共享块相对应的哈希值索引条目连同所引用的池文件条目一起被清理。并且在该步骤中,通过将所引用存储块的计数设为"O"来释放所引用的存储块。主机HB类似地执行步骤S45B-S47B。
混合文件块尺寸支持 在文件系统中,数据是以一些固定尺寸块的形式被管理的。例如,一些通用文件系统使用4千字节的块而其它一些文件系统(例如VMWare VMFS)使用更大的块,例如1兆字节的块。管理更大尺寸块形式的数据简化了许多读和写操作并且减少了跟踪所存储数据所需的元数据的量。然而,当使用较小块时去复制操作更趋有效,因为找到两个匹配数据块的可能性更大。 图10A图示了具有指向大数据块151的指针的文件Inode节点150。 Inode节点150可以包括多个指针,每个指针指向不同的大数据块。Inode节点150是用来存储文件元数据的数据结构。在一个实施例中,如图IOB所示,片段指针块152被引入Inode节点150和大数据块151之间。片段指针块152包括指向小文件块的指针,这些小文件块加总后等于大文件块的尺寸。即,大文件块逻辑上被划分成多个较小的块。指向这些较小块中每一个的指针153随后被存储在片段指针块152中。 在一个实施例中,为了让文件系统知道这个块分段,在Inode节点150中存储标志来指示Inode节点150中的指针现在指向片段指针块。在一个实施例中,该标志存储在指向片段指针块的指针中。在该实施例中,如果标志被设为特定状态(例如,是或否,或者O或1等),那么文件系统调节其自身以管理多个较小块。在一个示例中,考虑其Inode节点包括指向1兆字节文件块的指针的直接文件。为了对文件中偏移为1032千字节处的4千字节块独立寻址,该文件的第二个1兆字节块被划分成256个4千字节块。片段指针块被分配以存储指向这256个小块的指针,并且指向原始l兆字节块的指针被指向片段指针块的指针替代。 这里,"哈希值"索引是将哈希值与数据块的(当前或过去)存储块位置(直接或间接)相关联的文件或其它数据结构,其中所述数据块用来生成或以其它方式对应于哈希值。这里,"共享块文件"或"池文件"(在其它地方也被称为"竞技场(arena)")是带有指针的文件,其中指针(直接或间接)指向已知或已经由不同文件和/或同一文件中的不同位置所共享的存储块。在图示的实施例中,哈希值索引条目通过直接指向具有关联元数据块指针的池文件位置,可以间接指向共享存储块,其中关联元数据块指针直接指向共享存储块。 在另一实施例中,具有重定向文件指针的每个文件具有对应的隐藏文件,该隐藏文件指示文件的哪部分正被共享,并且指向特殊的类池文件。所有读取和写入都经过知道 这些隐藏文件的过滤层。基础文件系统以及这个过滤层的组合在功能上等同于图示出的支 持指针改写和cow的文件系统。实际上,过滤系统用做这样的文件系统,该文件系统使用另
一文件系统作为其存储介质而不是直接使用盘。本发明提供了对图示实施例的这些以及其 它变化和修改。本发明的范围由权利要求限定。 在一个或多个实施例中,提供了用于执行上述方法与系统的程序指令。程序指令 存储在计算机可读介质中。 考虑到上面的实施例,应当理解本发明的一个或多个实施例可以采用计算机实现 的包含存储在计算机系统中的数据在内的多种操作。这些操作需要对物理量的物理处理。 通常,尽管不是必须的,这些物理量采用能够被存储、传送、合并、比较以及以其它方式处理 的电信号或磁信号的形式。此外,所执行的处理通常指的是诸如产生、标识、确定或比较之 类的术语。 这里描述的构成本发明一个或多个实施例一部分的任何操作都是有用的机器操 作。本发明的一个或多个实施例还涉及用于执行这些操作的设备或装置。该装置可以是为 所需目的特别构造的,例如上面讨论的载波网络,或者该装置可以是由存储在计算机上的 计算机程序有选择地启动或配置的通用计算机。特别地,多种通用机器可以结合根据这里 的教导编写的计算机程序一起使用,或者构造专门的装置来执行需要的操作可能是更便利 的。可以使用诸如Flash、 JAVA 、 C++、 C、 C#、 Visual Basic、 JavaScript 、 PHP、 XML、
HTML等编程语言或者编程语言的组合来实现这里描述的编程模块和软件子系统。可以使
用诸如SOAP/HTTP的通用协议来实现编程模块之间的接口。如本领域普通技术人员所知晓
的,上面以及这里其它地方描述的组件和功能可以在任何桌面操作系统上实现,在虚拟化
或非虚拟化环境中执行,使用适合桌面软件开发的编程语言,其中所述桌面操作系统例如
是不同版本的Microsoft Windows 、 Apple Mac 、 Unix/X-Windows 、 Linux 等。 可以在计算机可读介质上存储编程模块和辅助软件组件(包括配置文件)以及提
供用于在电信网络上为用户排除故障的装置和方法和这里描述的相关的功能所需的安装
文件。可以使用任何计算机介质来存储编程模块和辅助软件组件,所述计算机介质例如是
闪存、CD-ROM盘、光盘、软盘、硬驱动、共享驱动、以及适于从连接的计算机提供下载的存储
装置。本领域普通技术人员将知晓,任何存储介质都可以用来存储这些软件组件,只要该存
储介质可以被计算机系统读取即可。 本发明的一个或多个实施例可以结合包括手持设备、微处理器系统、基于微处理 器或可编程的消费电子设备、微机、大型机等在内的其他计算机系统配置一起实施。本发明 还可以在分布式计算环境中实施,在分布式计算环境中,由通过网络互连的远程处理设备 执行任务。 本发明的一个或多个实施例还可以实现为计算机可读介质上的计算机可读代码。 计算机可读介质是能够存储数据的任何数据存储设备,该设备之后可以被计算机系统读 取。计算机可读介质的示例包括硬驱动、网络附接存储(NAS)、只读存储器、随机存取存储 器、CD-R0M、CD-R或CD-RW、DVD、闪存、磁带、以及其它光和非光数据存储设备。计算机可读 介质还可以分布在网络连接的计算机系统之上,从而计算机可读代码以分布的方式被存储并被执行。 尽管已经描述了本发明的一个或多个实施例,但是本领域普通技术人员在阅读说 明书并研究附图之后将意识到,可以实现对本发明的多种修改、添加、变换和等同更替。因 此本发明的实施例意在包括落在权利要求限定的本发明真实精神和范围之内的所有这些 修改、添加、变换和等同物。因此,本发明的范围由权利要求限定,其包括本发明的所有等同 物覆盖的范围。
权利要求
一种数据中心,包括多个计算机主机以及所述主机外部的存储系统,所述存储系统包括用于存储有形编码数据块的存储块,所述主机中的每个包括去复制文件系统,所述去复制文件系统用于标识出相应存储块中存储的相同数据块,并将所述相同数据块合并成所述存储块中的一个,从而由所述主机中的第一主机排他访问的第一文件和由所述主机中的第二主机排他访问的第二文件同时指向所述存储块中的同一个。
2. 如权利要求1所述的数据中心,其中所述存储系统具有在其上有形编码的共享块文 件,所述共享块文件包括指向所述存储系统的存储块的元数据指针,其中所述存储系统的 存储块被所述文件的不只一个元数据块指针所指向,所述主机的文件管理器合作更新所述 共享块文件。
3. 如权利要求2所述的数据中心,其中所述文件管理器通过依次获得对所述共享块文 件的排他访问权来更新所述共享块文件。
4. 如权利要求3所述的数据中心,其中所述存储系统具有在其上有形编码的哈希值索 引,所述哈希值索引包括将哈希值分配给文件和文件偏移的哈希值索引条目,所述哈希值 索引条目中的一些通过所述共享块文件将所述数据块的哈希值与包含那些数据块的存储 块相关联,所述哈希值索引条目中的其它条目通过所述共享块文件之外的文件将所述数据 块的哈希值与包含那些数据块的存储块相关联。
5. 如权利要求1所述的数据中心,进一步包括在所述存储系统中有形编码的计数,所 述计数中的每个代表指向所述存储块中的相应一个的多个元数据指针,所述文件管理器在 写操作和合并操作期间合作更新所述计数。
6. —种包括计算机可读存储介质的制品,所述计算机可读存储介质编码有计算机可执 行指令的文件系统,所述文件系统在宿主计算机系统上运行时连接到存储系统管理文件, 包括在所述存储系统中编码的共享块文件,所述文件具有有形编码的指向包含有形编码数 据块的存储块的元数据指针,所述共享块文件具有指向由多个所述元数据指针指向的块的 元数据指针,所述文件系统包括用于更新哈希值索引的写日志处理器,所述哈希值索引具 有通过所述共享块文件间接指向共享存储块的共享条目集,并且具有通过所述共享块文件 之外的所述文件间接指向非共享存储块的非共享条目集,所述哈希值索引被有形编码在所 述存储系统上。
7. 如权利要求6所述的制品,其中所述文件系统包括合并请求处理器,并且所述写日 志处理器包括合并请求生成器所述合并请求生成器,在执行时,创建与所述文件系统不能访问的编码于所述存储系 统上的文件相关联的第一合并请求;以及所述合并请求处理器,在执行时,通过确定数据块是否相同以及如果确定所述数据块 是相同的则将他们合并成单个存储块,来处理与所述文件系统能够访问的文件相关联的第 二合并请求。
8. 如权利要求7所述的制品,其中所述合并请求处理器,在执行时,通过比较所述文件 管理器不能访问的文件所指向的存储块的块内容的哈希值和所述文件管理器能够访问的 文件所指向的存储块的第二块内容的哈希值,来处理所述第二合并请求。
9. 如权利要求6所述的制品,进一步包括创建写操作的写日志事件的写事件记录器,所述写事件记录器将它们存储在所述存储系统上,所述写操作中的每一个包括将数据块写入存储块,所述写日志事件中的每一个指向相应的存储块并且包含相应数据块的哈希值。
10. 如权利要求9所述的制品,其中所述索引合并器,在更新所述合并索引时,尝试将 存储在写日志事件中的哈希值与所述索引中预先表示的哈希值相匹配。
11. 一种方法,包括第一文件系统在第一宿主计算机系统上执行,所述第一文件系统通过以下操作来管理 向存储系统上的第一文件的第一写操作将第一数据块写入所述存储系统的第一存储块并 使所述第一文件的第一元数据指针指向所述第一存储块;第二文件系统在第二宿主计算机系统上执行,所述第二文件系统通过以下操作来管理 向存储系统上的第二文件的第二写操作将第二内容写入所述存储系统的第二块并使所述 第二文件的第二元数据指针指向所述第二块;并且所述第二文件管理器确定所述第二内容是否与所述第一 内容相同;以及如果所述第二内容与所述第一 内容相同,那么所述第二文件管理器使得所述第二元数 据指针指向所述第一块。
12. 如权利要求11所述的方法,其中所述第二文件系统至少部分通过比较所述第一数 据块的第一哈希值和所述第二数据块的第二哈希值,来确定所述第二数据块是否与所述第 一数据块相同。
13. 如权利要求11所述的方法,其中所述第二文件管理器在所述第二写操作期间生成 所述第二哈希值。
14. 如权利要求11所述的方法,其中所述第一文件管理器生成指向所述第一和第二块的合并请求,并且将所述合并请求写 入所述存储系统;以及所述第二文件管理器从所述存储系统读取所述合并请求并且处理所述合并请求,所述 处理包括在生成了所述合并请求之后生成所述第二哈希值。
15. 如权利要求11所述的方法,其中所述确定步骤包括逐位比较所述块。
16. —种用于对文件系统中的第一存储块进行去复制操作的方法,所述方法包括 确定第二存储块是否包含与所述文件系统中的所述第一存储块相同的内容,所述第二存储块的尺寸与所述第一存储块的尺寸相同,其中指向所述第一存储块的指针被存储在与所述第一存储块相关联的文件的Inode节点中;将所述Inode节点中的所述第一存储块的元数据改变成包括写时拷贝机制;以及清理所述第二存储块并将指向所述第二存储块的指针改变为指向所述第一存储块,其中,如果所述第一存储块的尺寸大于或等于第一块尺寸,那么所述第一存储块和所述第二存储块被逻辑细分为多个块,所述多个块每个具有第二块尺寸,所述第一块尺寸大于所述第二块尺寸。
17. 如权利要求16所述的方法,其中所述第一块尺寸为l兆字节,并且所述第二块尺寸 为4千字节。
18. 如权利要求16所述的方法,其中对所述第一存储块的逻辑细分包括在指针块中存 储指向每个细分块的指针以及用指向所述指针块的指针代替所述Inode节点中指向所述 第一存储块的指针。
19. 如权利要求18所述的方法,进一步包括在Inode节点中设置标志以指示所述Inode节点包含指向所述指针块的指针。
全文摘要
本发明公开了一种包括多个计算机主机和所述主机外部的存储系统的数据中心。存储系统包括用于存储有形编码数据块的存储块。每个所述主机包括去复制文件系统,该去复制文件系统标识出存储在相应存储块中的相同数据块,并将这些相同数据块合并成所述存储块之一,使得由所述主机中的第一主机排他访问的第一文件和所述主机中的第二主机排他访问的第二文件同时指向相同的存储块。
文档编号G06F17/30GK101710323SQ20091015745
公开日2010年5月19日 申请日期2009年7月30日 优先权日2008年9月11日
发明者克莱门斯·奥斯汀, 李金源, 维拉亚纽尔·莫拉里, 艾哈迈德·伊凡 申请人:威睿公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1