CN117093559A - 用于快速分布式文件系统的方法、装置和系统 - Google Patents

用于快速分布式文件系统的方法、装置和系统 Download PDF

Info

Publication number
CN117093559A
CN117093559A CN202211643075.2A CN202211643075A CN117093559A CN 117093559 A CN117093559 A CN 117093559A CN 202211643075 A CN202211643075 A CN 202211643075A CN 117093559 A CN117093559 A CN 117093559A
Authority
CN
China
Prior art keywords
pdt
directory
node
file
tree
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211643075.2A
Other languages
English (en)
Inventor
詹姆斯·南布里坎达蒂尔·约瑟夫
杨幸坤
石居拉詹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN117093559A publication Critical patent/CN117093559A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种用于快速分布式文件系统的方法、装置和系统,以改进分布式文件系统目录扫描操作。本发明的重点是将目录树划分为多个部分目录树,以加快目录扫描操作。这是通过引入一种称为部分目录树(partial directory tree,PDT)的新数据结构来实现的,所述PDT是文件系统的目录树中的子树的子集,其中,所述子集中的目录属于单个节点。值得注意的是,目录中的所有文件在物理上可能不驻留在同一节点中,但是,属于PDT中的目录的所有文件都视为PDT的一部分。因此,包括数十亿个文件的文件系统可以包括数百万个PDT,其中,每个PDT会分配有称为PDT ID的用于识别的唯一编号。

Description

