CN117991987A - 孤儿节点处理方法、装置、操作系统、电子设备 - Google Patents

孤儿节点处理方法、装置、操作系统、电子设备 Download PDF

Info

Publication number
CN117991987A
CN117991987A CN202410138409.3A CN202410138409A CN117991987A CN 117991987 A CN117991987 A CN 117991987A CN 202410138409 A CN202410138409 A CN 202410138409A CN 117991987 A CN117991987 A CN 117991987A
Authority
CN
China
Prior art keywords
orphan
node
file system
list
nodes
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
CN202410138409.3A
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.)
Nfs China Software Co ltd
Original Assignee
Nfs China Software 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 Nfs China Software Co ltd filed Critical Nfs China Software Co ltd
Priority to CN202410138409.3A priority Critical patent/CN117991987A/zh
Publication of CN117991987A publication Critical patent/CN117991987A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0667Virtualisation aspects at data level, e.g. file, record or object virtualisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种孤儿节点处理方法、装置、操作系统、电子设备,属于计算机技术领域。该方法包括:响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;获取设备信息对应的文件系统中待筛选的孤儿节点的第一列表,其中,孤儿节点包括:与文件系统断开引用链接的索引节点;获取文件系统中正在运行的进程打开的文件对应的索引节点的第二列表;确定包含在第一列表中且未包含在第二列表中的索引节点,作为目标孤儿节点;对目标孤儿节点进行清理。本方法不需要重新启动操作系统便可以清除文件系统中的孤儿节点,提升了文件系统运行的稳定性。

Description

