内容可寻址存储系统和方法

文档序号:6479735阅读:583来源:国知局
专利名称:内容可寻址存储系统和方法
内容可寻址存储系统和方法
背景技术
本发明总体上涉及内容可寻址存储,并且更具体地涉及对内容可寻址存储系统 中数据的改进的访问。对大量数据进行存储对商业是至关重要的。除了其它商业应用之外,必须备份 文件系统,必须保持大量记录以满足管理需求,并且必须存储庞大的数据集合。这种重 要数据必须以对于硬件故障可复原的方式来存储。解决这些数据集合中每一个的具体需 求的各种系统被使用。以前,内容可寻址存储(CAS)已用于构建大容量存储系统。CAS系统通过混杂 数据块内容而为数据块生成地址。这允许数据块的两个副本能容易地被识别,从而CAS 系统仅需要存储数据块的一个副本。存储需求的降低使得CAS系统对大容量存储器是有 用的。然而,由于CAS通常存储不变的对象,因此它们只允许写入组织为有向非循环 图(DAG)的数据。即,一旦父块指向子块(例如,包括子块的地址),子块就不可能 指向父块。忽视其中子块被多个父块指向的共享情况,这些DAG可以非正式地被称为
“树”。使用CAS来实现允许修改存储数据(例如,允许重写文件)的存储系统提出了 两个重大挑战-(1)如何有效地使用存储(例如,使父块的使用最小化以指向一组改变中 的数据/叶子/子块),以及(2)如何允许对树的不同部分的同时修改(例如,避免过度 锁定)以便提供更好的性能。因此,需要一种在内容可寻址存储系统中存储和获取数据 的改进系统和方法。

发明内容
本发明总体上提供使用基础的内容可寻址存储来有效地存储信息的系统和方 法。在诸如内容可寻址存储系统的存储系统中存储诸如从客户端接收的文件等的信息。 文件服务器从客户端接收数据(例如,将数据添加到文件)和/或元数据操作,诸如创建 或移除文件。将数据分组为数据块,所述数据块存储在块存储的数据块存储中。因为数 据写操作引起文件系统元数据修改,所以提交服务器(commit server)用于写入反映新的 元数据的新树。在至少一个实施例中,文件服务器将必须由提交服务器执行的操作记入 更新日志。更新日志由提交服务器获得并且其中所述的操作应用于它的文件系统的当前 镜像,产生被写入到数据块存储的新的元数据块(例如,包括新的文件系统版本)。来自 更新日志的每个操作与时间戳关联,所述时间戳用于向提交服务器指示操作必须被应用 的顺序,并允许文件服务器通过清洁(clean)进程清洁其缓存的数据。
在至少一个实施例中,最近版本的树用于更新本地数据和在文件服务器缓存的 元数据。文件服务器获取树的根块(例如,超级块),所述根块具有指示对树的最近更新 的关联时间戳(例如,来自所应用的更新日志的最后操作)。根据最近版本的存储树的根 块的时间戳,元数据缓存器中过时版本的元数据对象被丢弃,并在一些实施例中,被来 自块存储中树的更新版本来取代。
对于本领域 技术人员而言,通过参考如下详细描述和相应附图,本发明的这些 和其它优点将变得明显。