用于快速分布式文件系统的方法、装置和系统
技术领域
本文中描述的主题大体上涉及文件系统中的数据存储,更具体地涉及一种用于快速分布式文件系统的方法、装置和系统。
背景技术
数据是现代个人和组织的核心资产。组织以非结构化格式存储数据。这些非结构化数据通常组织在文件系统的文件和目录中,如图1所示。这种数据通常存储在网络附属存储(Network Attached Storage,NAS)设备中。NAS设备使得用户可以在这些设备上创建文件系统且通过网络文件系统(Network Filesystem,NFS)或服务器消息块(Server MessageBlock,SMB)等协议访问这些设备。典型的Windows或Unix操作系统可以装载由NAS设备导出的文件系统,并且通过本地系统的目录层次结构内的路径开放文件系统。例如,Windows计算机可以将由NAS设备导出的文件系统装载在本地网络上,显示为E:drive。用户和应用程序可以使用该存储空间将他们的数据存储在文件和目录中。从概念上讲,文件系统层次结构由文件和目录组成。文件具有数据和属性。目录是文件和目录的集合。文件或目录始终属于父目录。有一个特殊的目录,称为根目录,其本身就是父目录。文件系统层次结构是树数据结构,其叶节点是文件,非叶节点是目录。目录树是这种层次结构中的特定目录之下的所有文件和目录的集合。
分布式文件系统:分布式文件系统是在一群节点中实现文件系统的系统。分布式文件系统中的节点是具有自己的CPU和内存并连接到存储器的计算机系统。存储器可以共享,也可以不共享。在分布式文件系统中,数据和元数据都分布在多个节点中。文件或目录被分配给节点,文件和目录操作的处理(例如但不限于创建文件、读取文件、写入文件等)通过与该节点协调执行。文件或目录分配到的节点称为文件的所有者节点。所有者节点通常根据文件或目录数据所在的位置分配。这种基于位置分配文件或目录所有权是不必要的,因为在一些系统中,数据可能会条带化分布在属于多个节点的存储器上。关键点是,文件和目录与节点之间存在所有权分配,而且操作是通过与文件或目录的所有者节点协调完成的。
文件系统和目录扫描或遍历:许多工作流(例如但不限于备份和复制)需要浏览特定文件系统或目录树之下的整个文件和目录列表。浏览目录树之下的文件和目录列表的过程称为目录树扫描。如果对文件系统的根进行扫描,则该过程称为文件系统扫描,如果对文件系统中的子目录进行扫描,则该过程称为常规目录树扫描。也可以从连接到分布式文件系统的客户端完成该操作,但是,本文档参考在分布式文件系统软件内部进行的目录树扫描。目录树扫描通常使用遍历算法进行,该算法利用广度优先(breadth-first)或深度优先(depth-first)策略。在大型分布式文件系统中,文件系统是分布在多个节点中的树,使用遍历算法进行目录树扫描是一项成本高的操作。
在分布式文件系统上进行目录树扫描的最新技术称为并行分布式遍历。在这种技术中,每个节点都运行目录处理线程,目录处理线程负责处理分配给每个节点的目录。每个节点都有一个目录队列和一个与之相关联的文件队列。目录处理线程从目录队列中提取目录,并且通过迭代目录列出目录中的文件和目录。目录处理线程发现每个子目录在迭代的目录之下,目录处理线程使每个子目录入队到每个节点的目录队列中。这种入队基于目录的位置,将目录入队到拥有该目录的节点中。使文件入队到文件队列中进行进一步处理,这些文件队列可以来自同一节点,也可以在基于文件的所有者节点的其它节点中。为了启动这一过程,将根目录或待扫描的目录插入到拥有该目录的节点的一个队列中。为了使文件和目录入队到节点的其它队列中,分布式遍历算法使用消息传递。该算法还能够与任一级别目录一起工作。
与传统的并行分布式遍历相关的缺点之一是一些节点的处理能力利用不足。由于遍历只有在处理高级别目录之后才能识别低级别目录,因此可能无法识别一些目录,而且一些节点没有分配到任何工作。此外,文件队列的长度还限制了节点可以处理的目录数量,还会导致许多节点没有分配到足够的工作,即使节点中存在需要处理的目录。而且,当处理父目录的节点卡在处理大文件时,拥有子目录的节点必须等待,直到目录入队到其队列中。
因此,需要实现文件系统元数据,以便相对于传统的并行分布式遍历改进目录扫描操作。还需要将目录树划划分为多个部分目录树,以加快目录遍历或扫描操作。
上述改进目录扫描操作和将目录树划分为多个部分目录树的需要仅仅是为了概述传统系统/机制/技术的一些缺点,而不是为了详尽无遗。传统系统/机制/技术的其它问题/缺点以及本文中描述的各种非限制性实施例的相应益处在参考以下描述时会更加显而易见。
发明内容
本发明内容主要介绍与用于快速分布式文件系统的方法、装置和系统相关的概念,下面在具体实施方式中进一步描述。本发明内容并非旨在识别所要求保护的主题的关键特征,也不旨在用于确定或限制请求保护的主题的范围。
本发明的一个目的是提供一种元数据,以改进分布式文件系统目录扫描操作。
本发明的另一个目的是将目录树划分为多个部分目录树,以加快目录扫描操作。
本发明的又一个目的是提供一组新元数据,以改进分布式文件系统目录扫描操作。
本发明的又一个目的是提供一种能够快速扫描目录树的分布式文件系统。
具体地,本发明公开了一种用于快速分布式文件系统的方法、装置和系统,通过将目录树划分为多个部分目录树,以改善与现有技术相关的缺点。
根据本发明第一方面,提供了一种对目录树进行部分目录树(Partial DirectoryTree,PDT)扫描的方法。所述方法包括以下步骤:扫描节点获取待扫描目录的PDT ID;所述扫描节点从PDT树中检索PDT;所述扫描节点通过对所述PDT树执行遍历,获取PDT扫描列表;所述扫描节点从所述PDT扫描列表中获取下一个PDT;所述扫描节点确定所述下一个PDT是否是有效PDT;当所述下一个PDT是有效PDT时,所述扫描节点对所述PDT扫描列表中的所有PDT调度单次PDT扫描。
根据所述第一方面,在所述方法的第一种可能的实现方式中,在确定所述下一个PDT是否是有效PDT之前,所述方法还包括以下步骤:确定所述PDT扫描列表中的后续PDT的可用性;确定所述下一个PDT是否是PDT根;当所述下一个PDT是PDT根,通过使所述PDT根入队到PDT队列中,对所述PDT根调度单次PDT扫描;当所述下一个PDT不是PDT根时,通过使所述目录入队到目录队列中,对所述目录调度遍历。
根据所述第一方面,在所述方法的第二种可能的实现方式中,在确定所述下一个PDT是否是有效PDT之后,所述方法还包括以下步骤:当所述下一个PDT不是有效PDT时,获取所述PDT的基目录;通过使所述基目录入队到目录队列中,对所述基目录调度遍历。
根据所述第一方面,在所述方法的第三种可能的实现方式中,所述对所述PDT扫描列表中的所有PDT调度单次PDT扫描还包括步骤:获取所述待扫描的PDT;获取与所述扫描的PDT相关联的PDT索引节点列表;处理所述PDT索引节点列表中的下一个索引节点;确定所述PDT索引节点列表中的后续信息节点的可用性。
根据所述第一方面,在所述方法的第四种可能的实现方式中,所述方法还包括步骤:确定所述索引节点是文件还是目录;当所述索引节点是目录时,将所述目录添加到文件队列中进行处理;当所述索引节点是文件时,将所述文件添加到文件队列中进行处理。
根据本发明的第二方面,提供了一种对目录树进行部分目录树(PDT)扫描的扫描节点。所述节点包括:扫描主模块,用于:获取待扫描目录的PDT ID;从PDT树中检索PDT;通过对所述PDT树执行遍历,获取PDT扫描列表;从所述PDT扫描列表中获取下一个PDT;确定所述下一个PDT是否是有效PDT;当所述下一个PDT是有效PDT时,对所述PDT扫描列表中的所有PDT调度单次PDT扫描;PDT树模块,用于维护所述PDT树。
根据所述第二方面,在所述系统的第一种可能的实现方式中,所述扫描主模块还用于:确定所述PDT扫描列表中的后续PDT的可用性;确定所述下一个PDT是否是PDT根;当所述下一个PDT是PDT根时,通过使所述PDT根入队到PDT队列中,对所述PDT根调度单次PDT扫描;当所述下一个PDT不是PDT根时,通过使所述目录入队到目录队列中,对所述目录调度遍历。
根据所述第二方面,在所述系统的第二种可能的实现方式中,所述扫描主模块还用于:当所述下一个PDT不是有效PDT时,获取所述PDT的基目录;通过使所述基目录入队到目录队列中,对所述基目录调度遍历。
根据所述第二方面,在所述系统的第三种可能的实现方式中,所述节点还包括PDT扫描器模块,用于:获取所述待扫描的PDT;获取与所述扫描的PDT相关联的PDT索引节点列表;处理所述PDT索引节点列表中的下一个索引节点;确定所述PDT索引节点列表中的后续索引节点的可用性。
根据所述第二方面,在所述系统的第四种可能的实现方式中,所述PDT扫描仪模块还用于:确定所述索引节点是文件还是目录;当所述索引节点是目录时,将所述目录添加到文件队列中进行处理;当所述索引节点是文件时,将所述文件添加到文件队列中进行处理。
根据本发明的第三方面,提供了一种用于快速分布式文件系统的计算机可读存储介质。所述计算机可读存储介质存储计算机程序,当所述计算机程序在处理器上运行时,所述处理器执行本发明第一方面所述的方法。
通过以下结合附图的具体实施方式,本发明的其它方面、优点和显著特征对本领域技术人员将是显示易见的,具体实施方式公开了本发明的示例性实施例。
附图说明
具体实施方式是参考附图进行描述的。在附图中,附图标记的一个或多个数字标识了该附图标记首次出现的附图。所有附图使用相同的数字来指代相似特征和组件。
图1示出了文件和目录在分布式文件系统的集群中的多个节点之间分布,作为与本发明相关的现有技术中的一种实现方式。
图2是包括多个节点的分布式文件系统的分布式遍历扫描子系统中的关键组件的框图,作为与本发明相关的现有技术中的一种实现方式。
图3示出了本发明一种实现方式提供的部分目录树(Partial Directory Tree,PDT)的概念以及文件系统如何划分为多个部分目录树。
图4示出了本发明一种实现方式提供的相对于部分目录树(Partial DirectoryTree,PDT)的PDT树的概念。
图5示出了本发明一种实现方式提供的与文件系统相关联的PDT数据结构。
图6示出了本发明一种实现方式提供的分配新PDT数据结构涉及的步骤的流程图。
图7示出了本发明一种实现方式提供的在创建新文件的过程中维护PDT元数据涉及的步骤的流程图。
图8示出了本发明一种实现方式提供的在创建新目录的过程中维护PDT元数据涉及的步骤的流程图。
图9示出了本发明一种实现方式提供的在删除新文件和目录的过程中维护PDT元数据涉及的步骤的流程图。
图10示出了本发明一种实现方式提供的文件在同一PDT内移动的场景。
图11示出了本发明一种实现方式提供的文件在多个PDT之间移动的场景。
图12示出了本发明一种实现方式提供的目录在同一节点中的多个PDT之间移动的场景。
图13示出了本发明一种实现方式提供的在目录在同一节点内移动的过程中维护PDT元数据涉及的步骤的流程图。
图14示出了本发明一种实现方式提供的目录在不同节点中的PDT之间移动的场景。
图15示出了本发明一种实现方式提供的在目录在多个节点之间移动的过程维护PDT元数据涉及的步骤的流程图。
图16示出了本发明一种实现方式提供的PDT目录树扫描中的步骤的流程图。
图17示出了本发明一种实现方式提供的单次PDT扫描中的步骤的流程图。
图18示出了本发明一种实现方式提供的与包括多个PDT的文件系统相关联的PDT树。
图19是本发明另一个实施例提供的在实现PDT数据结构的分布式文件系统中执行PDT目录扫描的系统的框图。
图20是本发明另一个实施例提供的借助PDT目录扫描在快速分布式文件系统中扫描目录树的方法的流程图。
应理解,附图是为了说明本发明的概念,并且可以不是按比例绘制的。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述。显然,所描述的实施例仅仅是本发明一部分实施例而不是全部实施例。基于本发明实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都应属于本发明保护的范围。
本发明可以通过多种方式实现为过程、装置、系统、物质组成、计算机可读介质(例如计算机可读存储介质)或计算机网络,其中,程序指令通过光学或电子通信链路发送。在本说明书中,这些实现方式或者本发明可以采取的任何其它形式可以称为技术。通常,所公开过程的步骤的顺序可以在本发明的范围内进行更改。
下面提供本发明的一个或多个实施例的具体实施方式以及示出本发明的原理的附图。虽然本发明是结合这些实施例进行描述的,但本发明不限于任何实施例。本发明的范围仅由权利要求书限制,并且本发明包括许多替代方案、修改和等同物。以下描述中阐述了许多具体细节,以便透彻地理解本发明。提供这些细节是为了举例的目的,并且本发明可以在没有部分或者所有这些具体细节的情况下根据权利要求书进行实践。为清楚起见,没有详细描述与本发明有关的技术领域中已知的技术资料,以免对本发明产生不必要的混淆。
以下具体实施方式中阐述了许多具体细节,以便透彻地理解本发明。但是,本领域的技术人员将理解,没有这些具体细节也可以实践本发明。在其它情况下,没有详细描述公知的方法、过程、组件、模块、单元和/或电路,以免混淆本发明。
尽管本发明实施例不限于此,但使用“处理”、“计算”、“确定”、“建立”、“分析”、“检查”等术语进行的讨论,可以指计算机、计算平台、计算系统或其它电子计算设备的一个或多个操作和/或一个或多个过程,所述计算机、计算平台、计算系统或其它电子计算设备将表示为计算机寄存器和/或存储器内的物理(例如电子)量的数据操作和/或转换为类似地表示为计算机寄存器和/或存储器或可以存储指令以执行操作和/或过程的其它信息非瞬时性存储介质内的物理量。
尽管本发明实施例不限于此,但本文中使用的术语“多个”可以包括“两个或两个以上”。术语“多个”可以在整个说明书中用于描述两个或两个以上组件、设备、元件、单元、参数等。除非明确说明,否则本文中描述的方法实施例不限于特定的顺序。此外,所描述的方法实施例或其元素中的一些可以在同一时间点同时发生或执行。
在本发明中,“快照(snapshot)”是指系统在文件系统的特定时间点状态或文件系统在特定时间点副本。
在本发明中,“文件系统(filesystem)”是指以树结构中的文件和目录的分层形式组织的数据。这个术语也用于指代软件系统,其能够使用数字存储介质(例如硬盘、SSD等)以文件和目录的形式组织数据。
在本发明中,“元数据(metadata)”是指表示关于文件和目录的信息的持久(存储在数字存储介质中)内存数据结构。这包括文件或目录属性、有关数字存储介质中文件内容位置的信息、文件名、扩展属性等。
在本发明中,“部分目录树(partial directory tree,PDT)”是指文件系统的目录树中的子树的子集,其中,该子集中的所有目录都驻留在单个节点中。
在本发明中,“遍历(treewalk)”是指一种用于访问目录树等分层数据结构中的所有元素的算法。
在本发明中,“代理(agent)”是指负责处理请求的激活软件组件。
在本发明中,“节点(node)”是指具有自己的CPU和内存并连接到数字存储器的计算机系统。
在本发明中,“索引节点(inode)”是指与文件或目录相关联的文件系统元数据,其中,元数据存储文件/目录的属性等信息,例如大小、创建/修改时间、权限等。
在本发明中,“入队(enqueue)”是指将等待处理的数据项添加到这些项的队列中。
在本发明中,“出队(dequeue)”是指将等待处理的数据项从这些项的队列中移除。
本发明公开了一种改进分布式文件系统目录扫描操作的方法、装置和系统。虽然描述了将目录树划分为多个部分目录树以加快目录扫描操作的各个方面,但本发明可以在任意数量的不同计算系统、环境和/或配置中实现,实施例在下文的示例性系统、设备/节点/装置和方法中描述。
以下借助示例性图和一个或多个示例来解释本发明实施例。然而,这些示例性图和示例是为了更好地理解本发明,而不应解释为对本发明范围的限制。
分布式文件系统上目录树扫描中的最新技术称为并行分布式遍历。用于执行并行分布式遍历的系统称为分布式文件系统目录扫描子系统(200),如图2所示。该系统包括多个节点(210a、210b、210c……),其中,文件系统分布在多个节点之间。在这种技术中,每个节点运行目录处理线程(213),该目录处理线程负责处理分配给每个节点的目录。每个节点都有一个目录队列(211)和一个与之相关联的文件队列(215)。目录处理线程(213)使目录(212)从目录队列中出队(222),并且通过迭代目录列出目录中的文件和目录。对于目录处理线程在迭代的目录之下找到的每个子目录,目录处理线程(213)使子目录入队(223和226)到每个节点的目录队列(213)中。这种入队基于目录的位置,将目录入队到拥有该目录的节点中。使文件入队(224和227)到文件队列中进行进一步处理,这些文件队列可以来自同一节点,也可以在基于文件的所有者节点的其它节点中。为了启动这一过程,将根目录或待扫描的目录插入拥有该目录的节点的一个队列(如221所示)中。为了使文件和目录入队到节点的其它队列中,分布式遍历算法使用消息传递。这种分布式遍历算法能够与任一级别目录一起工作。
与这种传统的并行分布式遍历相关的缺点之一是一些节点的处理能力利用不足。由于遍历只有在处理高级别目录之后才能识别低级别目录,因此可能无法识别一些目录,而且一些节点没有分配到任何工作。文件队列的长度还限制了节点可以处理的目录数量,还会导致许多节点没有分配到足够的工作,即使节点中存在需要处理的目录。如果处理父目录的节点卡在处理大文件时,拥有子目录的节点必须等待,直到目录入队到其队列中。
因此,需要实现文件系统元数据,以便相对于传统的并行分布式遍历改进目录扫描操作,而且还需要将目录树划分为多个部分目录树,以加快目录扫描操作。因此,本发明公开了一种用于快速分布式文件系统的方法、装置和系统,通过将目录树划分为多个部分目录树,以加快目录扫描操作,从而改进分布式文件系统目录扫描操作。
本发明的重点是将目录树划分为多个部分目录树,以加快目录扫描操作。这是通过引入一种称为部分目录树(partial directory tree,PDT)的新数据结构来实现的,所述PDT是文件系统的目录树中的子树的子集,其中,所述子集中的目录属于单个节点。值得注意的是,目录中的所有文件在物理上可能不驻留在同一节点中,但是,属于PDT中的目录的所有文件都视为PDT的一部分。因此,包括数十亿个文件的文件系统可以包括数百万个PDT,其中,每个PDT会分配有称为PDT ID的用于识别的唯一编号。
图3是本发明一种实现方式提供的文件系统如何划分为多个部分目录树的框图。具体地,部分目录树是文件系统的目录树中的子树的子集,其中,该子集中的目录属于单个节点。
PDT树是表示属于单个文件系统的多个PDT之间关系的树,例如,在图3中,文件系统(310)有5个PDT(312),即PDT 1、PDT 2、PDT 3、PDT 4和PDT 5。每个PDT都有一个基目录,也就是根目录,即PDT(313)。可以为这5个PDT(312)构建一个PDT树,表示这些PDT之间的父子关系,图4示出了相同内容。
具体地,图4示出了包括根目录“/”和子目录a、b和c的文件系统(410)的一个示例。目录a具有子目录l和m,目录c具有子目录d。目录b具有子目录x,目录x具有子目录y和z。所有目录都具有子目录。图中有5个PDT,即PDT 1、PDT 2、PDT 3、PDT 4和PDT5。每个PDT都有一个基目录,也就是该PDT中的根目录。对于PDT 1,“/”是根目录;对于PDT 2,“/a”是根目录;对于PDT 3,“/b”是根目录;对于PDT 4,“/c/d”是根目录;对于PDT 5,“/b/x”是根目录。这个图还示出了PDT树(420),也就是表示文件系统中不同PDT之间关系而不表示内部目录的树。根据这个树,PDT 1是根PDT,PDT 2、PDT 4和PDT 3是PDT 1的子树,PDT 5是PDT 3的子树。图4还示出了每个PDT都具有与该PDT的基目录相关联的路径。
路径到PDT的映射将基目录路径映射到特定PDT。PDT映射实现为PDT树。这种映射通常可以包括数百万个文件系统条目,这些条目又包括数十亿个文件,如果是分层存储系统,PDT树维护在内存中或高性能存储介质中。PDT树足够小,可以放入节点内的内存或高性能层中,非常大的文件系统也是如此。由于PDT树小,因此PDT树在集群的所有节点中都会复制。在主节点中对PDT树进行修改,将更新将发布给子节点。搜索PDT树比通过文件系统树搜索路径快,因为整个PDT树在集群中的每个节点中都可用,而且搜索确实需要切换到其它节点,因此不会产生网络跳的成本。
PDT表是包括文件系统中存在的所有PDT的表。每个PDT都有一个基目录路径。该PDT表持久保存在磁盘中,并且加载到内存中,以构建PDT树。每个PDT也维护其父PDT。
PDT ID是为特定PDT分配的标识符,使用整数变量表示。文件或目录的索引节点维护PDT字段。当将索引节点创建为文件或目录创建的路径时,该PDT字段被填充。对于目录中存在的文件,PDT ID继承父目录,而对于目录中存在的子目录,如果子目录与目录在同一节点中创建,则PDT ID继承父目录。如果创建了目录,并且该目录分配在与父目录不同的节点中,则分配新PDT,并且将新PDT的PDT ID分配给新创建目录的索引节点的PDT ID字段。索引节点的PDT ID字段在以下场景中可以更改:
-文件移动到不同PDT;
-目录移动到不同PDT。
PDT索引节点集是属于特定PDT的文件和目录的所有索引节点的列表。文件系统中的每个PDT都有一个PDT索引节点集。该PDT索引节点集在文件系统中作为列表数据结构维护。每当有索引节点的PDT分配或更改到特定PDT时,索引节点就会添加到特定PDT的PDT索引节点集中。PDT索引节点集是关键数据结构,有助于目录树扫描。
PDT元数据是指用于维护PDT相关信息的所有数据结构的集合。这包括PDT树(实现路径到PDT的映射)、PDT表、PDT索引节点列表和与索引节点相关联的PDT ID属性。在文件系统操作(例如文件创建、目录创建、文件删除、目录删除、文件移动、目录移动)的过程中,更改PDT元数据。更改文件属性不会更改PDT元数据。
图5示出了与文件系统相关联的PDT数据结构。文件系统元数据(500)划分为多个节点,单个节点中的元数据称为节点元数据(510a、510b……)。节点元数据包括标准文件系统元数据(550),其存在于标准分布式文件系统实现方式中。标准文件系统元数据包括内存标准文件系统元数据(551)和磁盘标准文件系统元数据(560)。磁盘标准文件系统元数据包括磁盘索引节点元数据(561)和磁盘目录元数据(562)。磁盘索引节点元数据基本上是一组索引节点(564)。作为本发明的一部分,将新的PDT ID属性(565)添加到索引节点中。内存标准文件系统元数据是磁盘元数据的缓存部分,其包括索引节点缓存(552)和目录缓存(553)。PDT元数据(520)是作为本发明的一部分添加到节点元数据中的其它元数据。PDT元数据(520)包括内存PDT元数据(521)和磁盘PDT元数据(530)。磁盘PDT元数据包括每个PDT的PDT表(531)和PDT索引节点列表(532)。PDT表是一组PDT(533),PDT树(522)是内存PDT元数据。PDT树(522)是PDT表(531)的缓存副本,以树形式表示,用于快速搜索。
图6是本发明一种实现方式提供的分配PDT涉及的步骤的流程图。当在文件系统中的现有父目录中创建新目录且新创建的目录与父目录没有相同的所有者节点时,创建新PDT。创建新PDT包括几个步骤。首先,分配PDT表中的条目(601)。该条目具有PDT标识符或PDT ID。其次,创建PDT索引节点列表数据结构(602)。PDT索引节点列表维护PDT中的索引节点列表,该列表最初为空。第三,将新创建目录的索引节点添加到PDT索引节点列表中(603)。第四,将新创建的PDT插入到PDT树中的适当位置(604)。例如,如果在“/existingdir”之下创建目录“newdir”,“/existingdir”属于PDT 2,而且为“newdir”分配和创建了PDT 6,则将PDT 6插入到PDT树中的PDT 2之下。第五,将新创建PDT的PDT ID分配给目录索引节点(605)。
图10、图11、图12和图14示出了本发明一种实现方式提供的涉及文件系统中的文件和目录在不同PDT之间和内移动的各种场景。图10示出了文件或目录在同一PDT内移动的情况。这示出了文件“a/b/f1”在PDT 10内移动到“a/f1”,文件f1在PDT中没有更改。目录移动也遵循与文件移动相同的逻辑,因此未示出目录在同一PDT内移动。图11示出了文件在两个不同PDT之间移动。在这种情况下,属于PDT 10的文件“a/b/f1/”移动(重命名)到“x/y/f1”,其中,移动的目标目录“x/y”属于PDT 11。这导致文件“f1”成为PDT 11的一部分。文件PDT从PDT 10变为PDT 11。简言之,在文件移动场景中,文件的PDT ID更改为目标目录的PDTID。图12描述了目录在同一节点拥有的PDT之间移动。在本示例中,属于PDT 10的目录“a/b”移动到属于PDT 11的目录“x/y”之下。在移动目录“b”属于PDT 11之后,属于“b”子树和PDT10的所有文件和目录也成为PDT 11的一部分。例如,目录“b”之下的文件“f1”将其PDT从PDT10变为PDT 11。如果在移动之前,“b”子树之下存在不属于PDT 10的文件和目录,则这些文件和目录不受移动的影响。例如,目录“x”(移动前的“a/b/x”)属于不同的PDT(而不是PDT10),该目录的PDT没有因移动而更改。图14描述了目录在两个不同节点拥有的不同PDT之间移动。在本示例中,将属于节点1拥有的PDT 10的目录“a/b”移动到属于节点2拥有的PDT 11的目录“x/y”之下。由于目录“b”在节点1中,不能分配给节点2拥有的PDT 11,因此在这种场景中,创建新PDT(PDT 15),并且将目录“b”分配在这个新PDT(即PDT 15)之下。子树“b”之下的属于PDT 10的所有文件和目录也都分配在PDT 15之下。子树“b”之下的不属于PDT 10的文件或目录不受影响。
创建新文件:图7所示的流程图描述了在创建新文件的过程中维护PDT元数据的过程。当在文件系统的目录中创建新文件时,获取父目录的PDT ID(701);然后,使用父目录的PDT ID更新文件的索引节点中的PDT ID(702);接着,将索引节点添加到PDT的索引节点列表中(703)。例如,考虑在目录“Dir1”中创建新文件“file1”的场景。目录“Dir1”的索引节点具有PDT ID属性,其设置为10。“file1”的索引节点也将PDT ID属性设置为10。
与父目录在同一节点中的创建新目录:图8所示的流程图描述了在创建新目录的过程中维护PDT元数据的过程。在创建新目录的过程中,首先识别父目录的PDT ID(801);创建目录(802)。检查目录是在同一节点中创建还是在不同节点中创建(803)。如果新创建的目录与父目录在同一节点中创建,则PDT保持不变。使用父目录的PDT更新目录的索引节点的PDT ID(804);将索引节点添加到PDT的索引节点列表中(805)。例如,考虑在目录“Dir1”中创建新目录“Dir2”的场景,而且“Dir2”的所有者节点是“Dir1”的所有者节点。目录“Dir1”的索引节点具有PDT ID属性,其设置为10。“file1”的索引节点也将PDT ID属性设置为10。如果新创建的目录在另一个节点中创建,则创建新PDT(806),将该目录的PDT ID设置为新创建PDT的PDT ID(807),并且将该目录添加到新创建PDT的PDT索引节点列表中(808)。例如,考虑在目录“Dir1”中创建新目录“Dir2”的场景,而且“Dir1”在节点1拥有的PDT 10之下,“Dir2”在节点2中创建。在这种场景中,创建了新PDT,假设为PDT 25,并且将“Dir2”添加到PDT 25中。
删除文件或目录:图9所示的流程图示出了在删除文件或目录时维护PDT元数据的过程。当删除文件或目录时,获取待删除的文件或目录的PDT ID(901),将该文件或目录从特定PDT的PDT索引节点列表中删除(902)。例如,当删除属于PDT 10的文件“file1”时,查找“file1”的索引节点以获取PDT ID,返回10,然后从PDT 10的索引节点列表中删除“file1”的节点标识符。
删除PDT根目录(或PDT的基目录):如果目录是PDT的基目录,则删除PDT本身。只有在删除这个目录之下的所有文件和目录后,才会删除这个目录,因为只有在删除目录的所有元素时,才会删除该目录。这使得目录成为该PDT中的最后一个元素,删除这个目录就移除了PDT本身。例如,“Dir1”是PDT 10的基目录,则只有在“Dir1”目录为空的情况下,才能删除该目录。如果为空,则成功删除该目录,作为删除的一部分,PDT 10也需要删除。删除PDT根目录也在图9所示的过程中示出。在删除文件或目录时,检查PDT索引节点列表是否为空(903)。如果PDT索引节点列表为空,则从PDT树中删除PDT(904),标记PDT从PDT表中删除(905),删除PDT索引节点列表(906)。
写入文件和更改属性:更改文件,例如将数据写入文件或更改文件属性,例如访问时间、权限等,不会更改其PDT,因此PDT元数据没有发生更改。
更改目录属性:更改目录属性,例如访问时间、权限等,不会更改其PDT,因此PDT元数据没有发生更改。
移动文件或目录:文件和目录移动会影响PDT元数据,因此在移动的过程中需要维护PDT的元数据一致性。PDT受到影响的移动场景有四种,下文提供详细论述。
场景1:文件和目录在同一PDT内移动:当文件或目录在同一PDT内移动时,关联的PDT元数据没有发生更改。例如,图10示出了文件或目录在同一PDT内移动的情况。示出了PDT 10在移动前(1010)和移动后(1015)的状态。这表示移动文件(1011)“a/b/f1”驻留在源目录(1012)“a/b”中,正移动到PDT 10内的目标目录(1013)“a”之下;文件f1在PDT中没有更改。目录在同一PDT内移动也遵循与文件移动相同的逻辑,因此未示出目录在同一PDT内移动。
场景2:文件在PDT之间移动:当文件移动到与所述文件的源PDT不同的另一个目录时,文件的PDT更改为新父目录的PDT。索引节点中的PDT ID也更改为新值,索引节点从旧PDT的PDT索引节点列表中删除,并添加到新PDT的PDT索引节点列表中。例如,图11示出了文件在两个不同的PDT之间移动。图11示出了“移动前的源PDT状态”(1120)和“移动后的源PDT状态”(1130),还示出了“移动前的目标PDT状态”(1125)和“移动后的目标PDT状态”(1135)。在这种情况下,源目录(1122)“a/b”中的移动文件(1121)“a/b/f1/”是PDT 10的一部分,正移动到目标目录(1123)“x/y”之下,该目标目录是PDT11的一部分。这导致文件“f1”成为PDT11的一部分。文件PDT从PDT 10变为PDT 11。简言之,在文件移动场景中,文件的PDT ID更改为目标目录的PDT ID。
场景3:目录在同一节点中的PDT之间移动:当一个目录在同一节点中的不同PDT之间移动到另一个目录时,源PDT之下的目录的整个子树现在移动到新的目标PDT之下。例如,图12描述了目录在同一节点拥有的PDT之间移动。图12示出了“移动前的源PDT状态”(1230)和“移动后的源PDT状态”(1240),还示出了“移动前的目标PDT状态”(1235)和“移动后的目标PDT状态”(1245)。在本示例中,属于PDT 10的移动目录(1231)“a/b”移动到属于PDT 11的目标目录(1234)“x/y”之下。在移动目录“b”属于PDT 11之后,属于“b”子树和PDT 10的所有文件和目录也成为PDT 11的一部分。例如,目录“b”之下的文件“f1”将其PDT从PDT 10变为PDT 11。如果在移动之前,“b”子树之下存在不属于PDT 10的文件和目录,则这些文件和目录不受移动的影响。例如,目录“x”(移动前的“a/b/x”)属于不同的PDT(而不是PDT 10),该目录的PDT没有因移动而更改。目录移动会影响三个目录:移动目录(即正移动的目录)、源目录(即移动目录在移动前的父目录)和目标目录(即移动目录移动到的目录)。当移动发生时,需要完成PDT元数据更新,这通过下面描述的多步骤过程来完成。
图13中的流程图描述了更新PDT元数据以在同一节点内的PDT之间移动目录(输入:
源目录、移动目录、目标目录)的方法,涉及许多步骤:
1.从源目录的索引节点中获取源PDT(即源目录的PDT)(1301);
2.从目标目录的索引节点中获取目标PDT(即目标目录的PDT)(1302);
3.将源PDT的状态设置为无效(1303);
4.将目标PDT的状态设置为无效(1304);
5.浏览移动目录的子树之下的文件和目录列表并进行处理;
5.1.获取移动目录树之下的下一个子文件或子目录(1305),
5.2.如果移动目录树中没有更多的子文件或子目录要处理(1306),转到步骤6;
5.3.如果该文件或目录是源PDT的一部分(1307),则
5.3.1.从源PDT的索引节点列表中删除文件/目录(1308);
5.3.2.将该文件/目录添加到目标PDT的索引节点列表中(1309);
5.3.3.将文件或目录索引节点的PDT ID设置为目标PDT ID(1310);
5.4.继续下一个步骤5.1;
6.将源PDT的状态设置为有效(1311);
7.将目标PDT的状态设置为有效(1312)。
场景4:目录在不同节点中的PDT之间移动:当一个目录移动到与另一个节点中的源PDT不同的另一个目录时,在源PDT之下的目录的子树现在应该成为新PDT。例如,图14描述了目录在两个不同节点拥有的不同PDT之间移动。图14示出了“移动前的源PDT状态”(1450)和“移动后的源PDT状态”(1460),还示出了“移动前的目标PDT状态”(1455)和“移动后的目标PDT状态”(1465),其中,源PDT和目标PDT由两个不同的节点拥有。图14还示出了该移动操作创建了“新PDT的状态”(1466)。在本示例中,将属于节点1拥有的PDT 10的移动目录(1451)“a/b”移动到属于节点2拥有的PDT 11的目标目录(1453)“x/y”之下。由于目录“b”在节点1中,不能分配给节点2拥有的PDT 11,因此在这种场景中,创建新PDT(PDT 15)(1466),并且将目录“b”分配在这个新PDT(即PDT 15)之下。子树“b”之下的属于PDT 10(1454)的所有文件和目录也都分配在PDT 15之下。子树“b”之下的不属于PDT 10(1457)的文件或目录不受影响。源PDT的索引节点列表也会受到影响。目录移动会影响三个目录:移动目录(即正移动的目录)、源目录(即移动目录在移动前的父目录)和目标目录(即移动目录移动到的目录)。当移动发生时,需要完成PDT元数据更新,这通过下面描述的多步骤过程来完成。
图15中的流程图描述了更新PDT元数据以在同一节点内的PDT之间移动目录(输入:源目录、移动目录、目标目录)的方法,涉及许多步骤:
1.从源目录的索引节点中获取源PDT(即源目录的PDT)(1501);
2.将源PDT的状态设置为无效(1502);
3.分配PDT表中的新PDT(1503);
4.将新PDT设置为无效(1504);
5.为新PDT分配PDT索引节点列表(1505);
6.将新PDT添加到PDT树中(1506);
7.浏览移动目录的子树之下的文件和目录列表并进行处理;
7.1.获取移动目录树之下的下一个子文件或子目录(1507);
7.2.如果移动目录树中没有更多的子文件或目录要处理,(1508),所有文件和目录都进行处理,转到步骤8;
7.3.如果该文件或目录是源PDT的一部分(1509),则
7.3.1.从源PDT的PDT索引节点列表中删除该文件或目录索引节点(1510);
7.3.2.将文件或目录添加到新PDT的PDT索引节点列表(1511);
7.3.3.将索引节点的PDT ID设置为新PDT的PDT ID(1512);
7.4.继续下一个文件步骤7.1;
8.将源PDT的状态设置为有效(1513);
9.将新PDT的状态设置为有效(1514)。
图16中的流程图描述了对特定目录树进行PDT遍历/扫描的过程,包括扫描特定输入目录的以下步骤。
1.查找待扫描的输入目录的PDT ID(1601);
2.在PDT树中查找PDT(1602);
3.通过对PDT树进行遍历,获取该PDT之下的PDT列表(PDT扫描列表)(1603);
4.浏览PDT扫描列表中的PDT列表并进行处理;
4.1.从PDT扫描列表中获取下一个PDT(1604);
4.2.如果扫描列表中不存在更多的PDT(1605),则处理所有PDT,转到步骤5;
4.3.如果PDT无效(1606),则
4.3.1.获取PDT的基目录(1608);
4.3.2.对该基本目录调度遍历(1609),其中,这种遍历限于单个节点,因为在遍历的过程中遇到的属于其它PDT的文件和目录跳过处理。
否则,
4.3.3.对该PDT调度单次PDT扫描(1607);
5.如果输入目录(又称扫描目录)是PDT根,即某个PDT的基目录(1610),则:
5.1.为该PDT调度单次PDT扫描(1612),其中,调度通常通过使PDT入队到节点的PDT队列中来进行;
否则,
5.2.对该目录调度遍历(1611)(遍历在该目录中执行,这种遍历限于单个节点,因为遇到的属于其它PDT的文件和目录跳过处理),其中,调度通常通过使目录入队到目录队列中来进行。
图17中的流程图描述了对特定PDT进行单次扫描的过程,包括以下步骤。
1.获取待扫描的PDT(1701);
2.获取与PDT相关联的PDT索引节点列表(1702);
3.浏览PDT索引节点列表中的所有索引节点列表并逐个进行处理;
3.1.从PDT索引节点列表中获取下一个索引节点(1703);
3.2.如果PDT索引节点列表(1704)中不存在更多的索引节点要处理,则过程完成;
3.3.如果索引节点是文件(1705),则
3.3.1.添加到文件队列中进行文件处理(1707);
3.4.如果索引节点是目录,则
3.4.1.将索引目录添加到目录队列中进行目录处理(1706)。
图18示出了本发明一个实施例提供的实现PDT目录扫描方法的PDT目录扫描子系统1800。该系统包括扫描节点(1810a)中的扫描主模块(1851)和PDT树模块(1850),以及每个扫描节点(包括主节点)中的几个其它组件。在每个扫描节点中,系统包括PDT队列(1853)、PDT扫描仪(1855)、该扫描节点拥有的每个PDT的PDT索引节点列表(1856)、目录队列(1811)、目录处理线程(1813)、文件队列(1831)和一个或多个文件处理线程(1833)。PDT队列保存要处理的PDT(1854),目录队列保存要处理的目录(1818),文件队列保存要处理的文件(1832)。下文详细论述这些组件。
扫描主模块(1851):扫描主模块是负责协调扫描过程的实体。它在维护PDT树的扫描节点中运行,即在文件系统所有者节点(1810a)中运行。扫描主模块接收使用指定扫描路径(1821)进行扫描的请求。扫描主模块(1851)搜索(1862)具有扫描路径(这是目录路径)的PDT树(1850),并且查找该目录(即通过扫描路径指定的目录)所属的PDT。该PDT自此称为扫描路径PDT。所有子PDT(即位于目录树之下的PDT的指定扫描路径)都通过搜索PDT树来识别。由于PDT树是内存数据结构(由于比较小),查找子PDT是一个相对较快的操作。一旦扫描主模块(1851)查找指定扫描路径的子PDT列表,就将该列表中的PDT入队(1861、1863)到PDT所属的所有者节点的PDT队列中。这种入队操作需要在集群中的节点之间传递消息。与扫描路径目录的位置相关的情况有两种,下文提供论述。
在情况1中,扫描路径可能不是扫描路径PDT的基路径,在这种情况下,无法通过浏览扫描路径PDT的PDT索引节点列表中的所有索引节点对该目录进行扫描。在这种情况下,遍历算法用于识别处理的扫描路径对应的目录下的文件和目录。这种遍历限于扫描路径PDT中的文件和目录,即限于单个节点;如果在遍历的过程中找到属于另一个PDT的目录,则不需要处理该目录,因为该目录的PDT已经包括在子PDT列表中,并且已经处理。遍历通过扫描主模块(1851)使该路径入队到拥有此目录的节点的目录队列(1811)中来执行。这可能表示目录入队到主节点或多个从节点中的一个从节点中,并且步骤可能涉及节点间通信。
在情况2中,其中,扫描路径是扫描路径PDT的基路径,使PDT入队到PDT队列中进行处理。扫描路径PDT可以驻留在主节点或多个从节点中的一个从节点,并且根据PDT的所有者节点,该步骤可能涉及节点间通信。目录队列条目包括有关这是遍历扫描还是简单扫描的信息,因此情况1和情况2的处理方式不同。
PDT队列(1853):每个扫描节点维护一个PDT队列(1853),该队列由扫描主模块(1851)填充需要由节点处理的PDT。
PDT扫描仪(1851):PDT扫描仪从PDT队列(1853)中获取需要处理的PDT,为从PDT队列(1853)中获取的PDT浏览PDT索引节点列表(1856)中的索引节点列表,并且使该列表中的文件和目录入队到文件队列(1831)和目录队列(1811)中。PDT扫描仪(1855)仅使同一节点中的目录入队,因为所有目录都归节点所有。
目录队列(1811)和目录处理线程(1813):目录队列(1811)包括待处理的目录(1818)。目录处理通常只需要获取目录的属性并进行处理。但是,在扫描路径可能不是扫描路径PDT的基路径的情况下,需要对输入目录进行遍历,并且目录入队时,携带需要遍历的标志。该过程涉及浏览目录并将子目录入队到同一目录队列(1811)中以及将文件入队到文件队列(1831)中。这与一般的遍历过程类似。
文件队列(1831)和一个或多个文件处理线程(1833):PDT扫描仪(1855)和目录处理线程(1813)使文件入队(1866、1824和1829)到文件队列中。PDT扫描仪(1855)浏览正在处理的PDT的PDT索引节点列表(1856),并且使文件索引节点入队(1866)到文件队列(1831)中。文件索引节点由处理文件的文件处理线程(1833)从文件队列(1831)中出队(1825)。根据整体操作,这种处理可能涉及不同的任务。例如,对于备份操作,这可能涉及读取文件以及将文件写入备份介质或备份流。
PDT无效时的场景:值得注意的是,只有在所有PDT都有效的情况下,才会执行目录扫描,而且在大多数情况下,PDT都是有效的。但是,如果一些PDT无效,则需要等待PDT后台任务使PDT有效。如果特定PDT无效,则对该PDT的基目录执行遍历。使PDT的基目录入队到目录队列(1811)中,以及携带该目录需要进行遍历的信息。目录处理线程(1813)在处理目录时,使子目录入队(1823、1826)到同一节点或其它节点的目录队列中,以及携带该目录需要进行遍历的信息,这种遍历仅限于当前扫描节点中的文件和目录,因为PDT不跨越扫描节点。
图19示出了本发明一种实现方式提供的用于分布式文件系统的系统(1900)的框图。
该系统(1900)包括:
1.多个节点1910a、1910b、1910c……,其中,分布式文件系统组件“分布式文件系统节点”(1911a、1911b……)包括在内。
2.文件系统元数据(1930)分布在多个节点之间,包括标准文件系统元数据(1931a、
1931b……)和PDT元数据(1932a、1932b……)。
3.系统1900还包括PDT目录扫描子系统(1920),即图18中描述的系统(1800)的一个实施例。
4.客户端(1940)通过NFS、SMB、HDFS和S3等文件访问协议与分布式文件系统中的节点交互。
5.目录树扫描任务可以在外部或内部向扫描节点(1921a)请求(1951)。
图20是本发明一种实现方式提供的扫描分布式文件系统的目录树的方法的流程图。方法(2000)包括以下步骤:
步骤2001:识别待扫描目录的PDT;
步骤2002:识别PDT之下的子PDT列表;
步骤2003:将待扫描的PDT调度到拥有这些PDT的节点;
步骤2004:在每个PDT的索引节点列表迭代的节点上处理PDT,并且在节点中处理PDT中的文件和目录;
步骤2005:通过遍历独立扫描PDT中待扫描目录的子树,并且处理这些文件和目录。
本发明的第一实施例是一种用于对目录树进行部分目录树(Partial DirectoryTree,PDT)扫描的方法。所述方法包括以下步骤:
扫描节点(1810)获取(S1601)待扫描目录的PDT ID;
所述扫描节点(1810)从PDT树中检索(S1602)PDT;
所述扫描节点(1810)通过对所述PDT树执行遍历,获取(S1603)PDT扫描列表;
所述扫描节点(1810)从所述PDT扫描列表中获取(S1604)下一个PDT;
所述扫描节点(1810)确定(S1606)所述下一个PDT是否是有效PDT;
当所述下一个PDT是有效PDT时,所述扫描节点(1810)对所述PDT扫描列表中的所有PDT调度(S1607)单次PDT扫描。
在确定(S1606)所述下一个PDT是否是有效PDT之前,所述方法还包括以下步骤:
确定(S1605)所述PDT扫描列表中的后续PDT的可用性;
确定(S1610)所述下一个PDT是否是PDT根;
当所述下一个PDT是PDT根时,通过使所述PDT根入队到PDT队列中,对所述PDT根调度(S1612)单次PDT扫描;
当所述下一个PDT不是PDT根时,通过使所述目录入队到目录队列中,对所述目录调度(S1611)遍历。
在确定(S1606)所述下一个PDT是否是有效PDT之后,所述方法还包括以下步骤:
当所述下一个PDT不是有效PDT时,获取(S1608)所述PDT的基目录;
通过使所述基目录入队到目录队列中,对所述基目录调度(S1609)遍历。
所述对所述PDT扫描列表中的所有PDT调度(S1607、S1612)单次PDT扫描的步骤还包括以下步骤:
获取(S1701)所述待扫描的PDT;
获取(S1702)与所述扫描的PDT相关联的PDT索引节点列表;
处理(S1703)所述PDT索引节点列表中的下一个索引节点;
确定(S1704)所述PDT索引节点列表中的后续索引节点的可用性。
所述方法还包括以下步骤:
确定(S1705)所述索引节点是文件还是目录;
当所述索引节点是目录时,将所述目录添加(S1706)到文件队列中进行处理;
当所述索引节点是文件时,将所述文件添加(S1707)到文件队列中进行处理。
本发明的第二实施例是一种用于对目录树进行部分目录树(Partial DirectoryTree,PDT)扫描的扫描节点(1810)。所述节点包括:扫描主模块(1851),用于:获取待扫描目录的PDT ID;从PDT树中检索PDT;通过对所述PDT树执行遍历,获取PDT扫描列表;从所述PDT扫描列表中获取下一个PDT;确定所述下一个PDT是否是有效PDT;当所述下一个PDT是有效PDT时,对所述PDT扫描列表中的所有PDT调度单次PDT扫描;PDT树模块(1850),用于维护所述PDT树。
所述扫描主模块(1851)还用于:确定所述PDT扫描列表中的后续PDT的可用性;确定所述下一个PDT是否是PDT根;当所述下一个PDT是PDT根时,通过使所述PDT根入队到PDT队列中,对所述PDT根调度单次PDT扫描;当所述下一个PDT不是PDT根时,通过使所述目录入队到目录队列中,对所述目录调度遍历。所述扫描主模块(1851)还用于:当所述下一个PDT不是有效PDT时,获取所述PDT的基目录;通过使所述基目录入队到目录队列中,对所述基目录调度遍历。
所述扫描主模块(1851)还包括PDT扫描仪模块(1855),用于:获取所述待扫描的PDT;获取与所述扫描的PDT相关联的PDT索引节点列表;处理所述PDT索引节点列表中的下一个索引节点;确定所述PDT索引节点列表中的后续索引节点的可用性。所述PDT扫描仪模块(1855)还用于:确定所述索引节点是文件还是目录;当所述索引节点是目录时,将所述目录添加到文件队列中进行处理;当所述索引节点是文件时,将所述文件添加到文件队列中进行处理。
本发明的一个实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质存储计算机程序,当所述计算机程序在处理器上运行时,所述处理器执行图16和图17所述的方法。
此外,本发明的另一个实施例公开了一种计算机可读介质。所述计算机可读介质包括计算机程序,当所述计算机程序由计算机执行时,使得所述计算机执行方法步骤。
本发明还公开了一种计算机可读介质。所述计算机可读介质包括计算机程序,当所述计算机程序由计算机执行时,使得所述计算机执行如上所述的用于快速分布式文件系统的方法。
本发明适用于非结构化数据的数据保护领域。本发明提高了分布式文件系统的备份、复制等数据保护工作流的性能。本发明提供的技术效果是,在分布式文件系统中引入了其它数据结构,通过这种数据结构,扫描目录树的速度更快。有助于实现这一改进的主要概念是部分目录树(Partial Directory Tree,PDT),这是一种高效划分元数据的方法,其中,元数据局部性的好处用于划分。通过快速识别要通过PDT树、PDT索引节点列表等数据结构处理的目录和文件,操作的处理速度更快。此外,与传统的分布式遍历方法相比,本发明的方法使用的消息更少。
下文提及本发明的一些非限制性优点:
提高了分布式文件系统目录备份过程中的性能;
提高了目录复制技术方案的性能;
通过提高目录树扫描过程的性能,提高了分层技术方案的性能。
本发明的一些未来实现方式如下所示:
如果PDT树本身非常大,则PDT树可以划分为多个节点;
PDT索引节点列表只能包括目录列表,文件的PDT ID始终是父目录的PDT ID,这减少了列表的空间。
本领域技术人员可以理解,任何已知的或新的算法都可以用于本发明的实施。然而,需要说明的是,不管使用何种已知的或新的算法,本发明提供了一种用于快速分布式文件系统的方法、装置和系统,通过将目录树划分为多个部分目录树,以实现上述提到的益处和技术进步。
本领域普通技术人员可以意识到,结合本说明书中所公开的实施例描述的各示例,单元及算法步骤能够以电子硬件,或者以计算机软件与电子硬件的组合来实现。功能是由硬件还是由软件执行取决于技术方案的特定应用和设计约束条件。本领域技术人员可以使用不同的方法实现每个特定应用的所描述的功能,但是不应认为该实现方式超出本发明的范围。
本领域技术人员可以清楚地理解,为了描述的方便和简洁,上述系统、装置和单元的具体工作过程可以参考上述方法实施例中对应的过程,本文不再赘述。
在本申请提供的几个实施例中,应理解,所公开的装置、方法或系统可以通过其它方式实现。例如,所描述的装置实施例仅仅是示例性的。例如,单元划分仅仅是逻辑功能划分,在实际实现方式中可以是其它划分。例如,可以将多个单元或组件组合或集成到另一系统中,或可以忽略或不执行一些特征。另外,所显示或讨论的相互耦合或直接耦合或通信连接可以通过一些接口实现。装置或单元之间的直接耦合或通信连接可通过电子、机械或其它形式实现。
当这些功能通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以将这些功能存储在计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上,或者对现有技术贡献的部分,或者技术方案的一部分,可以通过软件产品的形式实现。计算机软件产品存储在存储介质中并包括若干指令,用于指示计算机节点(可为个人计算机、服务器或网络节点)执行本发明实施例中所描述的方法的所有或部分步骤。上述存储介质包括:USB盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
相互通信的设备之间不需要保持连续通信,除非另有明确规定。此外,相互通信的设备可以直接通信或通过一个或多个媒介间接通信。
当本文描述单个设备或物品时,很明显可以使用一个以上的设备/物品(不论它们是否协作)来代替单个设备/物品。类似地,对于本文描述的一个以上的设备或物品的情况(不论它们是否协作),很明显可以使用单个设备/物品来代替一个以上的设备或物品,或者可以使用不同数量的设备/物品来代替所示数量的设备或程序。或者,设备的功能和/或特征可以由未明确描述为具有这种功能/特征的一个或多个其它设备实施。因此,本发明的其它实施例不需要包括设备本身。
最后,选择本说明书中使用的语言主要是出于可读性和指导性,而不是记述或限制发明主题。因此,本发明的范围不由该详细描述限制,而是由本申请提出的任何权利要求限制。因此,本发明实施例的公开内容旨在为说明性的,而不是为了限制本发明的范围,本发明的范围在权利要求中提出。
关于本文中基本上任何复数和/或单数术语的使用,本领域技术人员可以根据上下文和/或应用从复数转换为单数和/或从单数转换为复数。为清楚起见,本文可以明确阐述各种单数/复数置换。
虽然已经以结构特征和/或方法特有的语言描述了用于快速分布式文件系统的实现方式,但应理解,所附权利要求书不一定限于所描述的特定特征或方法。相反,所述特定特征和方法作为将目录树划分为多个部分目录树以加快目录扫描操作并改进分布式文件系统目录扫描操作的实现方式的示例而公开。