孤儿节点处理方法、装置、操作系统、电子设备
技术领域
本申请涉及计算机技术领域,特别是涉及孤儿节点处理方法、装置、操作系统、电子设备,以及计算机可读存储介质。
背景技术
在现有的Linux操作系统中,当使用容器时,通常采用Overlay文件系统作为容器使用的文件系统。容器的镜像通常使用层级结构,每层只保存与上层的差异之处,最上层是一个可写层,当前容器改写的内容都记录在可写层。Overlay文件系统通过将多个目录挂载到同一个根目录实现上述的层级结构。Overlay文件系统在长期运行后,有可能因为遇到容器内业务系统出错等情况,导致Overlay文件系统的可写层对应的文件中出现孤儿节点。例如,容器内的进程打开了可写层的文件并做读写等操作,在容器内进程遇到错误异常退出时,可能导致没有正确关闭可写层所对应的底层文件系统上的文件,使得文件对应的inode(索引节点)的计数无法减记,之后清理容器文件时,这个没有关闭的文件的计数不为0,不会从磁盘上删除,成为永久的孤儿文件。记录孤儿文件的索引节点则为孤儿节点。
现有技术中,Linux操作系统的指令无法准确识别系统中是否存在以及存在多少上述的孤儿节点,如果想释放这类孤儿文件占用的空间,只能通过重启系统完成,而正式运行的业务系统,通常都要避免重启操作。
发明内容
本申请实施例提供一种孤儿节点处理方法及装置、操作系统、电子设备及存储介质,可以准确检测系统中的孤儿节点,并在不重启操作系统的情况下清除检测到的孤儿节点,从而有效回收系统资源,提升系统运行的稳定性。
第一方面,本申请实施例提供了一种孤儿节点处理方法,包括:
响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;
获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;
获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
对所述目标孤儿节点进行清理。
第二方面,本申请实施例提供了一种孤儿节点处理装置,包括:
待清理磁盘的设备信息获取模块,用于响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;
第一列表获取模块,用于获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;
第二列表获取模块,用于获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
目标孤儿节点确定模块,用于确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
孤儿节点清理模块,用于对所述目标孤儿节点进行清理。
第三方面,本申请实施例提供了一种操作系统,包括:
孤儿节点清理配置模块,用于配置待清理磁盘的设备信息和孤儿节点清理条件;
孤儿节点检测模块,用于响应于满足预设孤儿节点清理条件,获取所述待清理磁盘的设备信息;
所述孤儿节点检测模块,还用于获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;以及,获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
所述孤儿节点检测模块,还用于确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
孤儿节点清理模块,用于对所述目标孤儿节点进行清理。
第四方面,本申请实施例还公开了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请实施例所述的孤儿节点处理方法。
第五方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时本申请实施例公开的孤儿节点处理方法的步骤。
本申请实施例公开的孤儿节点处理方法,通过响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点,可以准确、全面检测文件系统中的孤儿节点;对所述目标孤儿节点进行清理,无需重启操作系统,便可以清理文件系统中的孤儿节点,从而提升了文件系统运行的稳定性,又避免了重启操作系统对业务系统造成的不良影响。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1是本申请实施例公开的孤儿节点处理方法的流程示意图;
图2是本申请实施例公开的获取孤儿节点列表的步骤流程示意图;
图3是本申请实施例公开的操作系统结构示意图;
图4是本申请实施例公开的孤儿节点处理装置的结构示意图之一;
图5是本申请实施例公开的孤儿节点处理装置的结构示意图之二;
图6示意性地示出了用于执行根据本申请的方法的电子设备的框图;以及
图7示意性地示出了用于保持或者携带实现根据本申请的方法的程序代码的存储单元。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了使本申请公开的孤儿节点处理方法更清楚,首先对孤儿节点的产生以及现有技术中对孤儿节点的处理方法进行详细描述。
现有技术中,在使用容器时,通常采用overlay文件系统作为容器使用的文件系统。容器的镜像通常使用层级结构,每层只保存与上层的差异之处,最上层是一个可写层,当前容器改写的内容都记录在可写层。使用这种结构,在有多个容器使用时,可以共用相同部分,实现灵活的磁盘空间使用。
Overlay文件系统就是联合文件系统(UnionFS)的一种实现,通过将多个目录挂载到同一个根目录实现上述的层级结构。而目前Overlay文件系统是容器技术首选的存储驱动。
在Overlay文件系统中,储存文件元信息的区域就叫做inode,即索引节点,每一个文件都有对应的inode,inode里面包含了与该文件有关的一些信息。Overlay文件系统在长期运行后,有可能因为遇到容器内业务系统出错等情况,导致Overlay文件系统可写层对应的文件inode节点中出现孤儿节点。通常出现孤儿节点是因为对进程打开的文件进行删除操作,此时文件会从目录中移除变成不可见,文件对应的引用链接i_nl ink计数清0,但文件的使用计数i_count不为0,实际还保存在磁盘上,直到使用该文件的进程退出时i_count清0,文件系统自动释放文件。
但Overlay文件系统的情况有些不同。当容器内的进程打开了可写层的文件并做读写等操作,在容器内进程遇到错误异常退出时,可能导致没有正确关闭可写层所对应的底层文件系统上的文件,使得文件对应的inode的i_count计数无法减记数,之后清理容器文件时,这个没有关闭的文件的i_count计数不为0,不会从磁盘上删除,文件对应的inode成为永久的孤儿节点,相对应的文件则对系统不可见但依然占用存储空间。
当系统出现孤儿节点时,使用操作系统中用于检查文件系统磁盘空间占用的指令查看的磁盘使用量,远远大于使用指令查看目录或文件所占用磁盘空间的大小并进行统计后得到的文件使用空间。
现有技术中,文件系统仅提供了查看正在运行的进程打开的文件的接口,可以通过该接口查询到正在运行的进程打开的文件的inode,但是对于已经退出的进程曾经使用的孤儿节点是无法查询到的,并且文件系统无法直接操作孤儿节点,这就导致了孤儿节点对应的文件变成了真正不可见的文件。对于孤儿节点对应的文件,现有技术中,只能通过重新启动操作系统的方式才能释放孤儿节点。然而,很多大型业务系统在启动之后需要连续运行,不允许重启,这就导致了文件系统中的孤儿节点越来越多,严重影响业务系统的稳定性。
本申请实施例公开的一种孤儿节点处理方法,用于在不重启操作系统的情况下,清理文件系统中的孤儿节点,以提升业务系统的稳定性。
如图1所示,本申请实施例公开的一种孤儿节点处理方法包括:步骤101至步骤105。
步骤101,响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息。
可选的,所述预设孤儿节点清理条件包括但不限于:当前时间匹配预设时间点、当前时间匹配预设时间间隔。
可选的,所述预设孤儿节点清理条件可以根据业务系统的需要进行配置。
可选的,所述待清理磁盘可以为业务系统的指定磁盘,所述待清理磁盘已注册到文件系统中。所述设备信息可以为待清理磁盘上的磁盘分区编号或名称等唯一标识某块磁盘上不同磁盘分区的符号。例如,对于待清理磁盘sda,如果待清理磁盘sda被划分为两个磁盘分区,则可以将两个磁盘分区分别命名为:sda1、sda2,相应的,所述设备信息可以分别为sda1、sda2。
以某个业务系统预先设置每周指定时间对指定磁盘进行孤儿节点清理,以释放索引节点为例,当业务系统的当前时间满足预先设置的进行孤儿节点清理的时间时,业务系统便可以启用执行本申请实施例公开的孤儿节点处理方法,对指定磁盘上的文件系统执行孤儿节点清理操作。
步骤102,获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点。
接下来,进一步获取待清理的磁盘设备中记录的所有孤儿节点的列表。文件系统是操作系统的一部分,用于管理文件。在文件系统中,对于每个文件都对应且唯一对应一个inode(索引节点),一旦某个索引节点成为了孤儿节点,即文件系统断开了与该索引节点的引用链接,文件系统将无法再访问该inode,也无法访问该inode记录的文件。
本申请实施例中,基于文件系统的结构和原理,借助文件系统调试工具(如debugfs)和文件系统信息管理工具(如xfs_admin)等,实现对指定磁盘上inode的解析和扫描,可以发现所有的孤儿节点。
可选的,如图2所示,获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表,包括:子步骤1021至步骤1023。
子步骤1021,获取所述设备信息对应的文件系统的类型。
如前文描述,所述设备信息是唯一标识磁盘的磁盘分区的信息。可选的,以所述设备信息作为输入参数,通过调用操作系统提供的获取磁盘分区属性信息的指令,获取指定磁盘分区的属性信息。所述属性信息中通常包括:磁盘存储空间大小、已用存储空间、剩余存储空间、文件系统类型等信息。通过获取的设备信息对应的磁盘的属性信息,便可以进一步从获取的属性信息中读取该磁盘的文件系统类型,从而得到所述设备信息对应的文件系统类型。
在本申请的另一些实施例中,还可以采用现有技术中的其他方法获取所述设备信息对应的文件系统的类型,本申请实施例中不再一一列举。本申请对获取所述设备信息对应的文件系统的类型的具体实施方式不做限制。
对于不同的业务系统的操作系统,支持的文件系统不尽相同。以l inux操作系统为例,支持的文件系统包括但不限于:ext2文件系统(second extended fi lesystem,第二代扩展文件系统)、ext3文件系统(Third extended fi lesystem,第三代扩展文件系统)、ext4文件系统(Fourth extended fi lesystem,第四代扩展文件系统),以及,XFS系统(日志文件系统)。
对于不同类型的文件系统,其存储和管理文件的方式不同,因此,需要采用与文件系统类型匹配的方法获取文件系统中的孤儿节点。
子步骤1022,响应于所述类型匹配第一预设文件系统类型,遍历所述设备信息对应的文件系统中的孤儿节点的链表,获取所述文件系统中待筛选的孤儿节点的第一列表。
在一些可选的实施中,所述第一预设文件系统类型包括以下任意一种:ext2文件系统、ext3文件系统、ext4文件系统。在第一预设文件系统类型的文件系统中,孤儿节点的信息是以链表的形式存储的。
可选的,遍历所述设备信息对应的文件系统中的孤儿节点的链表,获取所述文件系统中待筛选的孤儿节点的第一列表,包括:基于所述设备信息对应的设备路径,获取所述文件系统的描述信息;获取所述描述信息中包括的首个孤儿节点的编号,作为当前孤儿节点的编号;将所述当前孤儿节点的编号,添加至所述第一列表中;基于所述当前孤儿节点的编号,获取所述当前孤儿节点的节点信息;根据所述节点信息中指向下一个孤儿节点的字段的取值,更新当前孤儿节点的编号,跳转至所述将所述当前孤儿节点的编号,添加至所述第一列表中的步骤,直至所述节点信息中指向下一个孤儿节点的字段的取值为无效编号。至此,遍历完所述文件系统中的全部孤儿节点。
例如,可以以所述设备信息对应的设备路径作为参数,调用现有技术中的文件系统信息读取和解析工具,获取所述文件系统中的描述信息。dumpe2fs(dump ext2/3/4filesystem)工具封装了解析文件系统头部信息的功能,可以将特定文件系统的信息导出或“转储”到终端中。以所述设备信息对应的设备路径表示为“dev/sda1”为例,可以通过执行指令“dumpe2fs/dev/sda1”,解析磁盘分区sda1对应的文件系统的描述信息并输出。在输出的描述信息中,包含首个孤儿节点的编号。
在所述第一预设文件系统类型的文件系统中,孤儿节点的信息是以链表的形式存储的,即首个孤儿节点的节点信息中会存储下一个孤儿节点的编号,在下一个孤儿节点的节点信息中会存储再下一个孤儿节点的编号,依此类推。最后一个孤儿节点的节点信息中指向下一个孤儿节点的字段为无效编号,例如为空值。因此,可以通过遍历存储孤儿节点的链表,获取当前磁盘分区上文件系统中的所有孤儿节点。
在一些可选的实施例中,遍历孤儿节点的链表时,首先初始化第一列表为空,并初始化当前孤儿节点为空,之后,遍历链表,依次将链表中的索引节点作为当前孤儿节点,读取节点信息,并获取下一个孤儿节点的编号。
例如,首先将文件系统的描述信息包括的首个孤儿节点的编号,作为当前孤儿节点的编号,添加至所述第一列表中。基于所述当前孤儿节点(即首个孤儿节点)的编号,通过debugfs工具提供的接口查询当前孤儿节点的inode信息,即索引节点的节点信息。具体举例而言,采用指令“debugfs‘stat<inode编号>’/dev/sda1”,可以显示出指令参数“inode编号”所对应的索引节点的节点信息,其中,“/dev/sda1”表示当前查询的磁盘分区的路径,即设备路径;“<inode编号>”表示inode编号的取值。在获取的节点信息中,不仅包含该索引节点自身的信息,如索引节点的编号、存储的文件数据等,还包含用于存储下一个孤儿节点的编号的字段,例如字段“dt ime”。进一步的,通过读取字段“dt ime”的取值,可以获取下一个孤儿节点,即第二个孤儿节点的编号,并将第二个孤儿节点的编号,添加至所述第一列表。至此,完成链表中第一个链表结构的遍历。
接下来,使用第二个孤儿节点的编号对当前孤儿节点的编号赋值,以第二个孤儿节点作为当前孤儿节点,更新当前孤儿节点,并对更新后的当前孤儿节点执行第二个链表结构的遍历。例如,采用上述方法获取第二个孤儿节点的节点信息,并进一步读取第二个孤儿节点的节点信息中字段“dt ime”的取值,得到第三个孤儿节点的编号,并将第三个孤儿节点的编号,添加至所述第一列表。至此,完成链表中第二个链表结构的遍历。
在遍历链表的过程中,还需要进一步判断节点信息中字段“dt ime”的取值是否为孤儿节点的编号,如果是,则将当前孤儿节点的节点信息中字段“dt ime”的取值作为下一个孤儿节点的编号,如果不是,则可以认为当前孤儿节点为当前查询的磁盘分区上文件系统中的最后一个孤儿节点,至此,完成链表的遍历。完成链表遍历后,第一列表中已经添加的所有孤儿节点的编号,即为当前查询的磁盘分区上文件系统中所有的孤儿节点。可选的,当字段“dt ime”的取值不符合操作系统的文件节点编号规范时,如“dt ime”的取值为空或数字以外的字符,则可以认为字段“dt ime”的取值不是孤儿节点的编号;当字段“dt ime”的取值符合操作系统的文件节点编号规范时,如“dt ime”的取值为6000,则可以认为字段“dt ime”的取值是孤儿节点的编号。
在一些可选的实施例中,将孤儿节点的编号添加至第一列表中时,还可以关联添加当前查询的磁盘分区的设备号,用于后续孤儿节点清理操作。其中,所述设备号可以通过以当前查询的磁盘分区的设备路径作为参数,执行预设系统指令得到;所述设备号包括:主设备号和从设备号,主设备号和从设备号共同唯一确定一个磁盘分区。
获取当前查询的磁盘分区的设备号的具体实施方式为现有技术,本申请实施例中不再赘述。
子步骤1023,响应于所述类型匹配第二预设文件系统类型,基于所述设备信息对应的文件系统中的分配组和索引节点信息,获取所述文件系统中的待筛选的孤儿节点的第一列表。
其中,在所述第二预设文件系统类型的文件系统中,文件系统被分割成若干块,通过分配组进行管理。相应的,孤儿节点的信息通过分配组进行管理。
在一些可选的实施中,所述第二预设文件系统类型包括:XFS系统。在第二预设文件系统类型的文件系统(以XFS系统为例)中,文件系统被分割成大小相等的块,通过分配组(Al locat ion Groups,简称“AG”)进行管理。XFS文件系统内部被分为多个分配组,它们是文件系统中的等长线性存储区。每个分配组各自管理自身的inode(即索引节点)和剩余空间。文件和文件夹可以跨越分配组。每个分配组都被认为是一个单独的文件系统去维护自己使用的空间。
每个分配组中包括多个区,不同区用于存放不同信息数据。每个区又进一步包括一个或多个块(记为“block”)。例如,第一个区(共1个block),可以是全局信息描述区,例如可以为超级块(记为“superblock”),用于描述文件系统的空闲空间、索引节点信息等。又例如,第二个区(共3个block),可以是B+树根节点描述区,包括:inode对应的B+树的根节点、管理free space对应的两颗B+树的根节点。再例如,第四个区是存放inode树状结构的区域。进一步的,在superblock超级块中,可以记录以下信息:文件系统中一个分配组包含的块个数sb_agblocks、整个文件系统中分配组的个数sb_agcount。分配组的数据结构,以及存储内容参见现有技术,此处不再赘述。
因此,需要分别查询每个分配组中的孤儿节点,之后,再对所有分配组中的孤儿节点进行整合处理,以得到指定磁盘分区上文件系统中的全部孤儿节点。
可选的,所述基于所述设备信息对应的文件系统中的分配组和索引节点信息,获取所述文件系统中的待筛选的孤儿节点的第一列表,包括:所述基于所述设备信息对应的设备路径,获取所述文件系统中分配组的数量、各分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移;根据所述分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移,获取每个所述分配组中的全部孤儿节点;将全部所述分配组中的所述孤儿节点,添加至所述文件系统中的待筛选的孤儿节点的第一列表中。
在一些可选的实施例中,可以使用现有技术中的文件系统信息管理工具如xfs_info工具和xfs_db,获取指定磁盘分区上文件系统中的分配组的数量、存储位置等信息。具体举例而言,以当前查询的磁盘分区的设备信息为sda2,设备路径为“/dev/sda2”举例,可以执行指令“xfs_info/dev/sda2”查询磁盘分区/dev/sda2的文件系统信息;基于所述文件系统信息,如前述每个分配组的超级块,可以进一步解析得到磁盘分区/dev/sda2中的分配组的数量。根据当前查询的磁盘分区中分配组的数量,当前磁盘分区的大小,可以得到每个分配组的大小。根据每个分配组的大小可以确定当前磁盘分区中每个分配组的存储位置。
获取所述文件系统中分配组的信息的具体实施方式参见现有技术,此处不再赘述。
索引节点在当前分配组中的块偏移和索引节点在相应块内的块内偏移记载在当前分配组的超级块中,可以通过读取超级块的信息得到。例如,可以执行指令“xfs_db-r-c'sb'-c'p'/dev/sda2”,以调用xfs_db工具,读取磁盘分区/dev/sda2中每个分配组的超级块;之后,从分配组的超级块中解析得到sb_agblklog和sb_inopblog字段的数值,其中,sb_agblklog字段表示索引节点在当前分配组中的块偏移,sb_inopblog字段表示索引节点在相应块内的偏移。
接下来,检查每一个分配组,获取所有分配组管理的孤儿节点。
可选的,根据所述分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移,获取每个所述分配组中的全部孤儿节点,包括:分别以每个所述分配组作为当前分配组,执行以下子步骤S1至子步骤S5描述的孤儿节点查找操作,得到所述当前分配组中的所有孤儿节点。
子步骤S1,获取当前分配组的索引节点信息。
子步骤S2,根据获取的所述索引节点信息中的孤儿节点编号字段,获取所述当前分配组中至少一个第一孤儿节点相对于所述当前分配组的编号。
例如,对于每个分配组,可以执行指令“xfs_db-r-c'agi 0'-c'p'/dev/sda2”,获取该分配组的索引节点信息,其中,“agi 0”表示分配组的序号,“/dev/sda2”表示当前查询的磁盘分区的路径。其中所述索引节点信息以B+树的形式存储。索引节点信息的具体格式和内容为现有技术,此处不再赘述。其中,所述索引节点信息中包括:孤儿节点编号字段,记为“unl inked”字段,该字段中可能包含多个数字,每个数字分别表示一个孤儿节点在当前分配组内的编号。
子步骤S3,根据所述当前分配组的序号、所述至少一个第一孤儿节点相对于所述当前分配组的编号、当前分配组对应的索引节点所在块的偏移、当前分配组对应的索引节点的块内偏移,得到所述至少一个孤儿节点的相对于所述设备路径的编号。
在XFS文件系统中,索引节点有个唯一表明身份的编号,可以采用相对格式(32位)或绝对格式(64位)表示。在操作系统对索引节点进行操作时,需要获取采用绝对格式表示的编号,即通过将分配组(AG)序号、索引节点在相应分配组中的所在块(block)的偏移、索引节点在相应块内的块内偏移顺序拼接,得到表示每个索引节点在磁盘分区中的编号。相应的,对于每个第一孤儿节点,可以根据该第一孤儿节点所在分配组的分配组序号、该第一孤儿节点在相应分配组中的所在块的偏移(如块序号)和该第一孤儿节点在相应块内的块内偏移(如相对于该分配组的编号),确定该第一孤儿节点相对于所述设备路径的编号。
子步骤S4,针对所述至少一个第一孤儿节点,分别遍历每个第一孤儿节点所属索引节点树中所述第一孤儿节点对应的父节点的子节点,得到每个所述第一孤儿节点对应的全部第二孤儿节点。
针对所述至少一个第一孤儿节点,分别以每个第一孤儿节点作为当前父节点,遍历该第一孤儿节点所属索引节点信息树状结构(即为索引节点树)中该当前父节点(即为第一孤儿节点)的子节点,得到每个第一孤儿节点对应的孤儿节点,记为“第二孤儿节点”。在一些可选的实施例中,可以通过执行指令“xfs_db-r-c'inode编号'-c'p'/dev/sda2”获取索引节点树中各索引节点的索引节点信息,该指令参数中,“inode编号”是表示索引节点的相对于设备路径的编号。然后,进一步检查获取的索引节点信息中的指定字段,如next_unlinked字段指示的索引节点,参照子步骤S2和子步骤S3中的具体实施方式,查询索引节点信息树状结构中记录的孤儿节点,直至遍历完每个第一孤儿节点的全部叶子节点。
子步骤S5,将所述至少一个第一孤儿节点和每个所述第一孤儿节点对应的全部第二孤儿节点,全部作为所述当前分配组中的孤儿节点。
至此,完成一个分配组中孤儿节点的获取操作。
按照上述方法,分别获取每个分配组中的孤儿节点,并将当前磁盘分区中所有分配组中的孤儿节点添加至第一列表中。
步骤103,获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号。
在一些可选的实施例中,所述获取所述文件系统的第二列表,包括:遍历所述文件系统的指定目录(如“/proc”目录),获取所述文件系统中每个正在运行的进程打开的文件的文件描述符;基于所述文件描述符分别调用所述文件系统的预设系统接口,得到每个所述文件描述符对应的设备号和索引节点的编号;将所有所述文件描述符对应的所述索引节点的编号和设备号添加至第二列表中,得到包括所述文件系统中所有正在运行的进程打开的文件分别对应的索引节点的编号的第二列表。
在另一些可选的实施例中,所述获取所述文件系统的第二列表,包括:通过l sof指令获取所述文件系统中正在运行的进程打开的所有文件,并获取每个正在运行的进程打开的文件的索引节点的编号;将所有打开的所述文件的索引节点的编号的列表,作为包括所述文件系统中所有正在运行的进程打开的文件分别对应的索引节点的编号的第二列表。
本申请的实施例中,上述获取所述文件系统中的第二列表的具体实施方式为现有技术,此处不再一一列举。
步骤104,确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点。
接下来,对第一列表的孤儿节点进行筛选,去除包含在所述第二列表中的索引节点,将剩余的孤儿节点作为目标孤儿节点。
通过对查询磁盘分区中存储的孤儿节点相关数据得到的孤儿节点进一步进行筛选,可以避免将正在运行的进程使用的文件清除,进一步保障业务系统运行的稳定性。
步骤105,对所述目标孤儿节点进行清理。
在文件系统中(如l inux或unix操作系统的文件系统),每一个文件在文件系统中对应一个索引节点,记为“inode”,索引节点用于存储该文件的原信息。清理孤儿节点,可以释放文件系统中无效占用的存储空间。
对于确定没有进程正在使用的孤儿节点,由于这些目标孤儿节点是文件系统无法访问的,因此,本申请的实施例中,通过设计孤儿节点清理逻辑,调用操作系统的接口,对所述目标孤儿节点进行清理。
在一些可选的实施例中,所述对所述目标孤儿节点进行清理,包括:获取操作系统中缓存的目标文件系统的超级块,其中,所述目标文件系统为与所述设备信息对应的设备号对应的文件系统;根据所述超级块获取所述目标文件系统中的索引节点的列表;获取所述列表中与所述目标孤儿节点对应的索引节点,作为目标索引节点;基于所述目标索引节点,调用文件系统的预设内部接口,释放所述目标索引节点对应的孤儿节点。
获取所述设备信息对应的设备号的具体实施方式,参见现有技术和前文相关描述,此处不再赘述。
操作系统内核在内存中保存了当前打开的每一个文件系统的超级块,每个超级块的内存数据结构中保存着底层存储设备的主设备号(即major)、次设备号(即manor)。通过枚举每个文件系统结构,检查文件系统结构中的设备号与所述设备信息对应的设备号是否匹配,可以找到当前设备信息对应的文件系统的超级块。
在超级块中存储有索引节点的列表信息的字段s_inodes。磁盘分区上的文件系统中所有的索引节点的编号形成一个列表,s_inodes字段用于存放这个索引节点列表的表头信息。根据s_inodes字段的取值,获取索引节点列表的访问地址,之后,遍历该索引节点列表,获取目标文件系统中的每个索引节点的编号。进一步的,将每个目标孤儿节点的编号分别与目标文件系统中存储的索引节点列表中每个索引节点的编号进行比对,确定与目标孤儿节点的编号一致,记为目标编号。之后,将该目标编号所属索引节点,作为目标索引节点。然后,以目标索引节点的编号,作为文件系统的内部接口Iput()的输入参数,调用Iput()。Iput()将释放输入的编号对应的索引节点,从而清除对应的目标孤儿节点。
本申请的一些实施例中,在所述基于所述设备信息对应的设备号,获取所述文件系统的超级块,包括:检查所述设备信息对应的设备号是否存在;响应于所述设备信息对应的设备号存在,基于所述设备信息对应的设备号,获取所述文件系统的超级块。在读取超级块之前首先判断设备信息对应的设备号是否存储在,只有在设备号存在的情况下,才进一步读取文件系统的超级块,否则,不读取文件系统的超级块,以保障操作系统的稳定性。
本申请实施例中公开的孤儿节点处理方法,通过响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;对所述目标孤儿节点进行清理,无需重启操作系统,便可以清理文件系统中的孤儿节点,从而提升了文件系统运行的稳定性,又避免了重启操作系统对业务系统造成的不良影响。
基于前述实施例,本申请实施例中还公开了一种操作系统,如图3所示,所述操作系统30包括:
孤儿节点清理配置模块310,用于配置待清理磁盘的设备信息和孤儿节点清理条件;
孤儿节点检测模块320,用于响应于满足预设孤儿节点清理条件,获取所述待清理磁盘的设备信息;
所述孤儿节点检测模块320,还用于获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;以及,获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
所述孤儿节点检测模块320,还用于确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
孤儿节点清理模块330,用于对所述目标孤儿节点进行清理。
在一些可选的实施例中,可以通过操作系统的配置界面配置的待清理磁盘的设备信息和孤儿节点清理条件。其中,所述配置界面可以为命令行界面,也可以为图形用户界面。所述设备信息可以为磁盘分区的分区名、盘符等唯一标识磁盘分区的信息。所述孤儿节点清理条件参见前文实施例中所述,此处不再赘述。
所述孤儿节点检测模块320的具体实施方式参见前文实施例中相关步骤101、步骤102、步骤103和步骤104的描述,此处不再赘述。
所述孤儿节点清理模块330的具体实施方式参见前文实施例中相关步骤105的描述,此处不再赘述。
本申请实施例公开的操作系统通过配置待清理磁盘的设备信息和孤儿节点清理条件,并在满足预设孤儿节点清理条件时,获取所述待清理磁盘的设备信息;之后,获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表,其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;以及,获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;然后,确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点,并对所述目标孤儿节点进行清理,无需重启,便可以清理文件系统中的孤儿节点,从而提升了文件系统运行的稳定性,又避免了系统重启对业务系统造成的不良影响。
本申请实施例还公开了一种孤儿节点处理装置,如图4所示,所述装置包括:
待清理磁盘的设备信息获取模块410,用于响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;
第一列表获取模块420,用于获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;
第二列表获取模块430,用于获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
目标孤儿节点确定模块440,用于确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
孤儿节点清理模块450,用于对所述目标孤儿节点进行清理。
可选的,如图5所示,所述第一列表获取模块420,进一步包括:
文件系统类型获取子模块4201,用于获取所述设备信息对应的文件系统的类型;
第一列表第一获取子模块4202,用于响应于所述类型匹配第一预设文件系统类型,遍历所述设备信息对应的文件系统中的孤儿节点的链表,获取所述文件系统中待筛选的孤儿节点的第一列表;
第一列表第二获取子模块4203,用于响应于所述类型匹配第二预设文件系统类型,基于所述设备信息对应的文件系统中的分配组和索引节点信息,获取所述文件系统中的待筛选的孤儿节点的第一列表。
可选的,所述遍历所述设备信息对应的文件系统中的孤儿节点的链表,获取所述文件系统中待筛选的孤儿节点的第一列表,包括:
基于所述设备信息对应的设备路径,获取所述文件系统的描述信息;
获取所述描述信息中包括的首个孤儿节点的编号,作为当前孤儿节点的编号;
将所述当前孤儿节点的编号,添加至所述第一列表中;
基于所述当前孤儿节点的编号,获取所述当前孤儿节点的节点信息;
根据所述节点信息中指向下一个孤儿节点的字段的取值,更新当前孤儿节点的编号,跳转至所述将所述当前孤儿节点的编号,添加至所述第一列表中的步骤,直至所述节点信息中指向下一个孤儿节点的字段的取值为无效编号。
可选的,所述基于所述设备信息对应的文件系统中的分配组和索引节点信息,获取所述文件系统中的待筛选的孤儿节点的第一列表,包括:
基于所述设备信息对应的设备路径,获取所述文件系统中分配组的数量、各分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移;
根据所述分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移,获取每个所述分配组中的全部孤儿节点;
将全部所述分配组中的所述孤儿节点,添加至所述文件系统中的待筛选的孤儿节点的第一列表中。
可选的,所述根据所述分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移,获取每个所述分配组中的全部孤儿节点,包括:
分别以每个所述分配组作为当前分配组,执行孤儿节点查找操作,得到所述当前分配组中的所有孤儿节点,其中,所述孤儿节点查找操作包括:
获取当前分配组的索引节点信息;
根据获取的所述索引节点信息中的孤儿节点编号字段,获取所述当前分配组中至少一个第一孤儿节点相对于所述当前分配组的编号;
根据所述当前分配组的序号、所述至少一个第一孤儿节点相对于所述当前分配组的编号、当前分配组对应的索引节点所在块的偏移、当前分配组对应的索引节点的块内偏移,得到所述至少一个孤儿节点的相对于所述设备路径的编号;
针对所述至少一个第一孤儿节点,分别遍历每个第一孤儿节点所属索引节点树中所述第一孤儿节点对应的父节点的子节点,得到每个所述第一孤儿节点对应的全部第二孤儿节点;
将所述至少一个第一孤儿节点和每个所述第一孤儿节点对应的全部第二孤儿节点,全部作为所述当前分配组中的孤儿节点。
可选的,所述孤儿节点清理模块450,进一步用于:
获取操作系统中缓存的目标文件系统的超级块,其中,所述目标文件系统为与所述设备信息对应的设备号对应的文件系统;
根据所述超级块获取所述目标文件系统中的索引节点的列表;
获取所述列表中与所述目标孤儿节点对应的索引节点,作为目标索引节点;
基于所述目标索引节点,调用文件系统的预设内部接口,释放所述目标索引节点对应的孤儿节点。
本申请实施例公开的孤儿节点处理装置,用于实现本申请实施例中所述的孤儿节点处理方法,装置的各模块的具体实施方式不再赘述,可参见方法实施例相应步骤的具体实施方式。
本申请实施例公开的孤儿节点处理装置,通过响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表,其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;对所述目标孤儿节点进行清理,无需重启操作系统,便可以清理文件系统中的孤儿节点,从而提升了文件系统运行的稳定性,又避免了重启操作系统对业务系统造成的不良影响。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请提供的一种孤儿节点处理方法、装置,及操作系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其一种核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本申请实施例的电子设备中的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图6示出了可以实现根据本申请的方法的电子设备。所述电子设备可以为PC机、移动终端、个人数字助理、平板电脑等。该电子设备传统上包括处理器610和存储器620及存储在所述存储器620上并可在处理器610上运行的程序代码630,所述处理器610执行所述程序代码630时实现上述实施例中所述的方法。所述存储器620可以为计算机程序产品或者计算机可读介质。存储器620可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器620具有用于执行上述方法中的任何方法步骤的计算机程序的程序代码630的存储空间6201。例如,用于程序代码630的存储空间6201可以包括分别用于实现上面的方法中的各种步骤的各个计算机程序。所述程序代码630为计算机可读代码。这些计算机程序可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。所述计算机程序包括计算机可读代码,当所述计算机可读代码在电子设备上运行时,导致所述电子设备执行根据上述实施例的方法。
本申请实施例还公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例所述的孤儿节点处理方法的步骤。
这样的计算机程序产品可以为计算机可读存储介质,该计算机可读存储介质可以具有与图6所示的电子设备中的存储器620类似布置的存储段、存储空间等。程序代码可以例如以适当形式进行压缩存储在所述计算机可读存储介质中。所述计算机可读存储介质通常为如参考图7所述的便携式或者固定存储单元。通常,存储单元包括计算机可读代码630’,所述计算机可读代码630’为由处理器读取的代码,这些代码被处理器执行时,实现上面所描述的方法中的各个步骤。
本文中所称的“一个实施例”、“实施例”或者“一个或者多个实施例”意味着,结合实施例描述的特定特征、结构或者特性包括在本申请的至少一个实施例中。此外,请注意,这里“在一个实施例中”的词语例子不一定全指同一个实施例。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本申请可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种孤儿节点处理方法,其特征在于,所述方法包括:
响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;
获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;
获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
对所述目标孤儿节点进行清理。
2.根据权利要求1所述的方法,其特征在于,所述获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表,包括:
获取所述设备信息对应的文件系统的类型;
响应于所述类型匹配第一预设文件系统类型,遍历所述设备信息对应的文件系统中的孤儿节点的链表,获取所述文件系统中待筛选的孤儿节点的第一列表;
响应于所述类型匹配第二预设文件系统类型,基于所述设备信息对应的文件系统中的分配组和索引节点信息,获取所述文件系统中的待筛选的孤儿节点的第一列表。
3.根据权利要求2所述的方法,其特征在于,所述遍历所述设备信息对应的文件系统中的孤儿节点的链表,获取所述文件系统中待筛选的孤儿节点的第一列表,包括:
基于所述设备信息对应的设备路径,获取所述文件系统的描述信息;
获取所述描述信息中包括的首个孤儿节点的编号,作为当前孤儿节点的编号;
将所述当前孤儿节点的编号,添加至所述第一列表中;
基于所述当前孤儿节点的编号,获取所述当前孤儿节点的节点信息;
根据所述节点信息中指向下一个孤儿节点的字段的取值,更新当前孤儿节点的编号,跳转至所述将所述当前孤儿节点的编号,添加至所述第一列表中的步骤,直至所述节点信息中指向下一个孤儿节点的字段的取值为无效编号。
4.根据权利要求2所述的方法,其特征在于,所述基于所述设备信息对应的文件系统中的分配组和索引节点信息,获取所述文件系统中的待筛选的孤儿节点的第一列表,包括:
基于所述设备信息对应的设备路径,获取所述文件系统中分配组的数量、各分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移;
根据所述分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移,获取每个所述分配组中的全部孤儿节点;
将全部所述分配组中的所述孤儿节点,添加至所述文件系统中的待筛选的孤儿节点的第一列表中。
5.根据权利要求4所述的方法,其特征在于,所述根据所述分配组对应的分配组内索引节点所在块的偏移和索引节点的块内偏移,获取每个所述分配组中的全部孤儿节点,包括:
分别以每个所述分配组作为当前分配组,执行孤儿节点查找操作,得到所述当前分配组中的所有孤儿节点,其中,所述孤儿节点查找操作包括:
获取当前分配组的索引节点信息;
根据获取的所述索引节点信息中的孤儿节点编号字段,获取所述当前分配组中至少一个第一孤儿节点相对于所述当前分配组的编号;
根据所述当前分配组的序号、所述至少一个第一孤儿节点相对于所述当前分配组的编号、当前分配组对应的索引节点所在块的偏移、当前分配组对应的索引节点的块内偏移,得到所述至少一个孤儿节点的相对于所述设备路径的编号;
针对所述至少一个第一孤儿节点,分别遍历每个第一孤儿节点所属索引节点树中所述第一孤儿节点对应的父节点的子节点,得到每个所述第一孤儿节点对应的全部第二孤儿节点;
将所述至少一个第一孤儿节点和每个所述第一孤儿节点对应的全部第二孤儿节点,全部作为所述当前分配组中的孤儿节点。
6.根据权利要求1所述的方法,其特征在于,所述对所述目标孤儿节点进行清理,包括:
获取操作系统中缓存的目标文件系统的超级块,其中,所述目标文件系统为与所述设备信息对应的设备号对应的文件系统;
根据所述超级块获取所述目标文件系统中的索引节点的列表;
获取所述列表中与所述目标孤儿节点对应的索引节点,作为目标索引节点;
基于所述目标索引节点,调用文件系统的预设内部接口,释放所述目标索引节点对应的孤儿节点。
7.一种孤儿节点处理装置,其特征在于,所述装置包括:
待清理磁盘的设备信息获取模块,用于响应于满足预设孤儿节点清理条件,获取待清理磁盘的设备信息;
第一列表获取模块,用于获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;
第二列表获取模块,用于获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
目标孤儿节点确定模块,用于确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
孤儿节点清理模块,用于对所述目标孤儿节点进行清理。
8.一种操作系统,其特征在于,包括:
孤儿节点清理配置模块,用于配置待清理磁盘的设备信息和孤儿节点清理条件;
孤儿节点检测模块,用于响应于满足预设孤儿节点清理条件,获取所述待清理磁盘的设备信息;
所述孤儿节点检测模块,还用于获取所述设备信息对应的文件系统中待筛选的孤儿节点的第一列表;其中,所述孤儿节点包括:与所述文件系统断开引用链接的索引节点;以及,获取所述文件系统的第二列表,所述第二列表中包括所有正在运行的进程打开的文件分别对应的索引节点的编号;
所述孤儿节点检测模块,还用于确定包含在所述第一列表中且未包含在所述第二列表中的所述索引节点,作为目标孤儿节点;
孤儿节点清理模块,用于对所述目标孤儿节点进行清理。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的程序代码,其特征在于,所述处理器执行所述程序代码时实现权利要求1至6任意一项所述的孤儿节点处理方法。
10.一种计算机可读存储介质,其上存储有程序代码,其特征在于,该程序代码被处理器执行时实现权利要求1至6任意一项所述的孤儿节点处理方法的步骤。
CN202410138409.3A 2024-01-31 2024-01-31 孤儿节点处理方法、装置、操作系统、电子设备 Pending CN117991987A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410138409.3A CN117991987A (zh) 2024-01-31 2024-01-31 孤儿节点处理方法、装置、操作系统、电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410138409.3A CN117991987A (zh) 2024-01-31 2024-01-31 孤儿节点处理方法、装置、操作系统、电子设备