图1是根据本发明实施例的存储系统的示意图;图2是根据本发明实施例的文件系统的示意图;图3描述了在存储系统中存储信息的方法的流程图;图4描述了根据本发明实施例的示例性元数据树;以及图5描述了在文件服务器中维护元数据的流程图。
具体实施例方式常规的内容可寻址存储系统(CAS)与文件系统前端(例如,数据输入)的结合 允许大型文件的高吞吐量读取和写入,所述大型文件的数据被有效地且可复原地存储。 图1描述了这种结合的实施例。使用基础的CAS作为块存储106来构建存储系统100。 存储系统100具有诸如文件服务器102的接口,该接口允许数据的接收、创建和/或修改 (例如,写入文件)或元数据操作(例如,在目录中插入新文件,改变文件的许可等)。 来自文件服务器102的数据被写入到块存储106。提交服务器112用于应用从文件服务器 接收的操作,以及与文件服务器102接口分离地且不考虑文件服务器102接口地将表示文 件系统元数据的数据块写入块存储106。这样,异步地执行由文件服务器102将数据写入 存储以及由提交服务器112将元数据写入存储,有助于大型文件的高效高吞吐量读取和 写入。图1是根据本发明实施例的存储系统100的示意图。存储系统100包括文件服 务器102,所述文件服务器102用于从客户端104接收数据操作(例如,文件写和文件读 等)和元数据操作(例如,文件移除等)并将所接收的数据组块为要存储在块存储106中 的数据块,并将要应用于元数据的操作列表发送给提交服务器112。块存储106存储数 据块,所述数据块中一些可能指向其它数据块,并且所述数据块可以组织在文件系统108 中,在下面参考图2进一步详细描述。块存储106进一步包括存储日志的更新日志110, 所存储的日志包括为了创建文件系统108而必须由提交服务器112应用的操作。元数据 是非文件内容的任何数据。例如,元数据可以是关于客户端可浏览的一个或多个文件的 信息,诸如文件或目录名、文件创建时间、文件大小、文件许可等,和/或关于客户端 不可浏览的一个或多个文件和/或文件系统的信息,诸如索引结构等。当然,可以使用 其它合适的元数据(例如,关于数据、一个或多个文件、一个或多个数据块、一个或多 个数据结构、一个或多个文件系统、位图等的信息)。更新日志110可以包括描述必须由 提交服务器应用的操作的记录。如所知,这些信息是文件系统108操作所必需的临时信 息。例如,在文件服务器112将数据块写入块存储106之后,其向更新日志110发送数 据块的内容地址以及描述数据作为其一部分的文件和数据位于哪段偏移的信息,以及时 间戳,在下文进一步详细描述。文件服务器102是任何计算机或耦合到客户端104并被配置成提供用于数据(例 如,信息、文档和文件等)临时存储的位置的其它设备。因此,文件服务器102具有包括块缓冲器114和元数据缓冲器116的存储装置和/或存储器,所述块缓冲器114用于缓 存数据块存储106中存储的数据块,元数据缓冲器116用于缓存元数据信息(例如,最近 创建的文件名)。元数据缓冲器116的突出部件是未提交块表118,其用于存储文件服务 器102最近写入的数据块的内容地址。此外,文件服务器102将从客户端104接收的数据组块为数据块(例如,生成数 据块)并将数据块写入块缓冲器114。S卩,文件服务器102从客户端数据生成数据块和/ 或否则以允许在CAS中进行存储的方式来分组数据并将这些数据块写入块存储106。块 存储106可以把这些数据块组织为先前已见(例如,已知、已存储等)的数据块并返回其 内容地址,或可以将数据块组织为新块,为其生成内容地址,并返回内容地址。文件服 务器102在其处理文件操作(例如,来自客户端104的写操作)时将修改应用于其在元数 据缓冲器116中缓存的元数据。所生成的数据块被尽可能快地写入数据块存储106,因为 只有写入完成之后才能将数据块从块缓冲器114中逐出。可以与写入已经完成的确认一 同接收的内容地址能用于再取从块缓冲器114逐出的数据块。写入操作与包含写入数据 的所有数据块的内容地址以及与操作的时间戳一同被添加到更新日志110。在未提交块 表118中保持数据块的内容地址,直到文件服务器102从提交服务器112接收时间戳等于 或大于该时间戳的超级块(下文参考图2来讨论)。未提交块表118存储数据块存储106 中存储的、但还未在文件系统108的版本中表示的数据块的内容地址(例如,如下文参考 方法300所述,数据块的地址信息还未被提交服务器112写入到文件系统108)。在文件 系统108的新版本通过处理包含其内容地址的更新日志记录被创建之前,在使用文件系 统108的旧版本的文件服务器102上数据块是不可访问的。通过使用未提交块表,可以 容易地找到数据块的内容地址并且如果客户端104请求的话则可以取数据块。一旦包含 数据块的元数据的文件系统108的版本被写入到块存储106,并且文件服务器102接收到 通知,对应的内容地址就可以从未提交块表118中移除。块存储106可以是CAS系统或其它合适的存储器和/或存储系统。在至少一个 实施例中,块存储106是如在2008年1月31日提交的申请号为12/023133和在2008年1 月31日提交的申请号为12/023141的美国专利申请中所述的基于集群的内容可寻址块存 储系统,每一件申请在此通过引用而并入。当然,可以使用其它基于地址的存储系统。块存储106包含能组织为文件系统108的数据块。文件系统108是模仿树结构 的数据结构并在下文中参考图2做更详细的描述。块存储106也可以包括更新日志以帮 助将元数据写入文件系统108,这将在下文中参考图3和方法300进一步详细地描述。提交服务器112可以与文件服务器102具有类似结构,但可以用于更新文件系统 108的元数据。提交服务器112处理从文件服务器102接收的操作(例如,特定目录中具 有特定名称的文件 的创建、将对应于写入的内容地址插入位于特定偏移的特定文件等)。 来自更新日志110的所有操作都与时间戳相关联;提交服务器112以单调非减的顺序应用 操作。提交服务器112包括用于在生成文件系统108的新版本之前存储元数据的提交元 数据缓冲器120。类似于元数据缓冲器116,提交元数据缓冲器120存储元数据和/或诸 如数据块存储106中存储的数据块的内容地址的数据块信息。周期地(例如,按照预定 间隔,当提交元数据缓冲器120达到一定使用级时等等),批量元数据和/或数据块信息 用于生成文件系统108的新版本。然后,提交服务器112在块存储106存储文件系统108的新版本并清洁提交元数据缓冲器120。
文件服务器102和提交服务器112通过交换日志记录(例如,描述在特定目录中 创建具有特定名字的文件的操作等)和其他控制消息来通信。在一些实施例中,可以在 文件服务器102和提交服务器112之间直接传输日志记录。在相同或替代实施例中,日 志记录可以被写入更新日志110和/或从更新日志110获取,所述更新日志110可以被存 储在块存储106中或其它位置。提交服务器112运行使得总是有文件系统108的当前版 本。即,提交服务器112确定性地处理日志记录(例如,来自更新日志110)以生成文件 系统108的新版本。存储系统100可以具有处理器(未示出),该处理器通过执行定义存储系统100 的整体操作的计算机程序指令而控制存储系统100的整体操作。当期望执行计算机程序 指令时,计算机程序指令可以被存储在存储设备(例如,磁盘,数据库等)中和/或被 加载到存储器中。因此,用于执行这里所述的方法步骤和方法300和500中诸如数据存 储、数据块生成、文件读和/或写操作等的存储系统100的相关功能的应用程序,由存储 器中存储的计算机程序指令来定义并由执行该计算机程序指令的处理器来控制。存储系 统100可以包括一个或多个中央处理单元、只读存储器(ROM)设备和/或随机访问存储 器(RAM)设备。本领域技术人员将认识到,实际的内容可寻址存储系统的实现也能包括 其他组件,以及图1的存储系统100是出于解释目的的这类存储系统的一些组件的高级表
7J\ ο根据本发明的一些实施例,程序(例如,控制器软件)的指令能被读入到文件服 务器102、块存储106和/或提交服务器112,诸如从ROM设备到RAM设备或从LAN适 配器到RAM设备。程序中指令序列的执行会导致存储系统100执行这里所述的方法步骤 中的一个或多个,诸如上文参考方法300和500所述的那些步骤。在替代实施例中,硬 连线电路或集成电路可以用于取代软件指令或与软件指令结合来实现本发明的处理。因 此,本发明的实施例不限于硬件、固件和/或软件的任何特定组合。块存储106可以为存 储系统100存储软件,存储系统100能适于执行软件程序并从而根据本发明以及尤其根据 上文详细描述的方法进行操作。然而,本领域普通技术人员能理解的是,能够使用许多 编程技术以及通用硬件子系统或专用控制器以许多不同的方式来实施这里所述的发明。可以以压缩的、未编译的、和/或加密的格式来存储这类程序。这些程序可以 进一步包括可以是通用的程序单元,诸如操作系统、数据库管理系统和允许控制器与计 算机外围设备接口的设备驱动器,以及其它设备/组件。合适的通用程序单元对于本领 域技术人员而言是公知的且不需要在这里被详加描述。图2描述了根据本发明实施例的文件系统108。文件系统108与图1存储系统 100的块存储106结合使用和/或作为其一部分。文件系统108是包含在存储器中模仿 树结构的数据结构。在至少一个实施例中,文件系统108具有存储树,该存储树以允许 信息(例如,元数据、地址、内容地址等)的高效插入、获取和移除的方式来表示数据。 在至少一个实施例中,文件系统108使用对于imap和每个i节点(inode)的组织而言公知 的B+树,尽管可以使用任何合适的树或其它数据结构。在相同或替代实施例中,文件系统108具有类Unix结构,其中通过i节点204表 示文件、目录和/或符号链接,诸如数据块202(例如,如上所述从文件服务器102接收的数据块)和/或相关信息。i节点204本身是类Unix结构中的数据结构,其存储关于 数据、文件、其它数据结构等的基本信息(例如,元数据、内容地址等)的。i节点204 是i节点树206的根块。i节点树206可以是B+树并使用数据块202的地址来提供到数 据块202的映射。这样容纳来自客户端104的具有可变大小数据块202的大型文件。转而,在作为imap树210的一部分的imap块208中通过单个i节点号索引i节 点204中的每一个。imap树210本身是数据结构,诸如B+树,根块是imap212。因为 i节点号和数据块202的地址之间没有自动映射,imap 212帮助其间的转化。这可以类似 于日志结构的文件系统或其它合适的文件系统。imap 212包括imap树210并且是有效i 节点号和i节点204的地址的阵列,被分割为固定大小的imap块208并由imap树210索 弓丨。作为i节点204的映射的imap 212记住使用中的i节点号和相应的i节点204的内容 地址。随着i节点数目的增加,额外的i节点块208被添加到imap212以存储它们的内容 地址。可以使用重用i节点号以避免创建太大的数据结构的任何策略,诸如其它类Unix 文件系统中出现的。将imap树210的根(imap 212)存储在超级块214中。超级块214是包含指向 imap 212的指针、文件系统108的参数和文件系统108的版本号的块。如下文将更详细 地描述的一样,每当写入新的超级块时创建文件系统108的新版本,因此文件系统108包 括多个超级块214。S卩,文件系统108具有由存储系统110的提交服务器112写入的用于 文件系统108的每个版本的超级块214。最新的超级块214可以用于获取最新的信息。 其他超级块214可以用于获取过去存在的文件系统的“快照”。操作中,类似于基于盘的文件系统,存储系统110异步地处理文件写入(例如, 在块存储106中存储数据块)和元数据更新(例如,在块存储106中存储文件系统108的 版本)。存储系统110允许文件服务器102立即利用来自块缓冲器114和/或元数据缓冲 器116的信息并在稍后将新的文件系统108写入到块存储106中,而不是每次存储数据块 时都写入新的文件系统108版本。这样做,存储系统110可以将文件系统108的多次更 新成批为由提交服务器112进行的单次文件系统108写入。除了减少服务来自客户端104 的单个读和/或写操作所需时间,这样还摊销了更新文件系统108的成本。因为写入文 件系统108的新版本除了需要更新超级块214之外还需要更新i节点树204中的每个块以 及因此更新imap树210,这样的成批更新减少了需要重写树的上层的次数。此外,这样 允许文件系统108的每个版本能被标上时间戳或以其它方式标注以创建和/或更新时间。 这样的时间戳允许客户端104和/或存储系统100获取文件系统108的先前版本并因此访 问数据块存储106中的数据块的先前版本。可以单调地增加时间戳。在一些实施例中, 时间戳是单调增加的并不是基于实际时间。图3描述了在存储系统100中存储信息的方法300的流程图。方法300的方法 步骤可以由存储系统100执行。该方法开始于步骤302。在步骤304,在文件服务器102从客户端104接收数据。在步骤306,由文件服 务器102从块存储106获取数据和元数据。数据可以是响应于文件系统的过去操作在数 据块存储106中存储的一个或多个数据块。可以从块存储106取数据块,因此它们可以 用于生成反映客户端104所需操作(例如,重写部分文件)的新块。元数据包括使用目 录、文件大小信息、文件所有权信息等将文件名映 射到i节点。此外,元数据可以是来自文件系统108的信息,诸如客户端104不可见的数据块内容地址。在步骤308,生成一个或多个数据块。这里,由文件服务器102将步骤304接 收的来自客户端104的数据组块为数据块。文件服务器102使用常规方法生成数据块。 艮口,根据来自客户端102的输入数据,由文件服务器102创建离散数据量的块。此外, 每个数据块的内容的地址和其它关联元数据由文件服务器102与写完成确认一起获得。