Claims (11)

1.一种处理文件系统的方法,其特征在于,所述方法用于对所述文件系统中的目录树进行部分目录树(Partial Directory Tree,PDT)扫描,所述方法包括:
扫描节点(1810)获取(S1601)待扫描目录的PDT ID;
所述扫描节点(1810)从PDT树中检索(S1602)PDT;
所述扫描节点(1810)通过对所述PDT树执行遍历,获取(S1603)PDT扫描列表;
所述扫描节点(1810)从所述PDT扫描列表中获取(S1604)下一个PDT;
所述扫描节点(1810)确定(S1606)所述下一个PDT是否是有效PDT;
当所述下一个PDT是有效PDT时,所述扫描节点(1810)对所述PDT扫描列表中的所有PDT调度(S1607)单次PDT扫描。
2.根据权利要求1所述的方法,其特征在于,在确定(S1606)所述下一个PDT是否是有效PDT之前,所述方法还包括以下步骤:
确定(S1605)所述PDT扫描列表中的后续PDT的可用性;
确定(S1610)所述下一个PDT是否是PDT根;
当所述下一个PDT是PDT根时,通过使所述PDT根入队到PDT队列中,对所述PDT根调度(S1612)单次PDT扫描;
当所述下一个PDT不是PDT根时,通过使所述目录入队到目录队列中,对所述目录调度(S1611)遍历。
3.根据权利要求1所述的方法,其特征在于,在确定(S1606)所述下一个PDT是否是有效PDT之后,所述方法还包括以下步骤:
当所述下一个PDT不是有效PDT时,获取(S1608)所述PDT的基目录;
通过使所述基目录入队到目录队列中,对所述基目录调度(S1609)遍历。
4.根据权利要求1所述的方法,其特征在于,所述对所述PDT扫描列表中的所有PDT调度(S1607、S1612)单次PDT扫描还包括以下步骤:
获取(S1701)所述待扫描的PDT;
获取(S1702)与所述扫描的PDT相关联的PDT索引节点列表;
处理(S1703)所述PDT索引节点列表中的下一个索引节点;
确定(S1704)所述PDT索引节点列表中的后续索引节点的可用性。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括以下步骤:
确定(S1705)所述索引节点是文件还是目录;
当所述索引节点是目录时,将所述目录添加(S1706)到文件队列中进行处理;
当所述索引节点是文件时,将所述文件添加(S1707)到文件队列中进行处理。
6.一种处理文件系统的扫描节点(1810),其特征在于,所述节点用于对所述文件系统的目录树进行部分目录树(Partial Directory Tree,PDT)扫描,所述节点包括:
扫描主模块(1851),用于:
获取待扫描目录的PDT ID;
从PDT树中检索PDT;
通过对所述PDT树执行遍历,获取PDT扫描列表;
从所述PDT扫描列表中获取下一个PDT;
确定所述下一个PDT是否是有效PDT;
当所述下一个PDT是有效PDT时,对所述PDT扫描列表中的所有PDT调度单次PDT扫描;
PDT树模块(1850),用于维护所述PDT树。
7.根据权利要求6所述的节点,其特征在于,所述扫描主模块(1851)还用于:
确定所述PDT扫描列表中的后续PDT的可用性;
确定所述下一个PDT是否是PDT根;
当所述下一个PDT是PDT根时,通过使所述PDT根入队到PDT队列中,对所述PDT根调度单次PDT扫描;
当所述下一个PDT不是PDT根时,通过使所述目录入队到目录队列中,对所述目录调度遍历。
8.根据权利要求6所述的节点,其特征在于,所述扫描主模块(1851)还用于:
当所述下一个PDT不是有效PDT时,获取所述PDT的基目录;
通过使所述基目录入队到目录队列中,对所述基目录调度遍历。
9.根据权利要求6所述的节点,其特征在于,所述节点还包括PDT扫描仪模块(1855),用于:
获取所述待扫描的PDT;
获取与所述扫描的PDT相关联的PDT索引节点列表;
处理所述PDT索引节点列表中的下一个索引节点;
确定所述PDT索引节点列表中的后续索引节点的可用性。
10.根据权利要求9所述的节点,其特征在于,所述PDT扫描仪模块(1855)还用于:
确定所述索引节点是文件还是目录;
当所述索引节点是目录时,将所述目录添加到文件队列中进行处理;
当所述索引节点是文件时,将所述文件添加到文件队列中进行处理。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机程序,当所述计算机程序在处理器上运行时,所述处理器执行根据权利要求1至5中任一项所述的方法。
CN202211643075.2A 2021-12-22 2022-12-20 用于快速分布式文件系统的方法、装置和系统 Pending CN117093559A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN202131060065 2021-12-22
IN202131060065 2021-12-22

