用于可伸缩文件系统恢复的资源管理的制作方法

文档序号:6465627阅读:120来源:国知局
专利名称:用于可伸缩文件系统恢复的资源管理的制作方法
技术领域
本发明涉及计算机系统,更具体地讲,涉及计算机系统内的文件 系统的资源管理。
背景技术
计算机文件存储系统正变得越来越大,消耗大量的资源,并且对 于多种文件系统操作来说存在可伸缩性问题。具体地讲,在传统的文 件系统中,修复受损文件系统所需的时间量在最好时会随着文件系统 元数据的大小而成比例增长。在进行修复的同时,文件系统通常是离 线的,从而造成长时间不能访问所存储的文件,这令人难以接受。
修复受损文件系统如此耗时的一个原因是,资源被毫无约束地进 行全局分配。因此,错误会影响文件系统的任一部分,这就必须进行 彻底的一致性检查。换言之,故障域可能是整个文件系统。为了支持
诸如公知的文件系统一致性检查器(FSCK)的工具,必须要维护全 局元数据跟踪表。在FSCK运行期间,必须能够访问这些跟踪表。因 此,对虛拟内存子系统施加了压力,并且会难以使一致性检查操作并 行化。如果将大文件系统划分成许多较小的文件系统,那么修复这些 较小系统中的一个会比较快。然而,还会有不可接受的管理开销,并 且单个文件系统的语义可能会丢失。可以采用多种技术来减少运行 FSCK之类的工具所需的时间。然而,有些类型的错误(例如,由软 件缺陷(bug)或外部代理造成的错误)可能仍然需要耗时的一致性 检查。鉴于上文,期望一种解决这些问题的用于动态管理文件系统的 资源的更有效的系统和方法。

发明内容
公开了计算机系统和方法的多种实施例。在一个实施例中,提供 了一种计算机系统,其包括文件系统,该文件系统包括存储的数据和 关联的存储的元数据。响应于检测到发生了文件系统错误,文件系统 被配置成识别包括发生了错误的文件数据和关联元数据的第 一容器, 并对包括在第 一容器中的文件数据和关联元数据执行一致性检查。在 一个实施例中,容器是文件系统的动态创建的、大小可变的部分,该 部分包括多个分配的数据存储单元和关联的元数据存储单元。在另一 实施例中,可将数据存储在块中并将关联元数据存储在索引节点
(inode )中。可使用容器来隔离索引节点和块的所属关系 (ownership)。例如,容器中的索引节点可以仅引用同 一容器中的 块。如果在第一容器和第二容器之间存在双向链接,并且如果在该双 向链接中发现了错误,那么文件系统被进一步配置成对包括在第二容 器中的文件数据和关联元数据执行一致性检查,并确定在第二容器和 第三容器之间是否存在第二双向链接。如果在第二容器和第三容器之 间存在双向链接,并且如果在第二双向链接中发现了错误,那么文件 系统被进一步配置成对包括在第三容器中的文件数据和关联元数据 执行一致性检查。
响应于接收到存储新文件数据的请求,文件系统被进一步配置 成识别包括在逻辑名字空间中链接到新文件数据的先前存储的数据 的目标容器。如果所述新文件数据不包括新目录,或者如果所述新文 件数据包括新目录并且所述目标容器有足够的资源来容纳新目录,则 所述文件系统被进一步配置成将所述新文件数据存储在所述目标容 器中。如果所述目标容器没有足够的资源用于新目录,则所述文件系 统被进一步配置成创建链接容器;将文件数据存储在所述链接容器 中;并存储所述目标容器和所述链接容器之间的双向链接。响应于诸 如在逻辑名字空间中移动文件或重命名文件的文件系统操作,所述文 件系统可被进一步配置成响应于检测到在逻辑名字空间中创建第三 容器中存储的数据和第四容器中存储的数据之间的连接的操作,存储 所述第三容器和所述第四容器之间的双向链接。
所述文件系统被进一步配置成维护容器之间的双向链接的表。所 述双向链接的表包括至少一对条目,每个条目识别源容器、源索引节 点和目的索引节点。给定条目的源索引节点用于存储与在所述给定条 目的源容器中存储的文件数据相关联的元数据。 一个给定对的第一条 目的目的索引节点与该给定对的第二条目的源索引节点相同。 考虑以下的描述和附图,这些和其它实施例将变得清楚。


图l示出了计算机系统的一个实施例。
图2示出了逻辑名字空间的一个实施例。
图3a示出了可用于在文件系统内存储数据的处理的一个实施例。
图3b示出了可用于对文件系统执行一致性检查的处理的一个实施例。
图4是物理文件系统的一个实施例的一般化框图。 图5示出了可用于管理容器及其关联索引节点的一组表的一个 实施例。
图6示出了可用于管理容器及其关联块的一组表的一个实施例。 图7示出了可用于管理容器及其关联链接的一组表的一个实施例。
图8示出了可用于在文件系统内存储数据的处理的一个实施例。 图9示出了可用于对跨容器边界的文件系统操作进行跟踪的处 理的一个实施例。
图IO示出了可用于扫描文件系统的错误的处理的一个实施例。 虽然本发明容许各种更改和可替换形式,但是通过附图中的示例 示出了具体实施例并在此对其进行详细描述。然而,应当明白的是, 附图及对它的详细描述并不意图将本发明限制在所公开的具体形式, 相反,本发明旨在覆盖落在所附权利要求所限定的本发明的精神和范 围内的所有变型、等同物和替换物。
具体实施例方式
图1示出了计算机系统100的一个实施例。如所示出的,系统 100包括物理文件系统120和逻辑名字空间130。物理文件系统120 可包括耦合到逻辑名字空间130的全局资源管理器110。在一另选实 施例中,全局资源管理器110可以是独立的组件。物理文件系统120 也可以耦合到一个或更多个数据存储设备,例如硬盘或CD-ROM等。 传统上,物理文件系统120还可耦合到一个或更多个处理元件(未示 出)或其它标准计算机系统组件。
全局资源管理器110可以负责分配物理文件系统120的资源,例 如索引节点、块或者元数据和数据存储的其它物理单元。全局资源管 理器110还可以维护对资源分配进行跟踪的数据结构。此外,全局资 源管理器IIO可以跟踪物理文件系统120的状态,并且可以检测和纠 正可能由于异常结束操作、软件缺陷、突然断电等而引起的错误。全 局资源管理器110可以实现为硬件、軟件或者它们的组合。
图2示出了逻辑名字空间130的一个实施例。在示出的实施例中, 名字空间130从根节点210开始,并且包括节点220、 225、 231-235、 241和242。节点220和225可以链接到根节点210,节点231和232 可以连接到节点220,节点233-235可以链接到节点225,节点241 和242可以链接到节点232。节点可以按分层的等级进行链接。例如, 节点220和225可以形成分层结构的第二等级,节点231-235可以形 成第三等级等等。在另选实施例中,名字空间130可以包括比图2中 所示出的要多得多的节点和多得多的等级,包括少于或多于两个的链 接到根节点的节点。
在操作期间,当在系统IOO中存储文件时,用户可以选择逻辑名 字空间130内的目标位置。逻辑名字空间130中的目标位置可以被映 射到文件系统120中的物理位置。全局资源管理器IIO可以管理文件 系统120内的资源分配,并可以根据下面将进一步描述的处理来执行 诸如检测与纠正文件系统120中的元数据错误和其它不一致性的维护操作。
现在转到图3a和图3b,其示出了可以由全局资源管理器110执 行的一般化处理。具体地讲,图3a示出了可用于在文件系统内存储 数据的处理302的一个实施例,图3b示出了可用于对文件系统执行 一致性检查的处理304的一个实施例。要注意的是在另选实施例中, 在处理302和处理304中示出的单独块可以按不同的次序执行;并且 /或者一些块可以与其它块并行执行。如这里所使用的, 一致性检查可 包括被配置成检测和/或纠正错误的一个或更多个处理。
处理302可以从接收在文件系统中存储数据的请求(块310)开 始。如果该请求要求创建新的顶级目录(判定块320),那么可以创 建新容器(块330 ),可以将数据与关联元数据一起存储在该新容器 中(块335),从而该处理完成。这里所使用的以及在下文进一步详 细描述的容器是指文件系统的动态创建的、大小可变的部分,该部分 包括多个分配的数据存储单元和关联的元数据存储单元。在一个实施 例中,数据可以被存储在块中,关联元数据可以被存储在索引节点中。 容器可用来隔离索引节点和块的所属关系。例如,容器中的索引节点 可以仅引用同一容器中的块。
如果目标位置不是新的顶级目录(判定块320 ),那么可以识别 包括待存储数据的父文件的容器(块340)。如果该请求没有要求在 顶级目录下面创建新目录(判定块342 ),那么可以将数据与关联元 数据一起存储在所识别的容器中(块344),从而该处理完成。换言 之,要存储在现有目录中的新文件数据可以总是被存储在与父目录相 同的容器中。如果该请求要求在顶级目录下创建新目录,并且如果确 定了空间足以为该新目录保持期望数据(判定块350),那么可将数 据与关联元数据一起存储在所识别的容器中(块344),从而该处理 完成。否则,可创建新的链接容器(块352)。然后,可将数据与关 联元数据一起存储在该链接容器中(块354)。此外,可以在所识别 的容器和所述链接容器之间创建双向链接(块356),从而完成该处 理。
处理304可以从接收检查文件系统的错误的请求(块360 )开始。 可以在记录失配元数据和未完结事务的状态跟踪表中对错误进行跟 踪。 一旦接收到请求,就可以对分配给文件系统的各容器的资源的范 围(scope)进行检查(块362 ),从而使错误局部化。然后,可以选 择与第一容器对应的状态记录(块364 )。如果在所选状态记录中检 测到错误(判定块370),那么可以检查存储在对应容器中的各个文 件的元数据,并纠正任意错误(块380 )。此外,可以检查对应容器 与其它容器之间的任何链接(块385)。如果双向链接的一侧或两侧 不是有效的(判定块390 ),那么可修复该链接,并可以选择该链接 所连接的容器(块395 )。可以通过重复执行块380、块385、块390 和块395按类似的方式来检查新选择的容器及其链接,直到检测不到 双向链接错误为止。当没有剩余的链接错误时(判定块390)或者如 果在所选状态记录中没有检测到容器错误(判定块370),并且如果 尚未检查到最后一个状态记录(判定块374),那么可选择下一状态 记录(块372),并且重复错误检测(块370 )。 一旦检查了最后一 个状态记录(判定块374),则该处理完成。
图4是物理文件系统120的一个实施例的一般化框图。在示出的 实施例中,物理文件系统120包括一个或更多个容器,例如容器"0、 420、 430、 440和450。每个容器包括存储空间和关联元数据。例如, 容器410包括存储器414,存储器414可包括用来存储大量数据文件 的空间。容器410还包括元数据412,元数据412包括与存储在存储 器414中的文件相关联的元数据。类似地,容器420包括存储器424 和元数据422,容器430包括存储器434和元数据432,容器440包 括存储器444和元数据442,并且容器450包括存储器454和元数据 452。虽然仅示出了五个容器,但是在物理文件系统120中可以包括 更多或更少的容器。每个容器可通过双向链接而链接到一个或更多个 其它容器,这也被称为跨容器引用(cross-container reference )。
例如,在示出的实施例中,容器410和容器420通过链接461 和462连接,容器410和容器430通过链接463和464连接,容器440
和容器450通过链接465、 466、 467和468连接。如果检测到特定条 件,例如检测到第一容器没有足够的用于另外的存储数据的资源,则 可以建立从该第一容器到第二容器的链接。这种条件可被称作溢出, 第二容器可被称作是链接容器。例如,在一个实施例中,当将更多的 存储添加到第一容器将要求其管理超过预定最大数量的存储单元、对 象、文件等时,可添加链接容器。在不同的实施例中,限定资源是否 充足的标准可以包括代替存储器资源可用性的任何期望标准或除存 储器资源可用性以外的任何期望标准,并且可通过决策来确定、通过 用户输入来动态地确定、或者通过任何其它期望手段来确定。
在物理文件系统120的一个实施例中,存储器和元数据可包括传 统的块和索引节点。更具体地讲,存储元件414、 424、 434等中的每 个可包括一个或更多个块集的分配,元数据元件412、 422、 432等中 的每个可包括对应的索引节点集。可以通过下面将进一步描述的处理 将块集和索引节点集分配给容器。全局资源管理器IIO可以对块和索 引节点到容器的映射的记录进行维护,以及利用各种数据结构来跟踪 容器之间的链接。图5、图6和图7及所附描述提供了这样的数据结 构的一个实施例的细节,在所述数据结构中,元数据的单元是索引节 点,并且数据存储的单元是块。在另选实施例中,可以使用各种存储 分配单元和元数据单元中的任何一种来代替块和索引节点。
图5示出了可用于管理容器及其关联索引节点的一组表的一个 实施例。图5包括容器状态表510、索引节点集所属关系表520和索 引节点集概要表530。表510可包括在文件系统中已创建的每个容器 的条目。如在所示出的实施例中所表明的,条目可通过容器ID 512 来区分。因此,示出了通过容器ID Cl、 C2、 C3、 C4和C5标识的 五个条目。每次当将一个容器添加到文件系统时,可将一个条目添加 到该表中。每个条目还可包括状态位514和516。状态位514和516 可记录与对应容器相关联的潜在错误情形。
例如,在一个实施例中,状态位514可以表示存在涉及存储在 或将要存储在对应容器中的数据的未完结事务。状态位516可以表示
存在冲突的元数据引用。虽然未完结事务不一定有错误,但是如果在
预期文件系统为静止(quiescent)的时候设置未完结事务状态位,则 可以假定有错误。也可假定冲突的元数据引用是指示文件系统中的错 误。每当在事务期间发生意外断电时,在硬件故障之后,或者由于软 件错误等,就会遇到这种情形。在系统重启时,可以设置未完结事务 位,其指示虽然事务不再是待处理的,但是事务并未完成。对于本领 域的普通技术人员显而易见的是,可通过状态位来跟踪其它错误情 形。
表520可以包括在文件系统中已分配的每个索引节点集的条目。 如所示出的实施例中所表明的,条目可通过索引节点集ID 524来区 分。因此,示出了通过索引节点集IDIS1至IS11标识的ll个条目。 每次当在文件系统中分配一个索引节点集时,可将一个条目添加到该 表中。每个条目还可包括容器ID 522,容器ID 522指示索引节点集 被分配给哪个容器。
表530包含对每个容器的索引节点使用进行概括的数据。在一个 实施例中,表530可包括条目531至538等。每个条目可包括索引节 点集ID541、已分配索引节点计数542、空闲索引节点计数543和目 录索引节点计数544。每次当分配一个索引节点时,例如每当将一个 文件或目录添加到文件系统时,可在该表中更新一个条目。索引节点 集ID 541可保持用于识别索引节点集并与表520中的索引节点集ID 524的值相匹配的值。表530可通过索引节点集ID541来索引。已分 配索引节点计数542跟踪该集合中已分配的索引节点的数目。空闲索 引节点计数543跟踪该集合中可供分配的索引节点的数目。目录索引 节点计数544跟踪与目录而非文件相关联的索引节点的数目。
图6示出了可用于管理容器及其关联块的一组表的一个实施例。 图6包括块集所属关系表620和块集概要表630。表620可包括在文 件系统中已分配的每个块集的条目。如所示出的实施例中所表明的, 条目可通过块集ID 624来区分。因此,示出了通过块集IDSl至Sll 标识的11个条目。每次当将一个块集分配给容器时,可将一个条目
添加到该表中。每个条目还可包括容器ID 622,容器ID 622指示该 块集已分配给哪个容器。表630可包括条目631至638等。每个条目 可包括块集ID641、容器ID 642和块集概要643。块集ID 641可保 持用于识别块集并与表620中的块集ID 624的值相匹配的值。容器 ID 642可保持用于识别块被分配到的容器的值,该值与表620中的容 器ID 622的值相匹配。块集概要643可包括描述与块集ID 641相关 联的块的使用的数据。每次当使用一个块时,例如,每当将文件数据 添加到文件系统时,可在表630中更新一个条目。
图7示出了可用于管理容器及其关联链接的容器链接表710和 750的一个实施例。每个容器可以与它自身的容器链接表相关联。表 710可包括条目711至718等,并且可以与笫一容器相关联。类似地, 表750可包括条目751至758等,并且可以与笫二容器相关联。每个 条目可包括类型字段和两个附加字段。例如,条目711可包括类型722、 内部索引节点ID 723和外部索引节点ID 724。类型722的值为"外部", 这表示内部索引节点723引用通过外部索引节点ID 724识别的另 一容 器中的索引节点。如果在文件系统中不存在错误或元数据失配,那么 将在另一容器链接表(例如表750)中存在对应的第二条目,在这种 情况下表750包括匹配条目758。条目758包括类型782,类型782 的值为"外部",这表示内部索引节点783引用通过外部索引节点ID 784识别的另一容器中的索引节点。在这种情况下,内部索引节点ID 783的值与条目711的外部索引节点ID 724的值相同,并且外部索引 节点ID 784的值与条目711的内部索引节点ID 723的值相同。还示 出了包括类型742、内部索引节点ID 743和内部文件ID 744的条目 714。类型742的值为"内部",这表示内部索引节点743引用通过内 部文件ID 744识别的同一容器内的文件。与形成双向对的条目711 和758不同,条目714没有位于另 一容器链接表中的匹配条目。相反, 条目714指示同一容器中的文件和目录之间的额外硬链接。所有文件 可以具有到目录的至少一个链接,但是可以具有到其它目录的附加链 接。可以借助诸如表710中的条目714来跟踪每个附加链接,在修复
操作期间,全局资源管理器可以利用在匹配的条目对中存在的冗余来 确定文件系统元数据的正确状态。
图8示出了可用于在文件系统内存储数据的处理800的一个实施 例。处理800可以从接收新数据存储请求(块810)开始。可以首先 确定作为存储请求的目标的容器(块820 )。然后,如果索引节点和 足够数目的块可用于保持来自该请求的数据(判定块830),那么可 以设置容器状态表中该目标容器的未完结事务状态位(块860)。为 了确定索引节点的可用性,可以查询索引节点集所属关系表和索引节 点集概要表。为了确定块的可用性,可以查询块集所属关系表和块集 概要表。可以识别可用的索引节点(块862),可以识别可用的块(块 864),并将所述块与所述索引节点关联(块870)。 一旦索引节点和 块被关联并被指定为要使用,则它们在索引节点集概要表和块集概要 表中的对应条目可被更新,以指示它们正在使用(块875)。然后, 可将数据存储在指定的块中(块880)。在存储了数据之后,可以清 除容器状态表中该目标容器的未完结事务状态位(块885 ),从而完 成该处理。
返回到判定块830,如果在目标容器中没有索引节点和足够数目 的块可用来保持来自该请求的数据,那么可确定新数据请求的类型。 如果该请求不是要添加新顶级目录或者需要比目标容器可提供空间 多的空间的新目录(判定块840),那么可设置容器状态表中该目标 容器的未完结事务状态位(块850)。可以获得一个索引节点集,并 将其分配给目标容器(块852)。可以创建索引节点集所属关系表和 索引节点集概要表中的新条目,以指示新索引节点被分配给目标容器 并且正在使用(块854)。可以获得一个块集,并将该块集分配给目 标容器(块856)。可以创建块集所属关系表和块集概要表中的新条 目,以指示新块被分配给目标容器并且正在使用(块858)。可以将 一个或更多个新块与一个新索引节点关联(块870 ),并执行剩余的 处理,即块875、 880和885,从而如前面描述地完成该处理。
返回到判定块840,如果该请求是要添加新顶级目录或者需要比
目标容器可提供空间多的空间的新目录,则可以将新的链接容器添加
到与目标容器链接的文件系统(块842 )。然后,可以在容器状态表 中创建一个新容器条目,并且可以设置新条目的未完结事务状态位 (块844)。然后,处理800可以从块852继续进行直到完成。要注 意的是,在另选实施例中,处理800中示出的单独块可以按不同的次 序来执行;并且/或者一些块可以与其它块并行执行。
图9示出了可用于对跨容器边界的文件系统操作进行跟踪的处 理900的一个实施例。处理900可以从接收在名字空间内重命名文件、 移动文件、复制文件等的、在两个文件容器之间创建了交叉引用的请 求(块910)开始。可以识别源容器(块920),并且可以识别目的 容器(块930)。例如,可以将文件从映射到第一容器(源)的名字 空间中的一个节点移动或复制到映射到第二容器(目的)的名字空间 中的另一节点。另选地,可以通过在容器之间创建跨容器引用来实现 将存储在一个容器中的文件移除到与另一容器相关联的目录。 一旦识 别了源容器和目的容器,就可以设置容器状态表中源容器和目的容器 的未完结事务状态位(块940)。然后,如杲操作是复制操作,那么 可以在目的容器中识别或获得一个索引节点(块960 ),并且可以在 目的容器中识别或获得足够数目的用于保持文件数据的块(块962)。 为了确定索引节点的可用性,可以查询索引节点集所属关系表和索引 节点集概要表。为了确定块的可用性,可以查询块集所属关系表和块 集概要表。可以将所述块与所述索引节点关联(块964)。
一旦索引节点和块被关联且被指定为要使用,则它们在索引节点 集概要表、索引节点集所属关系表、块集所属关系表和块集概要表中 的对应条目可被更新,以指示所述索引节点和块正在使用(块966)。 然后,可以将数据存储在指定块中(块968)。在存储了数据之后, 可以清除容器状态表中目标容器的未完结事务状态位(块970),从 而完成该处理。
如果操作不是复制操作,例如,如果操作是移动操作或重命名操 作,那么也可以在容器链接表中创建双向的条目对(块982)。然后,
可以清除容器状态表中目标容器的未完结事务状态位(块984 ),从 而完成该处理。要注意的是,在另选实施例中,处理900中示出的单 独块可以按不同的次序来执行;并且/或者一些块可以与其它块并行执 行。
图IO示出了可用于扫描文件系统的错误的处理1000的一个实施 例。处理1000可以从每当系统重启发生时或者响应于来自用户或应 用程序等的命令而扫描容器状态表中与所选容器对应的第一条目的 状态位(块IOIO)开始。可以假定,当发生扫描时,文件系统已处于 静止状态。因此,可以将已设置的任何未完结事务状态位解译成文件 系统错误。如果针对所选容器条目没有设置状态位(判定块1020), 并且如果已扫描了容器状态表中的所有条目(判定块1030),那么处 理1000完成(块1050 )。如果设置了状态位(判定块1020),那么 可以检查文件系统的对应部分,并纠正错误。
纠错处理可使用与在公知的FSCK操作中使用的处理相似的处 理,但是仅检查文件系统的一部分。因此,该处理可被称作"局部 FSCK"。更具体地讲,在一个实施例中,可以检查索引节点集所属关 系表和块集所属关系表中与所选容器对应的条目,以确定要验证的索 引节点和块的范围(块1060)。还可以将索引节点集概要表中的对应 条目和块集概要表中的对应条目读取到存储器中,以进一步证实索引 节点和块的所属关系。可以解决索引节点和块的所属关系中的冲突。 在处理1000中,索引节点集概要表和块集概要表中的条目随后也经 历更改。如果发现的错误数目超过了某预定阈值(判定块1070),例 如可能是发生了主文件系统损坏的情况,那么可以执行全面文件系统 检查(块10卯),从而该处理完成(块1050)。
如果仅发现少数容器含有错误(判定块1070),那么可以验证 索引节点至块(inode-to-block)的引用,并且可以修复发现的任何错 误(块1072)。可以独立地检查每个容器。更具体地讲,如果索引节 点引用无主块集中的块,那么可将该块集添加到所选容器,其中所属 关系让与是通过一个锁来保护的。如果该块集被另一容器所有,那么
可在检查并验证该另一容器之后通知该冲突以便随后解决。
接下来,可以验证索引节点的层级,并修复错误(块1074)。 更具体地讲,所述验证可包括在所有的目录块和目录条目中检查正确 的父子关系。此外,可以检查容器链接表。该检查可以包括验证至所 选容器内的文件的任何硬链接,并修复可发现的任何错误(块1076 )。 另外,可以验证所选容器的在容器链接表中引用其它容器的条目(块 1078)。如果所选容器的在容器链接表中的一个条目引用外部容器中 的索引节点,那么该外部容器的在容器链接表中的对应条目也应当存 在。如果不存在,则存在错误,必须验证该外部容器。没有条目或者 匹配的双向条目表示不存在跨容器错误。可以通过多种策略或算法之 一来解决失配条目(块1080)。例如,可以假定容器链接表中与所选 容器对应的条目的值是不正确的,并将该值修改为与对应的反向条目 一致。另外或另选地,可以去除错误目录条目或从当前容器进出的悬 摆链接。可以将孤儿索引节点链接到失物招领(lost-and-found )目录。
一旦修复了条目,就可以清除容器状态表中与所选容器对应的状 态位错误(块1085 )。如果已扫描了容器状态表中的所有条目(判定 块1030),那么处理1000完成(块1050)。如果尚未扫描容器状态 表中的所有条目(判定块1030),那么通过继续对下一容器条目进行 扫描(块1040),并检查状态位(判定块1020)等,对容器状态表 中的每个条目重复处理1000。要注意的是,在另选实施例中,处理 1000中示出的单独块可以按不同的次序来执行;并且/或者一些块可 以与其它块并行执行。
还要注意的是,上面描述的实施例可以包括软件。在这样的实施 例中,实现方法和/或机制的程序指令可以被传送或存储在计算机可读 介质上。可以使用被构造成存储程序指令的许多类型的介质,这些介 质包括硬盘、软盘、CD-ROM、 DVD、闪存、可编程ROM(PROM)、 随机存取存储器(RAM )和各种其它形式的易失性存储器或非易失性 存储器。
虽然上面已经相当详细地描述了实施例,但是对于本领域的普通技术人员, 一旦全面理解了上述公开,许多变型和更改就是显而易见 的。应该将所附权利要求书解释成包含所有的这些变型和更改。
权利要求
1、一种计算机系统,包括文件系统,包括存储的数据和存储的元数据;以及耦合到所述文件系统的处理元件,其中响应于检测到发生了文件系统错误,所述处理元件被配置成识别文件系统的与检测到的错误对应的第一容器;对包括在所述第一容器中的文件数据和元数据执行一致性检查;确定在所述文件系统的所述第一容器和第二容器之间是否存在第一双向链接;以及响应于在所述第一双向链接中检测到错误,对包括在所述第二容器中的文件数据和元数据执行一致性检查。
2、 如权利要求l所述的系统,其中,如果在所述第一双向链接 中发现错误,则所迷处理元件被进一步配置成对包括在所述第二容器中的文件数据和元数据执行一致性检查; 确定在所述第二容器和第三容器之间是否存在第二双向链接;以及响应于在所述第二双向链接中检测到错误,对包括在所述第三容 器中的文件数据和关联元数据执行一致性检查。
3、 如权利要求l所述的系统,其中所述第一容器和第二容器中 的每个包括文件系统的动态创建的、大小可变的部分,该部分包括分 配的数据存储单元和关联的元数据存储单元,其中给定容器中的元数 据排他地引用该给定容器中的数据。
4、 如权利要求3所述的系统,其中响应于接收到存储新文件数 据的请求,所述处理元件被进一步配置成识别文件系统的包括在逻辑名字空间中链接到所述新文件数据 的数据的目标容器;如杲所述新文件数据不包括新目录,或者如果所述新文件数据包 括新目录并且所述目标容器有足够的资源来容纳新目录,则将所述新文件数据存储在所述目标容器中;以及如果所述目标容器没有足够的资源来容纳新目录,贝'J: 创建链接容器;将文件数据存储在所述链接容器中;并且 存储所述目标容器和所述链接容器之间的双向链接。
5、 如权利要求4所述的系统,其中所述处理元件被进一步配置 成响应于在逻辑名字空间中创建所述文件系统的第三容器中存储的 文件数据与所述文件系统的第四容器中存储的文件数据之间的连接 的文件系统操作,存储所述笫三容器和所述第四容器之间的双向链 接。
6、 如权利要求l所述的系统,其中所述处理元件被进一步配置 成维护多个容器之间的双向链接的表。
7、 如4又利要求6所述的系统,其中所述表包括至少一对条目,每个条目识别源容器、源索引节点以及目的索引节点;其中给定条目的源索引节点对应于该给定条目的源容器;并且 其中对于给定的一对条目,第一条目的目的索引节点与第二条目的源索引节点相同。
8、 一种方法,包括以下步骤 检测到发生了文件系统错误;识别与检测到的错误对应的第 一容器;对包括在所述第 一容器中的文件数据和元数据执行一致性检查;确定在所述第一容器和第二容器之间是否存在第一双向链接;以及响应于在所述第一双向链接中检测到错误,对包括在所述第二容 器中的文件数据和元数据执行一致性检查。
9、 如权利要求8所述的方法,其中如果在所述第一双向链接中 发现错误,则该方法还包括以下步骤对包括在所述第二容器中的文件数据和元数据执行一致性检查; 确定在所述第二容器和第三容器之间是否存在第二双向链接;以及响应于在所迷第二双向链接中检测到错误,对包括在所述第三容 器中的文件数据和关联元数据执行一致性检查。
10、 如权利要求8所述的方法,其中所述第一容器和第二容器中 的每个包括文件系统的动态创建的、大小可变的部分,该部分包括分 配的数据存储单元和关联的元数据存储单元,其中给定容器中的元数 据排他地引用该给定容器中的数据。
11、 如权利要求10所述的方法,其中响应于接收到在所述文件 系统中存储新文件数据的请求,所述方法还包括以下步骤识别包括在逻辑名字空间中链接到所述新文件数据的数据的目 标容器;如果所述新文件数据不包括新目录,或者所述新文件数据包括新 目录并且所述目标容器有足够的资源来容纳新目录,则将所述新文件 数据存储在所述目标容器中;以及如果所述目标容器没有足够的资源来容纳新目录,则创建链接容器;将文件数据存储在所述链接容器中;并且 存储所述目标容器和所述链接容器之间的双向链接。
12、 如权利要求11所述的方法,还包括响应于在逻辑名字空 间中创建第三容器中存储的文件数据与第四容器中存储的文件数据 之间的连接的文件系统操作,存储所述第三容器和所述第四容器之间 的双向链接。
13、 如权利要求9所述的方法,还包括维护多个容器之间的双向 链接的表。
14、 如权利要求13所述的方法,其中所述表包括至少一对条目,每个条目识别源容器、源索引节 点以及目的索引节点;其中给定条目的源索引节点对应于该给定条目的源容器;并且 其中对于给定的一对条目,第一条目的目的索引节点与第二条目的源索引节点相同。
15、 一种计算机可读存储介质,其存储的计算机指令可由处理器 执行以用于检测到发生了文件系统错误;识别与检测到的错误对应的第 一容器;对包括在所述第 一容器中的文件数据和元数据执行一致性检查; 确定在所述第一容器和第二容器之间是否存在第一双向链接;以及响应于在所述第一双向链接中检测到错误,对包括在所述第二容 器中的文件数据和元数据执行一致性检查。
16、 如权利要求15所述的计算机可读存储介质,其中如果在所 述第一双向链接中发现错误,则所述指令还可执行以用于对包括在所述第二容器中的文件数据和元数据执行一致性检查; 确定在所述第二容器和第三容器之间是否存在第二双向链接;以及响应于在所述第二双向链接中检测到错误,对包括在所述第三容 器中的文件数据和关联元数据执行一致性检查。
17、 如权利要求15所述的计算机可读存储介质,其中所述第一 容器和第二容器中的每个包括文件系统的动态创建的、大小可变的部分,该部分包括分配的数据存储单元和关联的元数据存储单元,其中 给定容器中的元数据排他地引用该给定容器中的数据。
18、 如权利要求17所述的计算机可读存储介质,其中响应于接 收到在所述文件系统中存储新文件数据的请求,所述指令还可执行以 用于识别包括在逻辑名字空间中链接到所迷新文件数据的数据的目 标容器;如果所述新文件数据不包括新目录,或者所述新文件数椐包括新 目录并且所述目标容器有足够的资源来容纳新目录,则将所述新文件数据存储在所述目标容器中;以及如果所述目标容器没有足够的资源来容纳新目录,贝'J: 创建链接容器;将文件数据存储在所述链接容器中;并且 存储所述目标容器和所述链接容器之间的双向链接。
19、 如权利要求18所述的计算机可读存储介质,其中所述指令 还可执行以用于响应于在逻辑名字空间中创建第三容器中存储的文 件数据与第四容器中存储的文件数据之间的连接的文件系统操作,存储所迷第三容器和所述第四容器之间的双向链接。
20、 如权利要求15所述的计算机可读存储介质,其中所述指令还可执行以用于维护多个容器之间的双向链接的表;其中所述表包括至少一对条目,每个条目识别源容器、源索引节点以及目的索引节点;其中给定条目的源索引节点对应于该给定条目的源容器;并且 其中对于给定的一对条目,第一条目的目的索引节点与第二条目的源索引节点相同。
全文摘要
本发明涉及用于可伸缩文件系统恢复的资源管理。提供了一种用于存储数据的系统和方法。在一个实施例中,文件系统存储包括关联元数据的数据。响应于检测到发生了文件系统错误,文件系统识别包括发生了错误的数据的容器,并对包括在容器中的数据执行一致性检查。如果在该容器和另一容器之间存在双向链接,并且如果在该双向链接中发现了错误,那么文件系统对包括在该另一容器中的数据执行一致性检查,并确定在该另一容器和第三容器之间是否存在另一双向链接。如果在该另一容器和第三容器之间存在另一双向链接,并且如果在该另一双向链接中发现了错误,那么文件系统对包括在第三容器中的数据执行一致性检查。
文档编号G06F17/30GK101359335SQ20081013176
公开日2009年2月4日 申请日期2008年6月27日 优先权日2007年6月29日
发明者J·科尔格洛夫, O·吉塞莱弗, R·潘廷, 波 洪, 峰 王 申请人:赛门铁克公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1