Publications (1)

Publication Number Publication Date
CN117991987A true CN117991987A (zh) 2024-05-07

Family

ID=90886852

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410138409.3A Pending CN117991987A (zh) 2024-01-31 2024-01-31 孤儿节点处理方法、装置、操作系统、电子设备

Country Status (1)

Country Link
CN (1) CN117991987A (zh)

Similar Documents

Publication Publication Date Title
US8600939B2 (en) Writable snapshots
CA2137492C (en) System for and method of providing delta-versioning of the contents of pcte file objects
WO2020211236A1 (zh) 基于b+树的读写冲突解决方法、装置及存储介质
US10621211B2 (en) Language tag management on international data storage
US7853930B2 (en) Annotating graphs to allow quick loading and analysis of very large graphs
CN109522290B (zh) 一种HBase数据块恢复及数据记录提取方法
US20060059171A1 (en) System and method for chunk-based indexing of file system content
JP2007264768A (ja) システム開発支援プログラム、システム開発支援装置およびシステム開発支援方法
US20080109599A1 (en) Apparatus, system, and method for automating vtoc driven data set maintenance
US8407196B1 (en) Object-oriented database for file system emulator
CN113792026B (zh) 数据库脚本的部署方法、装置及计算机可读存储介质
US9697239B1 (en) Token-based database system and method of interfacing with the token-based database system
JP2003323326A (ja) 情報管理装置
CN109947730A (zh) 元数据恢复方法、装置、分布式文件系统及可读存储介质
CN113448946A (zh) 数据迁移方法及装置、电子设备
JP2005044011A (ja) ソフトウェアパッケージ管理方法
WO2017167543A1 (en) Multiform persistence abstraction
CN117991987A (zh) 孤儿节点处理方法、装置、操作系统、电子设备
CN114816470A (zh) 元数据库的管理方法、装置、电子设备和介质
CN111209075B (zh) 多语言界面维护方法、系统、存储介质和智能设备
CN111736848B (zh) 包冲突定位方法、装置、电子设备及可读存储介质
CN110764777B (zh) 一种elf文件生成方法、elf文件、设备及存储介质
CN113780950A (zh) 数据处理方法、装置、服务器和可读存储介质
CN111435342A (zh) 海报的更新方法、更新系统以及管理系统
CN111273940A (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