文件服务器102在与文件系统108的i节点204相关联的缓冲器(未示出)中积 累步骤304中从客户端104接收的数据。当客户端104在其打开文件而提供到文件的路 径时,文件服务器102使用该路径查找i节点204并保留它作为客户端104对文件的后续 操作的上下文。通过检查从客户端102接收的数据的内容以找到断点,从而找到块之间 的边界,所述断点增加写入相同数据将产生相同块的可能性。当发现数据块边界时,缓 冲器中直到该点所存储的数据用于生成新的数据块。保留在缓冲器中的数据用作后续数 据块的一部分或全部。在一些实施例中,使用所缓存数据的量的全局限制以限制存储器 消耗并避免i节点缓冲器无限制地增长。文件服务器102在块缓冲器114中保留数据块直到块存储106通过返回块的内容 地址而确认块写入。一旦接收到内容地址,则可以从块缓冲器114中逐出所述块,因为 其可以通过使用内容地址被再取。在步骤310,数据块被写入到块存储106并元数据操作生成。如上所述,文件 服务器102将生成的数据块发送到块存储106。将与作为写入结果而需修改的数据块相 关的任何元数据操作(例如,数据块的内容地址等)存储在元数据缓冲器116中。由文 件服务器102将所有元数据操作记入更新日志110。元数据操作是与要在块存储106和/ 或在文件系统108执行的动作相关的指令。例如,如果数据块要被删除,元数据操作是 对提交服务器112的删除数据块(例如,图2中数据块202之一等)的指令。当然,任 何要从文件服务器102发送到提交服务器112和/或块存储106的合适指令或操作都可以 被认为是元数据操作。块存储106确认(多个)数据块的存储,且指示数据块的内容地址和时间戳、i 节点号和对应新存储的数据块的字节范围一起被添加到未提交块表118。然后将块缓冲器 114中存储的数据块的副本标记为“dean(干净的)”。即,该副本将被标记为可用于从 块缓冲器114逐出(例如,清除)。在步骤312,提交服务器112从更新日志110获取元数据操作。在一些实施例 中,将更新日志Iio存储在块存储106中。在其它实施例中,提交服务器112直接从文 件服务器102获取元数据操作。在提交服务器112已获取一批元数据操作和/或内容地址之后,在步骤314,提 交服务器生成文件系统108的版本。S卩,提交服务器112可以在提交元数据缓冲器120 中存储指示多个数据块的元数据,直到存储预定量的元数据。然后,提交服务器112可 以成批处理提交元数据缓冲器120中存储的所有元数据操作,并生成文件系统108的新版 本。这样,提交服务器112减少必须生成文件系统108的新版本的次数。提交服务器可以通过首先在i节点206的i节点树204中存储关于数据块202的 信息,然后通过imap 212中imap树210的i节点块208沿着该路径前进到根(例如超级 块214),从而自下向上生成文件系统108的新版本。最后,生成根块-超级块214的新版本-以及指示对该版本的文件系统108有贡献的最后日志记录的时间戳。这样,每批 中并且因而每次生成的文件系统108的版本中的元数据是已知的,并且可以由客户端104 和/或存储系统100适当地调回。在步骤316,在块存储106中存储文件系统108的新生成版本。文件系统108的 新版本取代之前版本作为当前相关版本,但不必重写文件系统108的之前版本。这样, 可以根据它们各自的时间戳访问文件系统108的之前版本。因此,也可以获取旧数据块 的地址信息。在步骤318,文件服务器102访问文件系统108以确定文件系统108的版本和时 间戳。然后文件服务器102可以使用时间戳将元数据缓冲器116中“dirty(脏的)”元 数据标记为“dean(干净的)”。该信息与下文参考图5所述的元数据清洁方法500结 合使用。在步骤320方法300结束。应当理解,方法300的一些方法步骤能基本同时地执行。例如,在步骤304文件服务器104从客户端104接收数据可以与在步骤308其它 数据用于产生数据块基本同时。类似,在步骤310在块存储106中存储数据块可以与提 交服务器112生成并在块存储106存储文件系统108的新版本基本同时。这样,存储系 统100可以更快速高效地更新存储和地址信息。图4描述了在元数据缓冲器116中存储的示例性元数据树400。元数据树400反 映并是结构上类似块存储106中文件系统108的数据结构。换而言之,元数据树400是 对本申请所讨论的文件系统的数据结构进行描述的替代形式。元数据树400中包含的信 息是在方法300的步骤306获取的文件系统108中的元数据的副本。图4中元数据对象 402-416中每一个具有关联时间戳。S卩,每个元数据对象具有为单调计数器的关联相对年 限。指定的最高计数器数值与最近指定(例如,最新)的信息相一致。这样,认为具有 较高计数器数值的元数据对象比具有较低计数器数值的元数据对象更新或更近,所述具 有较低计数器数值的元数据对象被认为更老或更不新近。元数据树400包括超级块402。对超级块402指定版本号和对应于版本的关联时 间戳和/或以上参考图2讨论的块存储106中文件系统108相应版本的时间戳。在示例 性元数据树400中,超级块402具有版本号37和关联时间戳779。类似于文件系统108,元数据树400具有一个或多个imap块404、406。imap 块404、406具有各自的关联时间戳797和805。S卩,分别通过时间戳797和805指示从 imap块404和406延伸的树的分枝中的最新信息。当然,超级块402能具有从属于它的 任意数量的imap块。imap块404和406中的每一个可以映射到一个或多个i节点。例如,imap块404 可以映射到i节点408和410,每个具有各自的时间戳787和792。同样,imap块406可 以映射到i节点412和414,每个具有各自的时间戳805和794。当然,可以使用任意数 量的imap块和/或i节点。元数据树400中每个对象(i节点、imap块、超级块等)具 有至少和从属于它的任何对象的最新时间戳一样新的时间戳。可以通过诸如超级块416的超级块的新版本更新元数据树400。对超级块416 指定版本号和对应于版本的时间戳和/或以上参考图2讨论的块存储106中文件系统108 相应版本的时间戳。在图4的示例性实施例中,超级块416具有版本号38和关联时间戳802。因此,可以认为超级块416比超级块402新。元数据树400仅仅是示例并且是与存储系统100结合使用的数据结构的简化版 本。在描述方法500的方法步骤时,为了简化将元数据树400表示为直接分支的树。图5描述了在文件服务器102中维护元数据的方法500的流程图。在文件服务器 102中维护元数据包括在元数据缓冲器116中维护元数据树,诸如图4的元数据树400。 方法500可以被认为是元数据缓冲器116的“清洁”或更新。元数据对象(例如元数据对象402-416)被指定为干净、脏或旧。干净对象是在 上述方法300的方法步骤306中从文件系统108获取的、没有经过修改的、并能在任何时 间从元数据缓冲器116中丢弃的对象。脏对象是具有比最近超级块的时间戳更大的时间 戳的元数据对象。脏对象不可以被丢弃。脏对象的父对象(脏对象所从属的对象)必须 为脏。旧对象是具有比最近超级块的时间戳更小的时间戳的元数据对象。旧对象可以在 任何时间被丢弃。旧对象可以包含一些当前内容地址,然而如果文件服务器要使用块中 存储的内容地址之一,文件服务器必须从块存储106再取旧块。旧块的新和更新版本可 以具有不同的内容地址,所述内容地址由提交服务器112在写入更新块的子块时产生。 旧对象的父对象可以为旧或脏并可以具有其它脏子块。方法500开始于步骤502。 在步骤504,在元数据缓冲器116接收元数据操作。这类元数据操作可以包括超 级块的新版本,诸如图4的超级块416。超级块的新版本基于提交服务器112自下而上 进行的文件系统108的写入。提交服务器112根据时间戳顺序成批处理该元数据。提交 服务器112为该批生成超级块(例如,根块)时间戳,其为该批中最新的元数据部分的时 间戳。提交服务器112根据上述的文件系统108的树从下至上地将修改块写入文件系统 108。文件系统108的超级块必然是最后写入的块并在合适时间(例如,被取时)传递到 元数据缓冲器116。在步骤506,适时地基于所接收的超级块的时间戳将元数据对象指定为旧。艮口, 时间戳旧于所接收的超级块的时间戳的任何脏元数据对象都被指定为旧。在图4的示例性实施例中,imap块404和406以及i节点408414最初都为脏, 因为它们的时间戳比最初超级块402的时间戳更新(例如,更大)。因此,当接收具有时 间戳802的超级块416时,将imap块404指定为旧,因为它具有比超级块416更老(例 如,更小)的时间戳(797)。同样,i节点408、410和414也被指定为旧,因为它们的 时间戳也老于超级块416的时间戳。在步骤508,丢弃旧元数据对象。根据元数据树(例如,元数据树400)自上而 下地丢弃旧元数据对象。从上而下地丢弃旧元数据对象确保所丢弃的对象不会被使用来 自其旧的父块的过时的内容地址而从文件系统108再取。结果,在没有首先丢弃其父块 时不能丢弃旧的子块。因此,根据树的从属性的链丢弃元数据对象。在示例性元数据树 400中,首先丢弃超级块402,接着是imap块404和406,最后是i节点408-414。在图4的示例性实施例中,imap块404和其子i节点408和410为旧并被丢弃。
I节点414在步骤506也被确定为旧,但因为它的父块imap块406不为旧,所以不能被丢 弃。在一些实施例中,取代丢弃的元数据对象。该取代是可选的。例如,在从目录中移除文件之后,对该目录不执行进一步的操作。因此,不需要继续存储该目录。用来 自文件系统108的版本取代所丢弃的元数据对象。在图4的示例性实施例中,从文件系 统108获取对应于超级块406的imap块404和i节点408和410的新版本并将其存储在元 数据缓冲器116中。方法500结束于步骤510。
上述的具体实施方式
应被理解为解释性和示例性的,但不是限制性的,这里公 开的本发明的范围并不是由具体实施方式
所确定,而是由根据专利法允许的最大范围解 释的权利要求来确定。应该理解,这里所示和所述的实施例仅仅解释本发明的原理,本 领域技术人员可以在不背离本发明的范围和精神的情况下实施各种修改。本领域技术人 员可以在不偏离本发明的范围和精神下实施各种其他的特征组合。
权利要求
1.一种在存储系统中存储信息的方法,包括 使用文件服务器将数据组块为一个或多个数据块; 使用文件服务器生成文件系统的元数据操作; 在块存储中存储所述一个或多个数据块;使用提交服务器获取所述元数据操作;使用提交服务器基于所述元数据操作和所述一个或多个数据块生成数据结构;以及 在所述块存储中存储所述数据结构。
2.根据权利要求1所述的方法进一步包括 在更新日志中存储所述元数据操作;以及其中使用提交服务器获取所述元数据操作包括从更新日志获取所述元数据操作。
3.根据权利要求1所述的方法,其中在块存储中存储所述一个或多个数据块与在所述 块存储中存储所述数据结构基本同时发生。
4.根据权利要求1所述的方法进一步包括 在所述文件服务器从客户端接收数据;以及其中使用文件服务器将数据组块为一个或多个数据块包括将从客户端接收的数据分 离为一个或多个数据块。
5.根据权利要求2所述的方法,其中使用文件服务器将数据组块为一个或多个数据块 以及使用文件服务器生成元数据操作进一步包括将时间戳和所生成的元数据操作相关联 并包括在所述文件服务器存储所生成的元数据操作;以及至少部分地基于与所获取的元数据操作相关联的一个或多个时间戳而使用存储为数 据结构的版本的元数据清洁在文件服务器存储的元数据。
6.根据权利要求2所述的方法,其中使用提交服务器生成包括元数据的数据结构包括获取与所获取的元数据操作相关联的一个或多个时间戳; 基于所获取的元数据操作修改元数据缓冲器中的元数据; 使元数据操作成批;以及至少部分地基于与所获取的元数据相关联的一个或多个时间戳存储元数据作为数据 结构的版本。
7.—种存储数据的系统,包括文件服务器,被配置成将数据组块为数据块并生成元数据操作; 存储器,被配置成存储数据块;提交服务器,被配置成获取元数据操作,生成指示元数据操作的数据结构,并在所 述存储器中存储该数据结构。
8.根据权利要求7所述的系统,进一步包括更新日志,被配置成从文件服务器接收元数据操作并将元数据操作传递到提交服务器。
9.一种在文件服务器维护元数据结构的方法,包括具有关联时间戳的第一超级块和 一个或多个元数据对象,所述一个或多个元数据对象中的每一个具有关联时间戳,该方法包括接收具有关联时间戳 的第二超级块,所述第二超级块的关联时间戳具有比第一超级 块的计数器数值更高的计数器数值;基于第二超级块的时间戳和所述一个或多个从属元数据对象的时间戳而指定所述一 个或多个元数据对象中的至少一个为旧;以及 丢弃指定为旧的所述一个或多个元数据对象。
全文摘要
将诸如从客户端接收的文件等的信息存储在诸如内容可寻址存储系统的存储系统中。文件服务器从客户端接收数据并将数据组块为数据块。文件服务器还生成用于形成数据结构的元数据。数据块被存储在块存储中并且在文件服务器中本地缓存元数据和数据块的副本。提交服务器取元数据。在至少一个实施例中,从文件服务器和提交服务器之间共享的更新日志获取元数据。提交服务器基于获取的元数据生成数据结构的版本。然后将数据结构存储在块存储中。
文档编号G06F17/40GK102016852SQ200880128482
公开日2011年4月13日 申请日期2008年3月17日 优先权日2008年3月5日
发明者B·阿特金, C·昂古里努, C·杜布尼基, G·卡尔科夫斯基 申请人:美国日本电气实验室公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1