Publications (1)

Publication Number Publication Date
CN117093559A true CN117093559A (zh) 2023-11-21

Family

ID=88781939

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211643075.2A Pending CN117093559A (zh) 2021-12-22 2022-12-20 用于快速分布式文件系统的方法、装置和系统

Country Status (1)

Country Link
CN (1) CN117093559A (zh)

Similar Documents

Publication Publication Date Title
US10740287B2 (en) System and method of managing service oriented data
US9922046B2 (en) Scalable distributed metadata file-system using key-value stores
US9778996B1 (en) File system version set infrastructure
US9396290B2 (en) Hybrid data management system and method for managing large, varying datasets
US8078653B1 (en) Process for fast file system crawling to support incremental file system differencing
US8799291B2 (en) Forensic index method and apparatus by distributed processing
WO2016148670A1 (en) Deduplication and garbage collection across logical databases
EP2629215A1 (en) File list generation method, system, and program, and file list generation device
JP7374232B2 (ja) コンテキスト付きのコンテンツ・アイテム共有
US11151081B1 (en) Data tiering service with cold tier indexing
US11216416B2 (en) Managing snapshotting of a dataset using an ordered set of B+ trees
CN104881466A (zh) 数据分片的处理以及垃圾文件的删除方法和装置
CN110109866B (zh) 一种文件系统目录的管理方法及设备
US9696919B1 (en) Source/copy reference tracking with block pointer sets
KR20140048396A (ko) 클라우드 스토리지 서비스의 파일 검색 시스템 및 방법, 및 파일 제어 방법
US11403024B2 (en) Efficient restoration of content
US20200349115A1 (en) File system metadata deduplication
US10146466B1 (en) Merging mapping metadata to promote reference counting efficiency
CN107408239B (zh) 通过多个邮箱在通信应用中进行海量数据管理的架构
US20220342888A1 (en) Object tagging
CN105955675A (zh) 一种用于去中心云环境的重复数据删除系统及方法
JP2020502605A (ja) プレースホルダーを介したコンテンツ管理システムの履歴コンテンツアイテムへのアクセス
EP3436973A1 (en) File system support for file-level ghosting
US10657105B2 (en) Method and computer system for sharing objects
CN117093559A (zh) 用于快速分布式文件系统的方法、装置和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination