CN113986838B - 基于文件系统的海量小文件处理方法、系统及存储介质 - Google Patents
基于文件系统的海量小文件处理方法、系统及存储介质 Download PDFInfo
- Publication number
- CN113986838B CN113986838B CN202111616717.5A CN202111616717A CN113986838B CN 113986838 B CN113986838 B CN 113986838B CN 202111616717 A CN202111616717 A CN 202111616717A CN 113986838 B CN113986838 B CN 113986838B
- Authority
- CN
- China
- Prior art keywords
- file
- directory
- data
- attribute
- target
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
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)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于文件系统的海量小文件处理方法、系统及存储介质,属于计算机数据处理领域。所述方法包括:文件列表信息获取步骤;第一判断步骤;第一读入步骤;文件数据定位步骤;第二判断步骤;第二读入步骤;文件数据写入步骤;重复步骤。所述系统包括:文件列表信息获取模块;第一判断模块;第一读入模块;文件数据定位模块;第二判断模块;第二读入模块;文件数据写入模块;重复模块。本发明能够在多种文件系统下进行操作,使用范围广泛;通过解析文件系统结构,提取属性文件、目录项等关键元数据,并通过元数据与用户数据的双预读机制,实现了海量小文件的高速读写,处理效率较高。
Description
技术领域
本发明属于计算机数据处理领域,涉及基于文件系统的海量小文件处理方法、系统及存储介质。
背景技术
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。小文件是指文件大小小于或等于1MB的用户文件,常见的小文件有图片、日志和电子邮件等。在如今的信息技术情况下,社交平台、电商等数据密集型应用普及,数据量呈爆炸式增长,进而出现了海量的小文件需要处理。
目前,传统的小文件处理方式是通过系统调用进行处理。系统调用能够把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,整个过程简单有效。但是,在面对海量小文件时,对于每个文件来说,系统调用都会涉及文件的打开、读取、关闭操作,这样会极大影响处理性能,造成处理效率下降。
另外,现有技术中也有一些针对海量小文件的处理方法,例如现有技术公开了一种基于文件系统解析的海量小文件备份恢复方法(公开号CN107885616A),该方法首先备份整个文件系统,然后在恢复的时候对文件系统进行解析,实现指定数据的恢复。该方法通过提前对整个文件系统进行备份,能够免去对大量小文件打开关闭操作,减少磁盘的IOPS,提高处理性能。但是,该方法在只需要备份部分小文件的时候,直接备份整个文件系统的开销很大,造成多余消耗,并且该方法的恢复速度也有待提升。
因此,如何帮助用户直接且快速地处理海量小文件,成为当前急需解决的技术问题。
发明内容
本发明为了解决上述背景技术中的技术问题,本发明实施例提供了一种基于文件系统的海量小文件处理方法、系统及存储介质。所述技术方案如下:
第一个方面,提供了一种基于文件系统的海量小文件处理方法,所述方法包括步骤:
文件列表信息获取步骤,解析文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的属性文件序号、父目录属性文件序号、数据大小和文件名;指定目录下全部子目录的属性文件序号、父目录属性文件序号和文件名;
第一判断步骤,根据所述文件列表信息,判断所述目标文件对应的属性文件是否读入内存;
第一读入步骤,如果否,将所述目标文件对应的属性文件及其相邻属性文件读入内存后执行文件数据定位步骤;如果是,则执行文件数据定位步骤;
文件数据定位步骤,解析内存中的所述目标文件对应的属性文件,定位目标文件的文件数据;
第二判断步骤,判断所述目标文件的文件数据是否读入内存;
第二读入步骤,如果否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行文件数据写入步骤;如果是,则执行文件数据写入步骤;
文件数据写入步骤,将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录;
重复步骤,重复第一判断步骤至文件数据写入步骤,直至遍历完全部目标文件的属性文件序号。
可以理解的是,上述指定目录及其子目录下全部目标文件的属性文件序号、父目录属性文件序号、数据大小和文件名,具体是指:
指定目录及其子目录下全部目标文件的属性文件序号;
指定目录及其子目录下全部目标文件的父目录属性文件序号;
指定目录及其子目录下全部目标文件的文件大小;
指定目录及其子目录下全部目标文件的文件名。
还可以理解的是,上述指定目录下全部子目录的属性文件序号、父目录属性文件序号和文件名,具体是指:
指定目录下全部子目录的属性文件序号;
指定目录下全部子目录的父目录属性文件序号;
指定目录下全部子目录的文件名。
在其中一个实施例中,所述文件列表信息获取步骤,包括:
打开指定目录所在的设备,获取指定目录的属性文件;
解析所述指定目录的属性文件,获取指定目录的目录项;
遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息。
在其中一个实施例中,所述文件系统包括:NTFS文件系统、XFS文件系统或EXT4文件系统。
在其中一个实施例中,在所述文件列表信息获取步骤中,所述文件列表信息还包括:指定目录及其子目录下全部目标文件的创建时间或修改时间;
在所述第一判断步骤之前,还包括排序步骤:
根据所述创建时间或修改时间,对全部所述属性文件序号进行升序或降序排列。
在其中一个实施例中,所述文件数据定位步骤,包括:
解析内存中的所述目标文件对应的属性文件,获取目标文件的文件数据索引;
根据所述目标文件的文件数据索引,获取目标文件的文件数据位置。
第二个方面,还提供了一种基于文件系统的海量小文件处理系统,所述系统,包括:
文件列表信息获取模块,用于解析文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的属性文件序号、父目录属性文件序号、数据大小和文件名;指定目录下全部子目录的属性文件序号、父目录属性文件序号和文件名;
第一判断模块,用于根据所述文件列表信息,判断所述目标文件对应的属性文件是否读入内存;
第一读入模块,用于如果否,将所述目标文件对应的属性文件及其相邻属性文件读入内存后执行文件数据定位模块;如果是,则执行文件数据定位模块;
文件数据定位模块,用于解析内存中的所述目标文件对应的属性文件,定位目标文件的文件数据;
第二判断模块,用于判断所述目标文件的文件数据是否读入内存;
第二读入模块,用于如果否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行文件数据写入模块;如果是,则执行文件数据写入模块;
文件数据写入模块,用于将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录;
重复模块,用于重复第一判断模块至文件数据写入模块,直至遍历完全部目标文件的属性文件序号。
在其中一个实施例中,所述文件列表信息获取模块,包括:
指定目录属性文件获取单元,用于打开指定目录所在的设备,获取指定目录的属性文件;
指定目录属性文件解析单元,用于解析所述指定目录的属性文件,获取指定目录的目录项;
文件列表信息获取单元,用于遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息。
在其中一个实施例中,在所述文件列表信息获取模块中,所述文件列表信息还包括:指定目录及其子目录下全部目标文件的创建时间或修改时间;
在所述第一判断模块之前,还包括排序模块:
用于根据所述创建时间或修改时间,对全部所述属性文件序号进行升序或降序排列。
在其中一个实施例中,所述文件数据定位模块,包括:
文件数据索引获取单元,用于解析内存中的所述目标文件对应的属性文件,获取目标文件的文件数据索引;
文件数据位置获取单元,用于根据所述目标文件的文件数据索引,获取目标文件的文件数据位置。
第三个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上述所述基于文件系统的海量小文件处理方法。
本发明的有益效果:
(1)本发明能够在多种文件系统下进行操作,使用范围广泛,应用场景灵活;
(2)基于二进制解析,本发明能够直接读取磁盘数据,提高了便利性;
(3)本发明利用文件系统进行解析,深度提取了文件拷贝时使用的有效元数据,操作流程简便,为数据的处理奠定了基础;
(4)对属性文件进行预读,提升了属性文件的读取速率;对文件数据进行预读,提升了用户数据的读取速率,在双预读机制下,海量小文件的读取速率提升明显,实现了数据的快速处理;
(5)本发明利用文件系统二进制解析,深度提取了有效用户数据,实现了仅对目标文件进行处理,不处理无效数据,节省了开销。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一中NTFS下海量小文件处理方法的流程图。
图2为本发明实施例一中NTFS文件系统的系统结构图。
图3为本发明实施例一中NTFS文件系统中文件记录的结构图。
图4为本发明实施例二中XFS下海量小文件处理方法的流程图。
图5为本发明实施例二中XFS文件系统的系统结构图。
图6为本发明实施例二中XFS文件系统中inode的结构图。
图7为本发明实施例三中EXT4下海量小文件处理方法的流程图。
图8为本发明实施例三中EXT4文件系统的系统结构图。
图9为本发明实施例三中EXT4文件系统中extent树的结构图。
图10为本发明实施例四中基于文件系统的海量小文件备份恢复系统的结构图。
图11为本发明实施例四中文件列表信息获取模块的结构图。
图12为本发明实施例四中文件数据定位模块的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
术语解释:
(1).指定目录:需要备份的目录;
(2).指定目录的路径:由用户指定的,需要备份的目录的路径;
(3).目标文件:所述指定目录下的文件,即需要备份的文件;
(4).指定文件:保存备份数据的文件,即用于保存所述目标文件的文件数据;
(5).指定文件的路径:由用户指定,保存备份数据的文件的路径;
(6) .属性文件:是指NTFS文件系统的文件记录、XFS文件系统的inode或EXT4文件系统的inode;
(7).文件数据索引:是指NTFS文件系统的80属性、XFS文件系统的data fork或EXT4文件系统的i_block。
实施例一
本实施例提供的方法,应用范围为下述环境:操作系统为Windows10,文件系统为NTFS,解析过程由C语言编写。
如图1所示,提供了一种基于文件系统的海量小文件处理方法,所述方法包括步骤:
S001.解析NTFS文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的文件记录号、父目录文件记录号、文件大小和文件名;指定目录下全部子目录的文件记录号、父目录文件记录号和文件名;指定目录及其子目录下全部目标文件的创建时间。
通过直接读取磁盘,对NTFS文件系统进行二进制解析,深度提取了文件拷贝时使用的有效元数据。
另外,为了便于理解,下面我们对步骤S001进行详细说明。
可选的,所述S001步骤,包括:
S0011.打开指定目录所在的卷,获取指定目录的文件记录;
如图2所示,NTFS的主要结构为卷,一个NTFS卷由元数据和用户文件组成,元数据又由元文件和索引节点组成。其中,元文件是隐藏的系统文件,用户不能直接对元文件进行访问。除根目录文件名为“.”外,元文件的文件名均以“$”符号开头,例如$Boot、$MFT和$MFTMirr。
可选的,所述步骤S0011,包括:
S00111.通过Windows API中的CreateFile函数打开指定目录所在的卷,获取$Boot文件;
S00112.根据$Boot文件,获取NTFS基本信息,其中,所述NTFS基本信息包括:$MFT文件起始簇号;
NTFS文件系统的基本信息存在于$Boot文件中,$Boot文件是用于系统启动的元文件,该文件的数据流指向卷的启动扇区,位置固定在卷中的第0簇。
通过直接读取磁盘中的第0簇获取$Boot文件,通过二进制解析技术对$Boot文件进行解析,便可以提取NTFS文件系统的基本信息。
其中,所述NTFS文件系统的基本信息可以包括:扇区字节数、簇扇区数、文件记录簇数、索引文件簇数、$MFT文件起始簇号。
S00113.根据所述NTFS基本信息,获取根目录的文件记录;
一般的,根据所述$MFT文件起始簇号,可以获取基本文件记录;解析所述基本文件记录,则可以获取$MFT文件在磁盘上的分布;再根据所述$MFT文件在磁盘上的分布,便可以获取根目录的文件记录。
需要理解的是,NTFS中的每个文件都有一个或多个文件记录来记录文件数据的位置以及文件的其他信息,$MFT文件则是NTFS中所有文件记录的集合。
还需要理解的是,每个文件记录都有其序号,又称文件记录号。文件记录号从0开始,第0号文件记录是基本文件记录,是整个文件记录自身的文件记录。
如图3所示,文件记录由文件记录头和属性列表组成。文件记录头保存文件记录大小等一些基本信息并指向属性列表中的入口;属性列表由一个个属性组成,属性是保存文件特征信息的数据结构,由属性头和属性体组成。常见属性的描述如下。
a) 30属性:存放文件名。
b) 80属性:数据文件专用,存放或指向文件数据。
c) 90属性:目录文件专用,存放目录项。
d) A0属性:目录文件专用,90属性的扩展属性,存放索引文件的位置。
e) B0属性:位图属性。基本文件记录中,B0属性用于记录每个文件记录的使用情况;在目录文件的文件记录中,B0属性用于记录每个索引文件的使用情况。
f) 20属性:一个文件或文件夹存在多个文件记录的情况:
文件或文件夹有很多的硬链接(即有很多的文件名属性存在);
文件有很多的碎片,以至于1个文件记录存储不下这么多的数据运行列表;
属性中有很复杂的安全描述;
属性中有很多的命名流,如数据流。
值得要注意的是,20属性中的同一类文件属性可能会有多个,因此存在20属性时,对20属性进行遍历,不能找到一个需要的属性就结束检索。
为了便于理解,具体的,对步骤S00111-S00113提供一个操作实例:通过WindowsAPI中的CreateFile函数打开逻辑磁盘“C:”;通过ReadFile函数读取第0号扇区,即$Boot文件所在的扇区;通过二进制解析,获取以下信息:扇区字节数为512、簇扇区数为8、文件记录簇数为1/4、索引文件簇数为1、$MFT文件起始簇号为786432;将$MFT文件起始簇号、簇扇区数和扇区字节数三者相乘,获取$MFT文件在磁盘上的字节偏移量,为3221225472;通过ReadFile函数读取3221225472-2121226496字节的数据,即基本文件记录;解析基本文件记录中的20属性,其为非常驻,数据运行列表为31 40 4D E8 3E;解析该数据运行列表获取起始簇号为4122701,所占簇数为64;通过ReadFile函数读取4122701-4122764簇的数据,即基本文件记录的属性列表;遍历该属性列表,获取全部80属性;解析80属性中的数据运行列表,获取$MFT文件在磁盘上的分布(分布太分散,暂不列出);根目录的文件记录号为5,其位置在基本文件记录之后的5120-6144字节,通过ReadFile函数读取这部分数据,即根目录的文件记录。
S00114.根据指定目录的路径和所述根目录的文件记录,获取指定目录的文件记录。
可选的,所述步骤S00114,包括:
S001141.根据所述指定目录的路径,获取下一级目录的文件名;
S001142.解析当前目录的文件记录,获取当前目录的目录项;
S001143.遍历步骤S001142的所述当前目录的目录项,查找步骤S001141的所述下一级目录的文件名,获取下一级目录的文件记录号;
S001144.根据所述下一级目录的文件记录号,获取下一级目录的文件记录;
S001145.重复步骤S001141-S001144直到所述指定目录的路径的最后一级,获取指定目录的文件记录。
需要注意的是,第一次执行步骤S001142时,所述当前目录为根目录。
还需要注意的是,根据目录量级的不同,NTFS存放目录项的方式也不同,随着目录下文件数量的增多可分为以下4种情况,分别是小索引、单索引、多索引、多级索引,后三种索引统称为大索引。
a) 小索引:当目录下文件数量比较小时(一般是7个以下),文件名直接存放在目录文件记录的90属性中。一般情况下,90属性后无A0和B0属性。
b) 单索引:文件数量增多(一般为8~20个),90属性无法存放全部的文件名。此时文件名会存放在一个索引文件中,90属性只存放索引文件号,索引文件的数据运行列表(可以指向某个位置的数据)存放在A0属性中。
c) 多索引:文件数量再次增多(一般为20~200个),一个索引文件无法存放全部的文件名,此时NTFS系统会再申请新的索引文件,多个索引文件共同存放文件名。此时90属性存放部分文件名和索引文件号,索引文件的数据运行列表存放在A0属性中。
d) 多级索引:文件数量非常大(一般为200个以上),90属性无法存放所有的索引文件号,此时NTFS系统会用一个新索引文件存放索引文件号和文件名。90属性存放索引文件号和部分文件名,A0属性存放多个索引文件的数据运行列表。此时的目录结构为B-树。
因此,在步骤S001142中,上述获取当前目录的目录项的过程,应当首先解析90属性,获取90属性中的目录项;其后,判断所述当前目录为大索引还是小索引;如果所述当前目录为大索引,解析A0属性中的数据运行列表,获取当前目录的索引文件;最后,根据所述当前目录的索引文件,获取当前目录的目录项。
S0012.解析所述指定目录的文件记录,获取指定目录的目录项。
S0013.遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的文件记录号、父目录文件记录号、数据大小和文件名;指定目录下全部子目录的文件记录号、父目录文件记录号和文件名;指定目录及其子目录下全部目标文件的创建时间。
S002.根据所述创建时间,对全部所述文件记录号进行降序排列。
S003.根据所述文件列表信息,判断所述目标文件对应的文件记录是否读入内存。
S004.如果否,将所述目标文件对应的文件记录及其相邻文件记录读入内存后执行步骤S005;如果是,则执行步骤S005。
S005.解析内存中的所述目标文件对应的文件记录,定位目标文件的文件数据。
需要注意的是,本步骤仅需要解析“所述目标文件对应的文件记录”,是因为步骤S004中所述相邻文件记录会在步骤S009的遍历过程中进行解析。
还需要注意的是,NTFS中文件数据有两种存储方式。当文件非常小,通常是小于1KB时,文件记录的80属性为常驻,文件数据直接存放在80属性中,可直接读取80属性中的文件数据;80属性为非常驻时,属性中存放指向文件数据的数据运行列表,通过解析所述数据运行列表获取文件数据在磁盘上的位置。
其中,通过属性头内偏移量为0x08的单个字节判断80属性是否常驻,0表示常驻,1表示非常驻。
因此,在步骤S005中,上述定位目标文件的文件数据的过程,应当首先判断目标文件的80属性是否常驻;如果目标文件的80属性常驻,所述目标文件的文件数据存放在80属性中;如果目标文件的80属性非常驻,解析所述目标文件的80属性中的数据运行列表,获取所述目标文件的文件数据在磁盘上的位置。
可选的,所述步骤S005,包括:
S0051.解析内存中的所述目标文件对应的文件记录,获取目标文件的80属性;
S0052.根据所述目标文件的80属性,获取目标文件的文件数据位置。
还可选的,所述步骤S0052,包括:判断目标文件的80属性是否常驻;如果是,从所述80属性中获取所述目标文件的文件数据;如果否,解析所述目标文件的80属性中的数据运行列表,获取所述目标文件的文件数据在磁盘上的位置。
S006.判断所述目标文件的文件数据是否读入内存。
S007.如果否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行步骤S008;如果是,则执行步骤S008。
S008.根据指定文件的路径,将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录。
需要注意的是,本步骤仅需要将“所述目标文件的文件数据”写入指定文件,是因为步骤S007中所述相邻文件数据会在步骤S009的遍历过程中进行解析。
S009.重复步骤S003至步骤S008,直至遍历完全部目标文件的文件记录号。
为了便于理解,具体的,对步骤S003-S008提供一个操作实例:第一个目标文件的文件记录号为80056,对应的文件记录未读入内存;将文件记录号为70032-90079的文件记录读入内存;文件记录号为80056的文件记录中的80属性为常驻属性,其文件数据直接存放在80属性中,为“#indx”;通过CreateFile函数打开指定文件“D:\test\test.txt”;通过WriteFile函数将80属性中的文件数据写入指定文件;程序维护一个变量offset,offset的初始值为0,在执行完WriteFile函数后,offset的值会加上WriteFile的返回值,即写入的字节数,此时为5;在执行WriteFile函数前,记录offset的值0,即为所述目标文件的偏移记录;
进一步,下一个目标文件的文件记录号为80057,对应的文件记录已读入内存,直接解析内存中的文件记录;文件记录号为80057的文件记录中的80属性为非常驻属性,其数据运行列表为21 01 3F 20,解析后得到起始簇号8255和所占簇数1,簇号为8255的簇的数据未读入内存,将簇号为6255-10254的簇的数据读入内存;获取当前offset的值5作为偏移记录;目标文件的数据大小为2048字节;通过WriteFile函数将簇号为8255的簇中的前2048字节的数据写入指定文件。
本实施例的技术方案,通过解析NTFS系统结构,提取文件记录、目录项等关键元数据,模拟文件系统读取磁盘数据,并通过元数据与用户数据的双预读机制,提升数据读取效率,实现了NTFS上海量小文件的高速读写,使得数据处理效率提升明显。
实施例二
本实施例提供的方法,应用范围为下述环境:操作系统为CentOS7,文件系统为XFS,解析过程由C语言编写。
如图4所示,提供了一种基于文件系统的海量小文件处理方法,所述方法包括步骤:
S011.解析XFS文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的inode号、父目录inode号、文件大小和文件名;指定目录下全部子目录的inode号、父目录inode号和文件名;指定目录及其子目录下全部目标文件的修改时间。
另外,为了便于理解,下面我们对步骤S011进行详细说明。
可选的,所述S011步骤,包括:
S0111.打开指定目录所在的块设备,获取指定目录的inode;
inode是Linux操作系统中的索引节点,它包含文件系统中文件的相关信息,每个文件都对应的inode。
inode号是inode的编号,每个inode都有对应的inode号,inode号在每个文件系统中是唯一的。
Linux中的设备以设备文件的形式存放在磁盘中,每个块设备都有其设备编号,Linux中通过设备表维护设备编号和设备名的对应关系,一般的,设备表文件名为“partitions”。
一般的,根据指定目录的路径,通过stat系统调用,可以获取指定目录的信息,包括设备编号和指定目录的inode号。
可选的,所述S0111步骤,包括:
S01111.根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号。
S01112.根据所述设备编号,获取设备名。
查询设备表,根据所述设备编号,获取设备名。
S01113.根据所述设备名,通过open系统调用打开指定目录所在的块设备,获取超级块。
如图5所示,XFS分区由若干个块组成并被均分为若干个块组,也称为分配组(Allocation Groups,AG),例如分配组(AG)1、分配组(AG)2、分配组(AG)n。每个分配组由元数据和用户数据组成。其中,元数据是文件系统中隐藏的结构体,用户不能直接对元数据进行访问。SB、AGI、AGF、Inode及一些其他元数据均是分配组中重要的元数据。
其中,SB又称超级块,用于维护整个文件系统的基本信息,存放在0号分配组的第一个块的前512字节,其他分配组的该位置为超级块的备份;AGF用于分配组内部空闲空间的管理;AGI用于分配组内部inode节点的管理。
S01114.根据所述超级块,获取XFS基本信息,其中,所述XFS基本信息包括:分配组块数和分配组个数。
通过读取所述块设备的前512字节获取超级块,通过二进制解析技术对超级块进行解析,获取XFS文件系统的基本信息。其中,所述XFS文件系统的基本信息可以包括:扇区字节数、inode字节数、每个块的字节数、根目录inode号、分配组块数和分配组个数。
S01115.根据所述指定目录的inode号和所述XFS基本信息,获取指定目录的inode。
一般的,inode号为64位,从高位到低位分别代表inode所在分配组号、inode所在块在分配组内的块号、inode在块内的偏移。
通过所述inode所在分配组号、inode所在块在分配组内的块号、inode在块内的偏移和XFS基本信息,可以计算inode在文件系统中的偏移,获取指定目录的inode。
S0112.解析所述指定目录的inode,获取指定目录的目录项。
如图6所示,inode由core、data fork和extended attribute fork三部分组成。Core是inode的核心部分,保存了文件的大部分属性,所有inode都有core;data fork是不同类型的目录的inode所特有的索引结构;extended attribute fork是inode的扩展属性,一般的,无需获取extended attribute fork。
XFS在实现目录索引时,由于目录中文件数量的不同,分为以下三类目录类型,即data fork的类型:
Local:当目录的文件(夹)个数比较小(一般为20个以下,与文件名长度有关),目录项可直接存放在inode中。
Extents:目录项内容比较多,inode存不下文件名,目录项存放在若干个块中并使用extents索引;此时extents索引信息存放在data fork的bmx结构中,bmx结构由startoff、startblock、blockcount、extentsflag四部分组成,分别代表该extents索引对应的块的逻辑块号、文件系统块号、连续块个数和标志位;通过所述文件系统块号,可以计算得到该extents索引对应的块的物理块号,进而获取该extents索引指向的目录项。
Btree: 目录项内容非常多,inode存不下extents索引,通过一颗B+树分层级间接索引相关块。此时data fork中的bmbt结构存放B+树根节点的索引,包括其逻辑块号和文件系统块号,分别通过keys结构和ptrs结构保存;B+树的非叶子节点不存放目录项的索引,只存放子节点的keys结构和ptrs结构;目录项的索引存放在B+树的叶子节点的rec结构中,解析rec结构以获取目录项。
S0113.遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的inode号、父目录inode号、数据大小和文件名;指定目录下全部子目录的inode号、父目录inode号和文件名;指定目录及其子目录下全部目标文件的修改时间。
S012.根据所述修改时间,对全部所述inode号进行降序排列。
S013.根据所述文件列表信息,判断所述目标文件对应的inode是否读入内存。
S014.若否,将所述目标文件对应的inode及其相邻inode读入内存后执行步骤S015;若是,则执行步骤S015。
S015.解析内存中的所述目标文件对应的inode,定位目标文件的文件数据。
需要注意的是,XFS中文件数据有两种存储方式。一般的,文件数据的存储方式为extents,文件数据使用extents索引并存放在data fork的bmx结构中;当文件数据在磁盘上的分布非常分散,data fork无法存放下全部的bmx结构,存储方式为btree,通过B+树分层级间接索引相关块,其实现方式与目录项的btree类型相同。
其中,通过core结构中的format判断存储方式,2表示extents,3表示btree。
因此,在步骤S015中,上述定位目标文件的文件数据的过程,应当首先判断目标文件的数据存储方式;若目标文件的数据存储方式为extents,解析data fork中的bmx结构,获取所述目标文件的文件数据在磁盘上的位置;若目标文件的数据存储方式为btree,解析data fork中的bmbt结构,获取B+树的根节点并遍历B+树,获取叶子节点中的rec结构,获取所述目标文件的文件数据在磁盘上的位置。
可选的,所述步骤S015,包括:
S0151.解析内存中的所述目标文件对应的inode,获取目标文件的data fork;
S0152.根据所述目标文件的data fork,获取目标文件的文件数据位置。
还可选的,所述步骤S0152,包括:判断所述目标文件的format类型,若format为2,即文件数据存储方式为extents,解析data fork中的bmx结构,获取所述目标文件的文件数据在磁盘上的位置;若format为3,即文件数据存储方式为btree,获取B+树的根节点并遍历B+树,获取所述目标文件的文件数据在磁盘上的位置。
S016.判断所述目标文件的文件数据是否读入内存。
S017.若否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行步骤S018;若是,则执行步骤S018。
S018.根据指定文件的路径,将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录。
需要注意的是,本步骤仅需要将“所述目标文件的文件数据”写入指定文件,是因为步骤S017中所述相邻文件数据会在步骤S019的遍历过程中进行解析。
S019.重复步骤S013至步骤S018,直至遍历完全部目标文件的inode号。
本实施例的技术方案,通过解析XFS系统结构,提取超级块、inode、目录项等关键元数据,模拟文件系统读取磁盘数据,并通过元数据与用户数据的双预读机制,提升数据读取效率,实现了XFS下海量小文件的高速读写,使得数据备份效率提升明显。
实施例三
本实施例提供的方法,应用范围为下述环境:操作系统为CentOS7,文件系统为EXT4,解析过程由C语言编写。
如图7所示,提供了一种基于文件系统的海量小文件处理方法,所述方法包括步骤:
S021.解析EXT4文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的inode号、父目录inode号、文件大小和文件名;指定目录下全部子目录的inode号、父目录inode号和文件名;指定目录及其子目录下全部目标文件的修改时间。
另外,为了便于理解,下面我们对步骤S021进行详细说明。
可选的,所述S021步骤,包括:
S0211.打开指定目录所在的块设备,获取指定目录的inode;
如图8所示,EXT4分区由若干个块组成并分为若干个块组,例如块组0、块组1、块组2、块组3、块组n。每个块组由元数据和用户数据组成。其中,元数据是文件系统中隐藏的结构体,用户不能直接对元数据进行访问,例如超级块、块组描述符、数据块位图、inode位图、inode表、数据块等。
其中,超级块(super Block)和块组描述符(GDT)的位置是固定的。超级块用于维护整个EXT4文件系统的基本信息,存放在第0号块组的第一个块。块组描述符也可以称为组描述表,它位于超级块的下一个块号,用于维护每个块组的基本信息。在其他一些特定块组中有超级块和块组描述符表的冗余备份。
可选的,所述S0211步骤,包括:
S02111.根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号。
S02112.根据所述设备编号,获取设备名。
S02113.根据所述设备名,通过open系统调用指定目录所在的块设备,获取超级块和块组描述符;
S02114.解析所述超级块,获取EXT4基本信息,其中,所述EXT4基本信息包括:块组块数和块组inode数;
通过读取所述块设备的前4096字节获取超级块,通过二进制解析技术对超级块进行解析,获取EXT4文件系统的基本信息。其中,所述EXT4文件系统的基本信息可以包括:inode字节数、每个块的字节数、块组描述符字节数、块组块数和块组inode数。
S02115.解析所述块组描述符,获取每个块组的inode表的位置;
S02116.根据所述指定目录的inode号和所述EXT4基本信息,查询对应块组的inode表,获取指定目录的inode。
S0212.解析所述指定目录的inode,获取指定目录的目录项。
EXT4中目录的目录项存放在目录的文件数据中。如图9所示,在EXT4中使用extent树来实现逻辑块映射。extent树的节点的开头是ext4_extent_header结构,若ext4_extent_header结构中的eh_depth值大于0,则该节点为内部节点,节点中包含若干个ext4_extent_idx结构,其数量为ext4_extent_header结构中的eh_entries,ext4_extent_idx结构会指向一个新的节点;若ext4_extent_header结构中的eh_depth值等于0,则该节点为叶子节点,节点中包含ext4_extent结构,相同的,其数量为ext4_extent_header结构中的eh_entries,此时,ext4_extent结构直接指向文件数据。
一般的,EXT4的目录项是线性的,未设置filetype特性标志时,目录项为ext4_dir_entry结构,设置了filetype特性标志时,目录项为ext4_dir_entry_2结构。
需要说明的是,EXT4具有哈希树目录,通过使用哈希的B-树来管理目录项。哈希树的每个节点都维护一个哈希表,哈希表由哈希值和数据块号组成。目录的文件数据的第一个块是dx_root结构,即哈希树的根节点,若dx_root结构中indirect_levels不为0,哈希表中的数据块号指向一个内部节点。内部节点指向叶子节点,叶子节点存储线性的目录项。
其中,所述步骤S0212,包括:
S02121.根据指定目录的inode,获取指定目录的文件数据;
S02122.判断inode中是否设置了EXT4_INDEX_FL标志;
S02123.若设置了EXT4_INDEX_FL标志,即目录类型为哈希树目录,遍历哈希树,获取所述指定目录的目录项。
S0213.遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的inode号、父目录inode号、数据大小和文件名;指定目录下全部子目录的inode号、父目录inode号和文件名;指定目录及其子目录下全部目标文件的修改时间。
S022.根据所述修改时间,对全部所述inode号进行升序排列。
S023.根据所述文件列表信息,判断所述目标文件对应的inode是否读入内存。
S024.若否,则将所述目标文件对应的inode及其相邻inode读入内存后执行步骤S025;若是,则执行步骤S025。
S025.解析内存中的所述目标文件对应的inode,定位目标文件的文件数据。
需要注意的是,本步骤仅需要解析“所述目标文件对应的inode”,是因为步骤S024中所述相邻inode会在步骤S029的遍历过程中进行解析。
为了便于理解,下面我们对步骤S025进行详细说明。
可选的,所述步骤S025,包括:
S0251.解析内存中的所述目标文件对应的inode,获取目标文件的i_block结构;
S0252.根据所述目标文件的i_block结构,获取目标文件的文件数据位置。
还可选的,所述步骤S0252,包括:
S02521.获取i_block结构中的ext4_extent_header结构;
S02522.判断所述ext4_extent_header结构中的eh_depth值是否为0;若是,直接获取ext4_extent结构;若否,则获取并解析ext4_extent_idx结构,获取ext4_extent结构;
S02523.依次解析全部ext4_extent结构,定位所述目标文件的文件数据。
值得说明的是,上述ext4_extent_header结构中的eh_depth值仅有两种情况,即eh_depth值为0或大于0。
还值得说明的是,正如上文提到,在EXT4中是使用extent树来实现逻辑块映射(如图9所示)。那在解析ext4_extent_idx结构时,需要先获得所有的ext4_extent_idx结构指向的ext4_extent_header结构,再依次解析这些被指向的的ext4_extent_header结构,直至eh_depth值为0,从而获得ext4_extent结构。
S026.判断所述目标文件的文件数据是否读入内存。
S027.若否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行步骤S028;若是,则执行步骤S028。
S028.根据指定文件的路径,将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录。
同样,需要注意的是,本步骤仅需要将“所述目标文件的文件数据”写入指定文件,是因为步骤S027中所述相邻文件数据会在步骤S029的遍历过程中进行解析。
S029.重复步骤S023至步骤S028,直至遍历完全部目标文件的inode号。
本实施例的技术方案,通过解析EXT4系统结构,提取超级块、块组描述符、inode、目录项等关键元数据,模拟文件系统读取磁盘数据,并通过元数据与用户数据的双预读机制,提升数据读取效率,实现了EXT4下海量小文件的高速读写,使得数据备份效率提升明显。
实施例四
如图10所示,本实施例提供一种基于文件系统的海量小文件处理系统,所述系统,包括:
文件列表信息获取模块1001,用于解析文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的属性文件序号、父目录属性文件序号、数据大小和文件名;指定目录下全部子目录的属性文件序号、父目录属性文件序号和文件名;
第一判断模块1003,用于根据所述文件列表信息,判断所述目标文件对应的属性文件是否读入内存;
第一读入模块1004,用于如果否,将所述目标文件对应的属性文件及其相邻属性文件读入内存后执行文件数据定位模块1005;如果是,则执行文件数据定位模块1005;
文件数据定位模块1005,用于解析内存中的所述目标文件对应的属性文件,定位目标文件的文件数据;
第二判断模块1006,用于判断所述目标文件的文件数据是否读入内存;
第二读入模块1007,用于如果否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行文件数据写入模块1008;如果是,则执行文件数据写入模块1008;
文件数据写入模块1008,用于将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录;
重复模块1009,用于重复第一判断模块1003至文件数据写入模块1008,直至遍历完全部目标文件的属性文件序号。
可选的,在本实施例的基础上,如图11所示,所述所述文件列表信息获取模块1001,包括:
指定目录属性文件获取单元10011,用于打开指定目录所在的设备,获取指定目录的属性文件;
指定目录属性文件解析单元10012,用于解析所述指定目录的属性文件,获取指定目录的目录项;
文件列表信息获取单元10013,用于遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息。
可选的,在本实施例的基础上,如图10所示,所述文件列表信息获取模块1001,包括:
在所述文件列表信息获取模块1001中,所述文件列表信息还包括:指定目录及其子目录下全部目标文件的创建时间或修改时间;
在所述第一判断模块1003之前,还包括排序模块1002:
用于根据所述创建时间或修改时间,对全部所述属性文件序号进行升序或降序排列。
可选的,在本实施例的基础上,如图12所示,所述文件数据定位模块1005,包括:
文件数据索引获取单元10051,用于解析内存中的所述目标文件对应的属性文件,获取目标文件的文件数据索引;
文件数据位置获取单元10052,用于根据所述目标文件的文件数据索引,获取目标文件的文件数据位置。
实施例五
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例一至实施三任一所述基于文件系统的海量小文件处理方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种基于文件系统的海量小文件处理方法,其特征在于,所述方法包括步骤:
文件列表信息获取步骤,解析文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的属性文件序号、父目录属性文件序号、数据大小和文件名;指定目录下全部子目录的属性文件序号、父目录属性文件序号和文件名;
第一判断步骤,根据所述文件列表信息,判断所述目标文件对应的属性文件是否读入内存;
第一读入步骤,如果否,将所述目标文件对应的属性文件及其相邻属性文件读入内存后执行文件数据定位步骤;如果是,则执行文件数据定位步骤;
文件数据定位步骤,解析内存中的所述目标文件对应的属性文件,定位目标文件的文件数据;
第二判断步骤,判断所述目标文件的文件数据是否读入内存;
第二读入步骤,如果否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行文件数据写入步骤;如果是,则执行文件数据写入步骤;
文件数据写入步骤,将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录;
重复步骤,重复第一判断步骤至文件数据写入步骤,直至遍历完全部目标文件的属性文件序号。
2.根据权利要求1所述的基于文件系统的海量小文件处理方法,其特征在于,所述文件列表信息获取步骤,包括:
打开指定目录所在的设备,获取指定目录的属性文件;
解析所述指定目录的属性文件,获取指定目录的目录项;
遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息。
3.根据权利要求1所述的基于文件系统的海量小文件处理方法,其特征在于,所述文件系统包括:NTFS文件系统、XFS文件系统或EXT4文件系统。
4.根据权利要求1所述的基于文件系统的海量小文件处理方法,其特征在于,在所述文件列表信息获取步骤中,所述文件列表信息还包括:指定目录及其子目录下全部目标文件的创建时间或修改时间;
在所述第一判断步骤之前,还包括排序步骤:
根据所述创建时间或修改时间,对全部所述属性文件序号进行升序或降序排列。
5.根据权利要求1所述的基于文件系统的海量小文件处理方法,其特征在于,所述文件数据定位步骤,包括:
解析内存中的所述目标文件对应的属性文件,获取目标文件的文件数据索引;
根据所述目标文件的文件数据索引,获取目标文件的文件数据位置。
6.一种基于文件系统的海量小文件处理系统,其特征在于,所述系统,包括:
文件列表信息获取模块,用于解析文件系统,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下全部目标文件的属性文件序号、父目录属性文件序号、数据大小和文件名;指定目录下全部子目录的属性文件序号、父目录属性文件序号和文件名;
第一判断模块,用于根据所述文件列表信息,判断所述目标文件对应的属性文件是否读入内存;
第一读入模块,用于如果否,将所述目标文件对应的属性文件及其相邻属性文件读入内存后执行文件数据定位模块;如果是,则执行文件数据定位模块;
文件数据定位模块,用于解析内存中的所述目标文件对应的属性文件,定位目标文件的文件数据;
第二判断模块,用于判断所述目标文件的文件数据是否读入内存;
第二读入模块,用于如果否,将所述目标文件的文件数据及其相邻文件数据读入内存后执行文件数据写入模块;如果是,则执行文件数据写入模块;
文件数据写入模块,用于将内存中的所述目标文件的文件数据写入指定文件,并获取所述目标文件的偏移记录;
重复模块,用于重复第一判断模块至文件数据写入模块,直至遍历完全部目标文件的属性文件序号。
7.根据权利要求6所述的基于文件系统的海量小文件处理系统 ,其特征在于,所述文件列表信息获取模块,包括:
指定目录属性文件获取单元,用于打开指定目录所在的设备,获取指定目录的属性文件;
指定目录属性文件解析单元,用于解析所述指定目录的属性文件,获取指定目录的目录项;
文件列表信息获取单元,用于遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息。
8.根据权利要求6所述的基于文件系统的海量小文件处理系统 ,其特征在于,在所述文件列表信息获取模块中,所述文件列表信息还包括:指定目录及其子目录下全部目标文件的创建时间或修改时间;
在所述第一判断模块之前,还包括排序模块:
用于根据所述创建时间或修改时间,对全部所述属性文件序号进行升序或降序排列。
9.根据权利要求6所述的基于文件系统的海量小文件处理系统 ,其特征在于,所述文件数据定位模块,包括:
文件数据索引获取单元,用于解析内存中的所述目标文件对应的属性文件,获取目标文件的文件数据索引;
文件数据位置获取单元,用于根据所述目标文件的文件数据索引,获取目标文件的文件数据位置。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5任一项所述基于文件系统的海量小文件处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111616717.5A CN113986838B (zh) | 2021-12-28 | 2021-12-28 | 基于文件系统的海量小文件处理方法、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111616717.5A CN113986838B (zh) | 2021-12-28 | 2021-12-28 | 基于文件系统的海量小文件处理方法、系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113986838A CN113986838A (zh) | 2022-01-28 |
CN113986838B true CN113986838B (zh) | 2022-03-11 |
Family
ID=79734608
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111616717.5A Active CN113986838B (zh) | 2021-12-28 | 2021-12-28 | 基于文件系统的海量小文件处理方法、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113986838B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114328030B (zh) * | 2022-03-03 | 2022-05-20 | 成都云祺科技有限公司 | 一种文件数据备份方法、系统及存储介质 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102332027A (zh) * | 2011-10-15 | 2012-01-25 | 西安交通大学 | 一种基于Hadoop的海量非独立小文件关联存储方法 |
WO2013091244A1 (zh) * | 2011-12-23 | 2013-06-27 | 华为技术有限公司 | 文件系统中数据的存储方法、访问方法及装置 |
CN103020315B (zh) * | 2013-01-10 | 2015-08-19 | 中国人民解放军国防科学技术大学 | 一种基于主从分布式文件系统的海量小文件存储方法 |
CN105069048A (zh) * | 2015-07-23 | 2015-11-18 | 东方网力科技股份有限公司 | 一种小文件存储方法、查询方法和装置 |
CN105677754B (zh) * | 2015-12-30 | 2019-03-26 | 华为技术有限公司 | 获取文件系统中子项元数据的方法、装置和系统 |
CN107480150B (zh) * | 2016-06-07 | 2020-12-08 | 阿里巴巴集团控股有限公司 | 一种文件加载方法和装置 |
US10503697B1 (en) * | 2016-06-30 | 2019-12-10 | EMC IP Holding Company LLC | Small file storage system |
CN107656939A (zh) * | 2016-07-26 | 2018-02-02 | 南京中兴新软件有限责任公司 | 文件写入方法及装置 |
CN107766374B (zh) * | 2016-08-19 | 2021-05-25 | 上海凯翔信息科技有限公司 | 一种海量小文件存储读取的优化方法和系统 |
CN107562915A (zh) * | 2017-09-12 | 2018-01-09 | 郑州云海信息技术有限公司 | 读取小文件的方法、装置和设备及计算机可读存储介质 |
US10684790B2 (en) * | 2018-04-27 | 2020-06-16 | EMC IP Holding Company LLC | Serverless solution for continuous data protection |
CN110795386B (zh) * | 2018-07-31 | 2022-07-01 | 杭州海康威视系统技术有限公司 | 一种数据写入方法和服务端 |
CN111143285A (zh) * | 2018-11-06 | 2020-05-12 | 深圳市茁壮网络股份有限公司 | 一种小文件存储文件系统以及小文件处理方法 |
CN110765086B (zh) * | 2019-10-25 | 2022-08-02 | 浪潮电子信息产业股份有限公司 | 一种小文件的目录读取方法、系统、电子设备及存储介质 |
CN112463724B (zh) * | 2020-11-05 | 2022-07-12 | 苏州浪潮智能科技有限公司 | 一种轻量级文件系统的数据处理方法和系统 |
CN113110801A (zh) * | 2021-04-15 | 2021-07-13 | 山东英信计算机技术有限公司 | 一种加快小文件读取速度的方法、系统、设备和存储介质 |
CN113032348A (zh) * | 2021-05-25 | 2021-06-25 | 湖南省第二测绘院 | 一种空间数据管理方法、系统及计算机可读存储介质 |
-
2021
- 2021-12-28 CN CN202111616717.5A patent/CN113986838B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113986838A (zh) | 2022-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9047301B2 (en) | Method for optimizing the memory usage and performance of data deduplication storage systems | |
US10353884B2 (en) | Two-stage front end for extent map database | |
US9317511B2 (en) | System and method for managing filesystem objects | |
Shilane et al. | Wan-optimized replication of backup datasets using stream-informed delta compression | |
JP5500309B2 (ja) | ストレージ装置 | |
US9798728B2 (en) | System performing data deduplication using a dense tree data structure | |
US8402071B2 (en) | Catalog that stores file system metadata in an optimized manner | |
US9286165B2 (en) | Apparatus and method for recovering partition using backup boot record information | |
CN103282899B (zh) | 文件系统中数据的存储方法、访问方法及装置 | |
US9594674B1 (en) | Method and system for garbage collection of data storage systems using live segment records | |
US9715505B1 (en) | Method and system for maintaining persistent live segment records for garbage collection | |
US20090049260A1 (en) | High performance data deduplication in a virtual tape system | |
CN109710455B (zh) | 基于fat32文件系统的删除文件恢复方法及系统 | |
US20070094315A1 (en) | Apparatus and method for storing and managing additional data in file system | |
CN108776682B (zh) | 基于对象存储的随机读写对象的方法和系统 | |
CN111045857A (zh) | 数据备份和恢复的方法、电子设备和计算机可读存储介质 | |
You et al. | Presidio: a framework for efficient archival data storage | |
US9430503B1 (en) | Coalescing transactional same-block writes for virtual block maps | |
WO2014000458A1 (zh) | 小文件处理方法及装置 | |
CN108475508B (zh) | 音频数据和保存在块处理存储系统中的数据的简化 | |
CN111104377B (zh) | 文件管理的方法、电子设备和计算机可读存储介质 | |
CN108287869A (zh) | 一种基于快速存储设备的海量小文件解决方法 | |
CN113986838B (zh) | 基于文件系统的海量小文件处理方法、系统及存储介质 | |
US9727588B1 (en) | Applying XAM processes | |
KR101688629B1 (ko) | 메타데이터 및 데이터 클러스터를 이용하는 파일 시스템 복구 방법 및 장치 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |