在具有命名空间的文件系统中查找丢失对象的方法和装置的制作方法

文档序号:6560387阅读:151来源:国知局
专利名称:在具有命名空间的文件系统中查找丢失对象的方法和装置的制作方法
技术领域
本发明的领域是数据处理,或者更具体地说,是用于在具有命名空间的文件系统中查找丢失对象的方法、装置和产品。
背景技术
通常将1948年开发的EDVAC计算机系统作为计算机时代的开端。从那时起,计算机系统已经发展成非常复杂的设备。现今的计算机比早期的诸如EDVAC之类的系统更加完善。计算机系统通常包括硬件组件和软件组件、应用程序、操作系统、处理器、总线、存储器、输入/输出设备等的组合。由于半导体处理和计算机体系结构的进步使计算机的性能不断提高,更加完善的计算机软件已经发展为利用高性能的软件,这导致今天的计算机系统比仅仅几年以前的计算机系统强大得多。
计算机具有称为操作系统的软件基础层,所述操作系统存储和组织文件并且应用依赖其来访问计算机资源。在操作系统中,在其中命名、存储和组织诸如文件之类的对象的总体结构称为文件系统。通常在命名空间中组织文件系统,所述命名空间包括用于访问文件系统中存储的对象的路径名集合。这些路径名将对象‘映射’或‘链接’到命名空间。路径名是一系列标识文件的符号和名称。命名空间中的每个文件都具有一个名称,称为文件名,所以最简单类型的路径名就只是文件名。为了访问目录中的文件,路径名标识到文件的路径是从文件的工作目录还是从文件的根目录开始。不同的操作系统具有不同的指定路径名的规则。例如,在DOS系统中,根目录被命名为‘\’,并且每个子目录由其他反斜杠分隔。在UNIX中,根目录被命名为‘/’,每个子目录后面都带有斜杠。在Macintosh环境中,目录由冒号分隔。
创建和删除对象时,操作系统通常在文件系统中链接和取消链接对象。创建对象时,操作系统为对象分配文件系统中的物理空间并将已创建的对象链接到命名空间以供操作系统和各种软件应用使用。删除对象时,操作系统为所述对象取消分配物理空间并且因不再使用所述对象而从命名空间取消链接已删除的对象。
有时,由于系统崩溃、数据存储问题、硬件故障或软件错误,文件系统中的对象会被无意地从命名空间取消链接。这些对象保留在文件系统中,但是不再在命名空间中表示。保留在文件系统中、但是不再在命名空间中表示并且不再使用的对象被称为‘丢失的’对象。丢失的对象给用户带来了问题,因为它们不再在命名空间中,因此用户不能通过路径名访问这些对象。因此,除非被找到,否则丢失的对象会导致用户无法访问数据,即使所述数据存在于文件系统中也是如此。
传统的操作系统通常包含有限的用于恢复丢失的对象的软件工具。例如,Microsoft Windows XPTM包含‘CHKDSK’,IBM的i5/OSTM利用‘RCLSTG’,UNIXTM包含‘FSCK’。但是,这些文件系统修复工具要求文件系统工作在受限状态,该状态阻止了应用和部分操作系统使用文件系统。通常,这些修复工具在进行修复时必须使文件系统在几个小时之内都处于受限状态。此类对文件系统使用的限制实际上使计算机系统停机并因此限制了用户访问其他资源。无法访问计算机系统通常增加了业务成本并减少了业务收入。但是,客户选择不修复文件系统将冒着数据丢失或损坏的风险。
此外,某些问题在某种意义上是普遍的,因为此类问题在任何文件系统修复工具的操作间隔中持续发生。例如,CHKDSK并不持续运行。就CHKDSK在运行过程中找到丢失的文件系统对象来说,一旦结束CHKDSK的任何特定运行,文件系统对象就继续丢失并且保持丢失直到下一次运行CHKDSK为止。因此,丢失文件系统对象的问题被看作是‘普遍的’,并且传统的文件系统修复工具没有对此类问题提供全面的解决方案。

发明内容
本发明提供了用于在文件系统中查找可能例如在后台普遍并持续运行的丢失的对象的方法、装置和计算机程序产品。通常,可以在不中断文件系统正常操作的情况下(在文件系统保持完全活动时针对或在文件系统中进行操作)实现在此披露的方法、装置和产品。提供了用于在具有命名空间的文件系统中查找丢失的对象的方法、装置和计算机程序产品,包括创建所述文件系统中的所有对象的列表;标识要与所述列表进行比较的所述命名空间的一部分;将所述命名空间的所述部分与所述列表相比较;以及从所述列表删除在所述命名空间的所述部分中表示的对象的表项。某些实施例还包括判定所述命名空间的其他部分是否可用于与所述文件系统中的所有对象的列表进行比较。
根据用于在具有命名空间的文件系统中查找丢失的对象的实施例,标识要与所述列表进行比较的所述命名空间的一部分可以通过标识所述命名空间的根来实现。标识要与所述列表进行比较的所述命名空间的一部分还包括标识在所述方法的执行期间重命名的对象。
在具有命名空间的文件系统中查找丢失的对象还包括标识在所述方法的执行期间删除的对象以及从所述列表删除所述标识的删除的对象。在具有命名空间的文件系统中查找丢失的对象还可以通过在所述方法的执行期间标识在使用时取消链接的对象以及从所述列表删除所述标识的在使用时取消链接的对象来实现。
如附图中示出的,从以下对本发明的示例性实施例的更具体的描述,本发明的上述和其他目标、特征和优点将变得显而易见,其中相同的标号通常代表本发明的示例性实施例的相同部件。


图1是示出了根据本发明的实施例的其中每个计算机上都安装了能够在具有命名空间的文件系统中查找丢失的对象的丢失对象搜索模块的示例性计算机系统的网络示意图;图2是根据本发明的实施例的包括用于在具有命名空间的文件系统中查找丢失的对象的示例性计算机的自动计算机器的方块图;图3是示出了根据本发明的实施例的用于在具有命名空间的文件系统中查找丢失的对象的示例性方法的流程图;图4是示出了根据本发明的实施例的用于在文件系统中查找丢失的对象的示例性方法的流程图,其中在所述方法的执行期间重命名一个或多个对象;图5是示出了根据本发明的实施例的用于在具有命名空间的文件系统中查找丢失的对象的包括在其执行期间标识删除的对象的示例性方法的流程图;图6是示出了根据本发明的实施例的用于在具有命名空间的文件系统中查找丢失的对象的包括标识在使用中和在所有对象的列表存在时取消链接的对象的示例性方法的流程图。
具体实施例方式
参考附图(从图1开始)描述了根据本发明的实施例的用于在具有命名空间的文件系统中查找丢失的对象的示例性方法、装置和产品。图1是示出了根据本发明的实施例的用于在具有命名空间的文件系统中查找丢失的对象的示例性系统的网络示意图。图1的系统通常用于根据本发明的实施例在具有命名空间的文件系统中查找丢失的对象,这通过创建所述文件系统中的所有对象的列表以及重复执行以下步骤来完成标识要与所述列表进行比较的所述命名空间的一部分;将所述命名空间的所述部分与所述列表相比较;以及从所述列表删除在所述命名空间的所述部分中具有名称的所有表项。
图1的系统包括广域网(“WAN”)(101)和局域网(“LAN”)(103)。图1的体系结构的网络连接方面只是用于说明而非进行限制。实际上,用于在具有命名空间的文件系统中查找丢失的对象的系统可以作为局域网、广域网、企业内部网、互联网、因特网、Web、万维网本身或本领域的技术人员所了解的其他连接来连接。此类网络是可用于在总体数据处理系统中连接在一起的各种设备与计算机之间提供数据通信连接的介质。
在图1的实例中,服务器(106)实现局域网(103)与广域网(101)之间的网关、路由器或网桥。在图1的实例中,将包括PDA(112)、计算机工作站(104)、移动电话(110)和个人计算机(108)的若干示例性设备连接到广域网(101)。通过无线链接(116)将启用网络的移动电话(110)连接到广域网(101),并通过无线链接(114)将PDA(112)连接到网络(101)。在图1的实例中,通过有线线路连接(120)将个人计算机(108)连接到网络(101),并通过有线线路连接(122)将计算机工作站(104)连接到网络(101)。在图1的实例中,通过无线链接(118)将膝上型计算机(126)连接到局域网(103),并通过有线线路连接(124)将个人计算机(102)连接到局域网(103)。
在图1的系统中,每个示例性设备(108、112、104、110、126、106和102)其上都安装了具有文件系统和丢失对象搜索模块的操作系统。图1的每个示例性计算机都包括计算机处理器和连接到所述处理器以便进行数据传输的计算机存储器。图1的每个计算机的计算机存储器都在其中布置有文件系统和包括丢失对象搜索模块的计算机程序指令。所述丢失对象搜索模块通常能够在具有命名空间的文件系统中查找丢失的对象,这通过创建所述文件系统中的所有对象的列表以及重复执行以下步骤来完成标识要与所述列表进行比较的所述命名空间的一部分;将所述命名空间的所述部分与所述列表相比较;以及从所述列表删除在所述命名空间的所述部分中具有名称的所有表项。
所述丢失对象搜索模块通常还能够标识所述命名空间的根,标识在将所述命名空间的所述部分与所述列表相比较时取消链接的对象,标识在比较时重命名的对象,标识在比较时删除的对象,以及标识在比较期间在使用时取消链接的对象(“死对象”)。所述丢失对象搜索模块通常还能够从所述列表删除已删除的对象和从所述列表删除在使用时取消链接的对象(“死对象”)。
图1中所示的示例性系统包括的服务器和其他设备的布置只是用于说明而非进行限制。根据本发明的各种实施例的可用数据处理系统可以包括图1中未示出但本领域的技术人员将了解的其他服务器、路由器、其他设备和对等体系结构。此类数据处理系统中的网络可以支持许多数据通信协议,包括例如,TCP(传输控制协议)、IP(网际协议)、HTTP(超文本传输协议)、WAP(无线访问协议)、HDTP(手持设备传输协议)和本领域的技术人员将了解的其他协议。本发明的各种实施例可以在除图1中示出的硬件平台之外的各种硬件平台上实现。
通常使用计算机(即,使用自动计算机器)来实现根据本发明的在具有命名空间的文件系统中查找丢失的对象。例如,在图1的系统中,所有节点、服务器和通信设备都在某种程度上至少作为计算机来实现。因此,为了进一步说明,图2是根据本发明的实施例的包括用于在具有命名空间的文件系统中查找丢失的对象的示例性计算机(152)的自动计算机器的方块图。图2的计算机(152)包括至少一个计算机处理器(156)或‘CPU’以及通过系统总线(160)连接到处理器(156)和计算机的其他组件的随机存取存储器(168)(“RAM”)。
存储在RAM(168)中的是操作系统(154)。根据本发明的实施例,计算机中使用的操作系统包括UNIXTM、LinuxTM、Microsoft Windows NTTM、AIXTM、IBM的i5/OSTM和本领域的技术人员应了解的其他操作系统。图2的操作系统(154)包括文件系统(210)。文件系统提供了在其中命名、存储和组织文件系统对象的总体结构。文件系统可以包括文件、目录、文件夹以及查找和访问这些项所需的信息。根据本发明的实施例,计算机中使用的文件系统包括文件分配表(“FAT”)、高性能文件系统(“HPFS”)、NT文件系统(“NTFS”)、HFS Plus、Berkeley的快速文件系统(“FFS”)、Unix文件系统(UFS)、第二扩展的文件系统(“ext2”)、集成文件系统以及本领域的技术人员应了解的其他文件系统。
根据本发明的实施例,图2的操作系统(154)还包括丢失对象搜索模块(200),即用于在具有命名空间的文件系统中查找丢失的对象的计算机程序指令。在图2的实例中,在RAM(168)中示出了操作系统(154)、文件系统(210)、应用(220)和丢失对象搜索模块(200),但是此类软件的许多组件通常还存储在非易失性存储器(166)中。在图2的实例中,为了说明而非进行限制,将丢失对象搜索模块(200)示为操作系统(154)的子系统。所述丢失对象搜索模块(200)还可以被植入为操作系统(154)外部的应用(220)。
图2的计算机(152)包括通过系统总线(160)连接到处理器(156)和计算机(152)的其他组件的非易失性计算机存储器(166)。非易失性计算机存储器(166)可以被实现为硬盘驱动器(170)、光盘驱动器(172)、电可擦除可编程只读存储器空间(所谓的“EEPROM”或“闪速”存储器)(174)、RAM驱动器(未示出)或本领域的技术人员应了解的任何其他类型的计算机存储器。
图2的实例计算机包括一个或多个输入/输出接口适配器(178)。计算机中的输入/输出接口适配器通过例如软件驱动程序和计算机硬件来实现面向用户的输入/输出,以便控制到诸如计算机显示屏幕之类的显示设备(180)的输出以及来自诸如键盘和鼠标之类的输入设备(181)的用户输入。
图2的示例性计算机(152)包括用于实现与其他计算机(182)的数据通信(184)的通信适配器(167)。可以通过串行RS-232连接、外部总线(如USB)、数据通信网络(如IP网络)和本领域的技术人员应了解的其他方式来执行此类数据通信。通信适配器实现硬件级别的数据通信,通过所述适配器,一台计算机直接地或通过网络将数据通信发送到另一台计算机。根据本发明的实施例,用于确定目的地的可用性的通信适配器的实例包括用于有线拨号通信的调制解调器、用于有线网络通信的以太网(IEEE802.3)适配器和用于无线网络通信的802.11b适配器。
为了进一步说明,图3是示出了根据本发明的实施例的用于在具有命名空间(300)的文件系统(210)中查找丢失的对象的示例性方法的流程图。如上所述,实现有命名空间的示例性文件系统(210)包括FAT、NTFS、HPFS、UFS和本领域的技术人员应了解的其他文件系统。主要参考Unix文件系统来讨论根据本发明的实施例的在具有命名空间(300)的文件系统(210)中查找丢失的对象。这是为了说明而非进行限制。实际上,可以使用本领域的技术人员将了解的许多不同的具有命名空间的文件系统来实现根据本发明的实施例的在文件系统(210)中查找丢失的对象。
文件系统通常命名、存储和组织对象。典型的文件系统(如Unix文件系统)支持两种主要的文件系统对象文件和目录。在Unix文件系统中,每个对象都由称为‘i节点’的数据结构来表示。i节点存储有关对象的信息,如对象类型、所有者、组、模式、大小、链接数、最后访问时间和最后修改时间。i节点还包含用于存储对象内容的所有数据块的物理磁盘地址。在创建对象时,将唯一的i节点指派给文件系统(210)的每个对象。即,对于文件系统(210)中的每个文件,都存在一个i节点。当创建文件系统(210)时分配文件系统(210)的所有i节点,并且将唯一的‘i编号’指派给每个i节点。由于文件系统中只存在固定数量的i节点,可以在文件系统(210)中创建的对象的数量是固定的。如果很小的对象用尽了所有i节点,则可能具有大量空闲的数据块,这些数据块只是因不能创建更多的对象而无法使用。但是,更常见的是在用完i节点之前用完数据块。
图3的命名空间(300)代表用于访问存储在文件系统(210)中的对象的路径名的集合。不同的文件系统可以以不同的方式来表示命名空间(300)。例如,在FAT文件系统中,文件系统通过代表目录的存储为特殊类型文件的目录表来创建命名空间(300)。表中的32字节的表项标识了存储在目录表中的每个文件或目录。每个表项记录了文件或目录数据的名称、扩展名、属性、创建的日期和时间、第一簇的地址以及文件或目录的大小。
在Unix文件系统中,目录通过提供对象名称与对象本身之间的映射来创建命名空间(300)。通过将文件系统(210)中的对象映射到命名空间(300),目录作为整体在文件系统(210)上建立结构。目录可以包含若干文件和其他目录。操作系统为每个文件系统(210)维护一个称为“根”目录的特殊目录。此目录用作文件系统(210)层次结构的根。文件系统(210)中的每个其他文件或目录都从属于所述根目录。通过指定开始于根的目录链中的路径,可以通过命名空间(300)查找文件系统(210)中的任何文件。由于文件位于相对于根目录的命名空间(300)中,所以在丢失根目录时存在特殊的情况。当根目录丢失时,文件系统(210)中的所有文件都会因不存在命名空间(300)而丢失。
图3的实例包括创建(302)文件系统(210)中的所有对象的列表(304)。在Unix文件系统中,可以通过扫描文件系统的i节点并标识分配给i节点的所有对象来完成根据图3的方法的创建(302)文件系统(210)中的所有对象的列表(304)。可以通过执行与模式域的值的按位‘与’来执行判定i节点是否被指派给文件系统(210)中的对象,并且预定的常数设计为产生对该i节点表示的对象的类型的指示。例如,预定的常数‘S_IFMT’被设计为在执行与代表文件的i节点的模式域的按位‘与’时产生对文件的指示‘S_IFREG’。包括预定的常数‘S_IFMT’只是为了举例而非进行限制。实际上,如本领域的技术人员将理解的,可以使用其他常数来执行与模式域的按位‘与’以确定i节点所代表的对象的类型。
如上所述,每个i节点都指派有唯一的i编号。因此,创建(302)文件系统(210)中的所有对象的列表(304)可以包括在列表中插入指派给表示文件系统中的对象的每个i节点的i编号。可替代地,创建(302)文件系统(210)中的所有对象的列表(304)还可以通过将指向指派给文件系统(210)中的对象的每个i节点的指针存储在列表(304)中来实现。此类已存储指针的列表(304)在数据中可以表示为数组、链接的列表、表或本领域的技术人员应了解的其他数据表示。
图3的实例仅示出了一个文件系统(210)。这是出于说明而非进行限制。实际上,可以在包含多个文件系统的环境中实现根据本发明的许多找到的丢失对象。在这种情况下,创建(302)所有文件系统中的所有对象的列表(304)也可以包括为特定文件系统存储与i编号关联的文件系统ID(未示出)或存储指向i节点的指针。在每个文件系统上存储与i编号关联的文件系统ID或存储指向i节点的指针可以是有用的,因为i编号和i节点可能仅对一个文件系统是唯一的。
在图3的方法中,根据本发明的实施例在具有命名空间(300)的文件系统(210)中查找丢失的对象还包括标识(306)要与文件系统(210)中的所有对象的列表(304)相比较的命名空间(300)的一部分(308)。标识(306)要与文件系统(210)中的所有对象的列表(304)相比较的命名空间(300)的一部分(308)可以包括标识命名空间(300)的所有路径名。标识要与列表(304)相比较的命名空间(300)的所有路径名包括标识(307)命名空间的根以及标识来自文件系统的分层命名空间中的根的每个路径名。根据图3的方法,不能通过命名空间访问但仍存储在文件系统中的对象是要查找的丢失的对象。
图3的方法通过将命名空间(300)的一部分(308)与列表(304)相比较(310)来继续,以便判定命名空间(300)是否包括列表(304)中的某些文件系统对象以及判定命名空间(300)是否未包括列表(304)中的某些文件系统对象。包括在命名空间(300)中的文件系统(210)中的对象并未丢失,因此在根据图3的方法在文件系统(210)中查找丢失的对象时可以被忽略。
如上所述,每个i节点都指派有唯一的i编号。同样如上所述,创建命名空间包括将对象的路径名与i编号相关联。对象的i编号在命名空间中的表示与作为i节点的表示都是相同的。因此,通过将与文件系统(210)上所有对象的列表(304)中的i节点关联的i编号和与命名空间的所述部分(308)的对象路径名关联的i编号相比较,可以执行将命名空间(300)的一部分(308)与列表(304)相比较(310)以便判定命名空间(300)是否包括列表(304)中的某些文件系统对象以及判定命名空间(300)是否未包括列表(304)中的某些文件系统对象的一种方法。
由于许多文件系统中的路径名可能包括诸如‘.’或‘..’之类的特殊字符,所以此类文件系统提供了几乎无限多的方法来指定命名空间(300)中的单个点。例如,可以将命名空间(300)中由‘/RootDir/SubDir/Object’表示的点指定为‘/RootDir/SubDir/../SubDir/Object’、‘/RootDir/SubDir/../SubDir/../SubDir/Object’、‘/RootDir/SubDir/../SubDir/../SubDir/../SubDir/Object’等。为了避免根据图3的方法将来自命名空间(300)的所述部分(308)的相同点与列表(304)重复地比较,表示命名空间(300)的路径名不包括诸如‘.’、‘..’或符号链接之类的特殊路径名构造。
图3的方法还包括从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项。可以通过移除列表(304)中与文件系统的命名空间的所述部分(308)中的那些表项匹配的表项来执行从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项。
图3的方法还包括判定(314)命名空间的其他部分是否可用于与文件系统中的所有对象的列表进行比较。因此,在图3的过程开始后创建、删除、重命名或取消链接的对象可以改变命名空间,因为路径名可以增大或减少先前与文件系统中的所有对象的列表(304)相比较的已标识的命名空间部分(308)。如果命名空间的其他部分可用于与文件系统(210)中的所有对象的列表(304)相比较,则图3的方法包括标识(306)要与文件系统中的所有对象的列表(304)相比较的命名空间部分。因此,图3的方法重复执行以下步骤标识(306)要与列表(304)相比较的命名空间(300)的一部分(308);将命名空间(300)的所述部分(308)与列表(304)相比较(310);从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项;以及判定(314)命名空间的其他部分(308)是否可用于与文件系统中的所有对象的列表(304)相比较,直到已从文件系统中的所有对象的列表(304)删除命名空间中的所有对象为止。
如果要比较的其他命名空间部分不存在,则图3的方法包括将列表(304)中的所有剩余对象标识(316)为丢失。丢失的对象具有i节点,但是丢失的对象不能通过命名空间(300)而在文件系统(210)中可见。一旦图3的方法将对象标识(316)为丢失,就可以通过在‘/lost+found/’目录中为丢失的对象创建表项来将该对象映射回命名空间(300)。在‘/lost+found/’目录结构中创建表项会将丢失的对象的i节点的i编号与丢失的对象的路径名相关联。可以使用本领域的技术人员将了解的任何路径名。在‘/lost+found/’目录中创建表项提供了通过命名空间(300)在文件系统(210)中的对象可见性。
如上所述,当根目录丢失时,文件系统(210)中的所有对象都会因不存在命名空间(300)而丢失。为了创建命名空间(300)并将文件系统(210)的对象映射回命名空间(300),操作系统的内核必须安装根目录。安装根目录可以通过读取文件系统的超级块来实现。超级块包含与诸如文件系统(210)的数据结构的大小和位置之类的文件系统格式有关的信息。超级块使得内核能够定位表示文件系统的根目录的i节点(通常是第二个i节点)。一旦内核定位了表示根目录的i节点,内核就将名称‘/’映射到根目录i节点。将‘/’映射到根目录i节点创建了命名空间(300)。在文件系统(210)移植到第二个文件系统中的情况下,还可以通过在第二个文件系统的目录结构中创建表项(其将文件系统(210)的根目录i节点映射到第二个文件系统的命名空间)来完成安装根目录。一旦安装了文件系统(210)的根目录,就如上所述的文件系统(210)中的对象未丢失的情况而言,文件系统(210)中的对象将变得可见。
如上所述,已标识的命名空间部分(308)中的对象经常在执行用于查找丢失的对象的方法的步骤时变成取消链接。例如,在重命名或删除对象时,对象将变成取消链接。在使用中或打开时删除的对象将被取消链接但是它们仍在使用中。这些已取消链接但仍在使用中的对象称为‘死对象’。为了进一步说明,图4是示出了根据本发明的实施例的用于在文件系统(210)中查找丢失的对象的示例性方法的流程图,其中在所述方法的执行期间重命名一个或多个对象。
图4的方法包括创建(302)文件系统(210)中的所有对象的列表(304)。如以上参考图3所述的,通过扫描文件系统的i节点并标识所有指派给i节点的对象以及在所述列表中插入指派给每个已标识的i节点(表示文件系统中的对象)的i编号,可以完成根据图3的方法的创建(302)文件系统(210)中的所有对象的列表(304)。可替代地,可以通过将指向指派给文件系统(210)的对象的每个i节点的指针存储在列表(304)中来完成创建(302)文件系统(210)中的所有对象的列表(304)。
图4的方法还包括标识(306)要与列表(304)相比较的命名空间(300)的一部分(308)。如上所述,标识(306)要与列表(304)相比较的命名空间(300)的一部分(308)可以包括标识要与文件系统中的所有对象的列表(304)相比较的命名空间(300)的路径名。根据图4的方法,无法通过命名空间访问但仍存储在文件系统中的对象是要查找的丢失的对象。
在图4的实例中,标识(306)要与列表(304)相比较的命名空间(300)的一部分(308)包括标识(404)在方法的执行期间重命名(410)的对象,例如在标识(306)命名空间的一部分或将命名空间(300)的一部分(308)与列表(304)相比较(310)时重命名的对象。重命名对象(410)更改了借助其通过命名空间(300)来访问对象(410)的路径名。在重命名对象(410)时,操作系统在目录结构中移除将对象的当前路径名映射到与对象的i节点对应的i编号的表项。然后操作系统在目录结构中创建将新的路径名映射到对象(410)的i编号的新的表项。因此,重命名对象(410)将对象从命名空间(300)中的一个位置重新映射到命名空间(300)中的其他位置,但是不改变基础对象(410)。如果在从列表(304)移除未丢失的对象之前将该对象重命名到已与列表相比较的命名空间的一部分,则存在即使对象未丢失也不会从列表(304)移除所述对象的可能性。例如,如果已标识的命名空间部分(308)是‘/users/’并且已与列表(304)相比较的命名空间(300)的唯一区域是‘/users/log/’,则将文件从‘/users/data/file.dat’重命名为‘/users/log/file.dat’会导致对象被重命名到已与列表相比较的命名空间部分,即对象名为‘/users/log/file.dat’。此类已重命名的对象(410)并未丢失并且必须如下面讨论的被从列表(304)移除。在图4的方法的另一次重复中通过标识(404)与列表相比较的重命名的对象来标识新路径名有利地提供了用于移除实际上未丢失的所述重命名的对象的工具。
在图4的方法中,标识(404)在方法的执行期间重命名(410)的对象可以通过在图4的方法的每次重复之前创建已标识的命名空间部分(308)的副本来完成。已标识的命名空间部分(308)的副本可以在数据中表示为表,其包括该已标识的命名空间部分(308)中的每个对象的路径名和i编号。在图4中,标识(404)在方法的执行期间重命名(410)的对象还可以包括将已标识的命名空间部分(308)的副本与包括该重命名的对象的当前标识的命名空间部分相比较。任何i编号的路径名更改都表明已重命名对象。
如以上参考图3更详细地描述的,图4的实例还包括将命名空间(300)的一部分(308)与列表(304)相比较(310)以及从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项。如图3的方法,图4的方法重复执行以下步骤标识(306)要与列表(304)相比较的命名空间(300)的一部分(308);将命名空间(300)的所述部分(308)与列表(304)相比较(310);从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项;以及判定(314)是否存在其他要比较的命名空间(308)。
如果要比较的其他命名空间部分(308)不存在,则图4的方法继之以将列表(304)中的所有剩余对象标识(316)为丢失。如上所述,丢失的对象具有i节点,但是丢失的对象不能通过命名空间(300)在文件系统(210)中可见。一旦图4的方法将对象标识(316)为丢失,就可以将该对象映射回命名空间(300)。
如上所述,已标识的命名空间部分(308)中的对象经常在所述方法的执行期间变成取消链接。在执行用于查找丢失的对象的方法期间删除对象可能会使此类对象变成取消链接。为了进一步说明,图5是示出了根据本发明的实施例的用于在具有命名空间(300)的文件系统(210)中查找丢失的对象的包括在其执行期间标识删除的对象的示例性方法的流程图。图5的方法包括创建(302)文件系统(210)中的所有对象的列表(304)。如以上参考图3描述的,通过扫描文件系统的i节点并标识所有指派给i节点的对象以及在所述列表中插入指派给每个已标识的i节点(表示文件系统中的对象)的i编号,可以完成根据图3的方法的创建(302)文件系统(210)中的所有对象的列表(304)。可替代地,可以通过将指向指派给文件系统(210)的对象的每个i节点的指针存储在列表(304)中来完成创建(302)文件系统(210)中的所有对象的列表(304)。
如以上参考图3更详细地讨论的,图5的方法包括标识(306)要与列表(304)相比较的命名空间(300)的一部分(308)、将命名空间(300)的所述部分(308)与列表(304)相比较(310),以及从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项。如图3的方法,图5的方法重复执行以下步骤标识(306)要与列表(304)相比较的命名空间(300)的一部分(308);将命名空间(300)的所述部分(308)与列表(304)相比较(310);从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项;以及判定(314)是否存在其他要比较的命名空间。
在所述方法的执行期间删除的对象未保留在可见的命名空间中,因此,不能通过重复标识要与列表相比较的命名空间的一部分来对其进行标识。但是,此类已删除的对象没有丢失,因为它们不再是文件系统中的对象。因此,图5的方法包括标识(406)在所述方法的执行期间删除的对象(412)以及从列表(304)删除(416)已标识的删除的对象(412)。删除对象(412)将从命名空间(300)移除对象并释放由文件系统(210)分配给该对象的物理存储。例如,在Unix文件系统中,删除对象(412)会从目录结构移除路径名和i编号并递减对象的i节点的‘链接’域。i节点的‘链接’域指示对象使用不同的路径名出现在目录结构中的次数。就是说,‘链接’域指示命名空间(300)与文件系统(210)的对象之间存在多少映射。一旦i节点的‘链接’域递减至零,对象便不再存在于命名空间(300)中并且操作系统通过将i节点的‘模式’域设置为零来释放分配给对象(412)的物理存储。已删除的对象(412)并未丢失并且必须如下所述将其从列表(304)移除。
通过借助图5的方法的每次重复来创建已标识的命名空间部分(308)的副本,以及将重复之前的已标识的命名空间部分的副本与重复之后的已标识的命名空间部分的副本相比较,以便标识在重复之前在已标识的命名空间部分的副本中出现的i编号和在重复之后在已标识的命名空间部分的副本中没有找到的i编号,可以完成在所述方法的执行期间标识(406)删除的对象(412)。
通过从列表(304)移除i编号或指向与已标识的删除的对象(412)关联的i节点的指针,可以完成在图5的用于查找丢失的对象的方法中从列表(304)删除(416)已标识的删除的对象(412)。
图5的方法包括将列表(304)中的所有剩余对象标识(316)为丢失。如上所述,丢失的对象具有i节点,但是丢失的对象不能通过命名空间(300)在文件系统(210)中可见。一旦图5的方法将对象标识(316)为丢失,就可以将该对象映射回命名空间(300)。
如上所述,已标识的命名空间部分(308)中的对象经常在所述方法的执行期间变成取消链接。在对象处于使用中时以及在执行用于查找丢失的对象的方法期间删除对象可能会使此类对象变成取消链接。此类对象称为‘死对象’。为了进一步说明,图6是示出了根据本发明的实施例的用于在具有命名空间(300)的文件系统(210)中查找丢失的对象的包括标识在使用中和在所有对象的列表(304)存在时取消链接的对象的示例性方法的流程图。
图6的方法包括创建(302)文件系统(210)中的所有对象的列表(304)。如以上参考图3描述的,通过扫描文件系统的i节点并标识所有指派给i节点的对象以及在所述列表中插入指派给每个已标识的i节点(表示文件系统中的对象)的i编号,可以完成根据图3的方法的创建(302)文件系统(210)中的所有对象的列表(304)。可替代地,可以通过将指向指派给文件系统(210)的对象的每个i节点的指针存储在列表(304)中来完成创建(302)文件系统(210)中的所有对象的列表(304)。
如以上参考图3更详细地讨论的,图6的方法包括标识(306)要与列表(304)相比较的命名空间(300)的一部分(308)、将命名空间(300)的所述部分(308)与列表(304)相比较(310),以及从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项。如图3的方法,图6的方法重复执行以下步骤标识(306)要与列表(304)相比较的命名空间(300)的一部分(308);将命名空间(300)的所述部分(308)与列表(304)相比较(310);从列表(304)删除(312)在命名空间(300)的所述部分(308)中具有名称的所有表项;以及判定(314)是否存在其他要比较的命名空间。
在所述方法的执行期间在使用时取消链接的对象未保留在可见的命名空间中,因此,不能通过重复标识要与列表相比较的命名空间的一部分来对其进行标识。但是,此类死对象并未丢失,因为操作系统会在对象关闭之后将其删除,从而它们不再是文件系统中的对象。因此,图6的方法包括标识(408)在所述方法的执行期间在使用时取消链接的对象(414)以及从列表(304)删除(418)在使用时取消链接的已标识的对象(414)。当应用或操作系统将其仍在使用中的对象从命名空间(300)删除时会出现在使用时取消链接的对象(414)。尽管此类死对象(414)不能通过文件系统(210)的命名空间(300)而可见,但是应用或操作系统仍可访问这些死对象(414)。当应用或操作系统关闭死对象(414)时,操作系统会删除死对象(414)。在Unix文件系统中,将在目录结构中具有一个路径名的i节点的‘链接’域设置为‘1’。当应用或操作系统打开对象进行使用时,递增对象的i节点的‘使用计数’域并将指向对象的i节点的指针置于UFS打开文件表中。在目录结构中具有一个表项并且由一个应用打开的对象在‘链接’域和‘使用计数’域中都将具有值‘1’。如果另一个应用将对象的路径名从目录结构删除,从而将对象从命名空间(300)删除,则‘链接’域递减为‘0’,而所述对象仍由第一个应用使用并且‘使用计数’等于1。对象不再能够通过命名空间(300)进行访问。所述对象现在是死对象(414),因为在从UFS打开文件表移除死对象(414)从而使对象的‘使用计数’域递减至0时,操作系统将删除死对象(414)。死对象(414)并未丢失并且必须如以下讨论的将其从列表(304)移除。
根据图6的方法的标识(408)在方法执行期间取消链接的对象可以通过以下步骤来完成扫描打开文件列表并且如果链接域的值等于对象在打开文件列表中出现的频率,则将对象标识为死对象。
根据图6的用于查找丢失的对象的方法的从列表(304)删除(418)在方法执行期间在使用时取消链接的已标识的对象(414)可以通过以下步骤来完成从列表(304)移除i编号或指向与在使用时取消链接的已标识的对象(414)关联的i节点的指针。
图6的方法包括将列表(304)中的所有剩余对象标识(316)为丢失。如上所述,丢失的对象具有i节点,但是丢失的对象不能通过命名空间(300)在文件系统(210)中可见。一旦图6的方法将对象标识(316)为丢失,就可以将该对象映射回命名空间(300)。
很大程度上在用于在具有命名空间的文件系统中查找丢失对象的完整功能计算机系统的上下文中描述了本发明的示例性实施例。但是,本领域的技术人员将认识到,本发明还可以包含在布置在用于与任何适合的数据处理系统一起使用的信号承载介质上的计算机程序产品中。此类信号承载介质可以是用于机器可读信息的传输介质或可记录介质,包括磁介质、光介质或其他适合的介质。可记录介质的实例包括硬盘驱动器中的磁盘或软盘、用于光学驱动器的光盘、磁带以及本领域的技术人员应了解的其他介质。传输介质的实例包括用于语音通信的电话网络、诸如以太网TM之类的数字数据通信网络、使用网际协议通信的网络以及万维网。本领域的技术人员将立即认识到,任何具有适合的编程装置的计算机系统都将能够执行包含在程序产品中的本发明的方法的步骤。本领域的技术人员将立即认识到,虽然在本说明书中描述的某些示例性实施例面向在计算机硬件上安装和执行的软件,但是作为固件或硬件实现的替代实施例也在本发明的范围之内。
从以上描述可以理解,可以在本发明的各个实施例中做出修改和更改而不偏离本发明的真正精神。本说明书中的描述只是出于示例目的并且不应被理解为进行限制。本发明的范围仅由以下权利要求的语言来限制。
权利要求
1.一种用于在文件系统中查找丢失的对象的方法,所述文件系统具有命名空间,所述方法包括创建所述文件系统中的所有对象的列表;标识要与所述列表相比较的所述命名空间的一部分;将所述命名空间的所述部分与所述列表相比较;以及从所述列表删除在所述命名空间的所述部分中表示的对象的表项。
2.根据权利要求1所述的方法,还包括判定所述命名空间的其他部分是否可用于与所述文件系统中的所有对象的所述列表相比较。
3.根据权利要求1所述的方法,其中标识要与所述列表相比较的所述命名空间的一部分还包括标识所述命名空间的根。
4.根据权利要求1所述的方法,其中标识要与所述列表相比较的所述命名空间的一部分还包括标识在所述方法的执行期间重命名的对象。
5.根据权利要求1所述的方法,还包括标识在所述方法的执行期间删除的对象以及从所述列表删除所述标识的删除的对象。
6.根据权利要求1所述的方法,还包括标识在所述方法的执行期间在使用时取消链接的对象以及从所述列表删除所述标识的在使用时取消链接的对象。
7.一种用于在文件系统中查找丢失的对象的装置,所述文件系统具有命名空间,所述装置包括计算机处理器;可操作地连接到所述计算机处理器的计算机存储器,所述计算机存储器其中布置有计算机程序指令,所述计算机程序指令能够执行以下步骤创建所述文件系统中的所有对象的列表;标识要与所述列表相比较的所述命名空间的一部分;将所述命名空间的所述部分与所述列表相比较;以及从所述列表删除在所述命名空间的所述部分中表示的对象的表项。
8.根据权利要求7所述的装置,其中所述计算机存储器其中还布置有能够判定所述命名空间的其他部分是否可用于与所述文件系统中的所有对象的所述列表相比较的计算机程序指令。
9.根据权利要求7所述的装置,其中能够标识要与所述列表相比较的所述命名空间的一部分的计算机程序指令还包括能够标识所述命名空间的根的计算机程序指令。
10.根据权利要求7所述的装置,其中能够标识要与所述列表相比较的所述命名空间的一部分的计算机程序指令还包括能够标识在所述计算机程序指令的执行期间重命名的对象的计算机程序指令。
11.根据权利要求7所述的装置,其中所述计算机存储器其中还布置有能够标识在所述计算机程序指令的执行期间删除的对象的计算机程序指令以及能够从所述列表删除所述标识的删除的对象的计算机程序指令。
12.根据权利要求7所述的装置,其中所述计算机存储器其中还布置有能够标识在所述计算机程序指令的执行期间在使用时取消链接的对象的计算机程序指令以及能够从所述列表删除所述标识的在使用时取消链接的对象的计算机程序指令。
13.一种用于在文件系统中查找丢失的对象的计算机程序产品,所述文件系统具有命名空间,所述计算机程序产品布置在信号承载介质上,所述计算机程序产品包括用于执行权利要求1至6中的任一权利要求的方法的步骤的计算机程序指令。
全文摘要
本发明提供了用于在具有命名空间的文件系统中查找丢失的对象的方法、装置和计算机程序产品,包括创建所述文件系统中的所有对象的列表;标识要与所述列表相比较的所述命名空间的一部分;将所述命名空间的所述部分与所述列表相比较;以及从所述列表删除在所述命名空间的所述部分中表示的对象的表项。某些实施例还包括判定所述命名空间的其他部分是否可用于与所述文件系统中的所有对象的列表相比较。根据用于在具有命名空间的文件系统中查找丢失的对象的实施例,标识要与所述列表相比较的所述命名空间的一部分可以通过标识在所述方法的执行期间重命名的对象来完成。
文档编号G06F17/30GK1920826SQ20061010785
公开日2007年2月28日 申请日期2006年7月26日 优先权日2005年7月28日
发明者R·M·泰斯 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1