CN114168391A - Xfs下并行多线程文件备份恢复方法、系统及存储介质 - Google Patents
Xfs下并行多线程文件备份恢复方法、系统及存储介质 Download PDFInfo
- Publication number
- CN114168391A CN114168391A CN202111616720.7A CN202111616720A CN114168391A CN 114168391 A CN114168391 A CN 114168391A CN 202111616720 A CN202111616720 A CN 202111616720A CN 114168391 A CN114168391 A CN 114168391A
- Authority
- CN
- China
- Prior art keywords
- file
- directory
- output
- data
- specified
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
-
- 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
- G06F16/164—File meta data generation
-
- 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/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种XFS下并行多线程文件备份恢复方法、系统及存储介质,属于计算机数据处理领域。所述方法包括:线程创建;获取指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;获取目标文件的文件数据位置;获取指定文件和目标文件的偏移记录;恢复出指定数据。所述系统包括:线程创建模块;第一获取模块;第二获取模块;第三获取模块;恢复模块。本发明通过解析XFS系统结构,提取超级块、inode、目录项等关键元数据,模拟文件系统读取磁盘数据,并通过多线程的方式并行处理每批输出数据,充分调用了资源,数据处理速度大幅提升。
Description
技术领域
本发明属于计算机数据处理领域,涉及一种XFS下并行多线程文件备份恢复方法、系统及存储介质。
背景技术
XFS是目前Linux上主流的文件系统,在Centos7.0以上版本的Linux中,XFS取代EXT4作为默认的文件系统。
目前,在面对海量小文件时,XFS环境下并没有一种专门的备份恢复处理方法可以应对呈爆炸式增长的小文件,这极大地影响了XFS环境下数据备份恢复的处理效率。因此,如何快速备份恢复XFS环境下的海量小文件,成为当前急需解决的技术问题。
发明内容
本发明为了解决上述背景技术中的技术问题,本发明实施例提供了一种XFS下并行多线程文件备份恢复方法、系统及存储介质。所述技术方案如下:
第一个方面,提供了一种XFS下并行多线程文件备份恢复方法,所述方法包括步骤:
创建至少第一线程、第二线程和第三线程,三者并行处理数据;
将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出,其中,所述第一输出包括:指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;
其中,所述基础文件信息为inode号、父目录inode号、文件大小和文件名;所述基础文件夹信息为inode号、父目录inode号和文件名;
按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出,其中,所述第二输出为目标文件的文件数据位置;
按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出,并将目标文件的文件数据写入指定文件,其中,所述第三输出为目标文件的偏移记录;
根据写入文件数据后的指定文件,遍历第一输出和第三输出,恢复出指定数据。
在其中一个实施例中,所述将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出步骤,包括:
根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号;
根据所述设备编号,获取设备名;
根据所述设备名,获取XFS基本信息,其中,所述XFS基本信息包括:分配组块数和分配组个数;
根据所述指定目录的inode号和所述XFS基本信息,获取指定目录的inode;
解析所述指定目录的inode,获取指定目录的目录项;
遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息;
将指定目录的文件列表信息作为第一输出按批供应给下一线程。
在其中一个实施例中,所述按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出步骤,包括:
根据所述第一输出中的每批文件列表信息,判断所述目标文件对应的inode是否读入内存;若否,将所述目标文件对应的inode及其相邻inode读入内存;
根据内存中目标文件的inode,获取目标文件的data fork;
根据所述目标文件的data fork,获取目标文件的文件数据位置;
将所述目标文件的文件数据位置作为第二输出按批供应给下一线程。
在其中一个实施例中,所述按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出步骤,包括:
根据所述第二输出中的每批目标文件的文件数据位置,判断所述目标文件的文件数据是否读入内存;若否,将所述目标文件的文件数据及其相邻文件数据读入内存;
根据指定文件的路径,将内存中所述目标文件的文件数据写入指定文件,并持续获取所述目标文件的偏移记录作为第三输出。
在其中一个实施例中,所述恢复步骤,包括:
根据第一输出,获取指定目录的目录结构;
根据所述第一输出、所述第三输出和写入文件数据后的指定文件,获取目标文件的文件数据;
根据所述指定目录的目录结构和所述目标文件的文件数据,恢复出指定数据。
第二个方面,还提供了一种XFS下并行多线程文件备份恢复系统,所述系统包括:
线程创建模块,用于创建至少第一线程、第二线程和第三线程,三者并行处理数据;
第一获取模块,用于将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出,其中,所述第一输出包括:指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;
其中,所述基础文件信息为inode号、父目录inode号、文件大小和文件名;所述基础文件夹信息为inode号、父目录inode号和文件名;
第二获取模块,用于按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出,其中,所述第二输出为目标文件的文件数据位置;
第三获取模块,用于按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出,并将目标文件的文件数据写入指定文件,其中,所述第三输出为目标文件的偏移记录;
恢复模块,用于根据指定文件,遍历第一输出和第三输出,恢复出指定数据。
在其中一个实施例中,所述第一获取模块,包括:
指定目录信息获取单元,用于根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号;
设备名获取单元,用于根据所述设备编号,获取设备名;
XFS基本信息获取单元,用于根据所述设备名,获取XFS基本信息,其中,所述XFS基本信息包括:分配组块数和分配组个数;
指定目录inode获取单元,用于根据所述指定目录的inode号和所述XFS基本信息,获取指定目录的inode;
指定目录inode解析单元,用于解析所述指定目录的inode,获取指定目录的目录项;
文件列表信息获取单元,用于遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息;
第一供应单元,用于将指定目录的文件列表信息作为第一输出按批供应给下一线程;
所述第二线程模块,包括:
第一预读单元,用于根据所述文件列表信息,判断所述目标文件对应的inode是否读入内存;若否,将所述目标文件对应的inode及其相邻inode读入内存;
data fork获取单元,用于根据内存中目标文件的inode,获取目标文件的datafork;
文件数据位置获取单元,用于根据所述目标文件的data fork,获取目标文件的文件数据位置;
第二供应单元,用于将目标文件的文件数据位置作为第一输出按批供应给下一线程。
在其中一个实施例中,所述第三线程模块,包括:
第二预读单元,用于根据所述第二输出中的每批目标文件的文件数据位置,判断所述目标文件的文件数据是否读入内存;若否,将所述目标文件的文件数据及其相邻文件数据读入内存;
文件数据写入单元,用于将内存中所述目标文件的文件数据写入指定文件,并持续获取所述目标文件的偏移记录作为第三输出。在其中一个实施例中,所述恢复模块,包括:
目录结构获取单元,用于根据所述第一输出,获取指定目录的目录结构;
目标文件数据获取单元,用于根据所述第一输出、所述第三输出和写入文件数据后的指定文件,获取目标文件的文件数据;
数据恢复单元,用于根据所述指定目录的目录结构和所述目标文件的文件数据,恢复出指定数据。
第三个方面,还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述XFS下并行多线程文件备份恢复方法。
本发明的有益效果:
本发明通过多线程的方式并行处理每批输出数据,充分调用了资源,数据处理速度大幅提升。在对XFS结构的解析过程中,深度提取了文件拷贝时使用的超级块、inode、目录项等有效元数据,操作流程简便,并对inode进行预读,提升了inode的读取速率;对文件数据进行预读,提升了用户数据的读取速率,这样海量小文件的读取速率提升明显,备份恢复效率较高。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明 的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一中XFS下并行多线程文件备份恢复方法的流程图。
图2为本发明实施例一中XFS文件系统的系统结构图。
图3为本发明实施例一中XFS文件系统中inode的结构图。
图4为本发明实施例二中XFS下并行多线程文件备份恢复系统的结构图。
图5为本发明实施例二中第一获取模块的结构图。
图6为本发明实施例二中第二获取模块的结构图。
图7为本发明实施例二中第三获取模块的结构图。
图8为本发明实施例二中恢复模块的结构图。
图9为本发明实施例二中获取文件列表信息速率图。
图10为本发明实施例二中备份文件速率图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供的方法,应用范围包括但不限于下述环境:操作系统为CentOS7,文件系统为XFS,解析过程由C语言编写。
术语解释:
(1).指定目录:需要备份的目录;
(2).指定目录的路径:由用户指定的,需要备份的目录的路径;
(3).目标文件:所述指定目录下的文件,即需要备份的文件;
(4).指定文件:保存备份数据的文件,即用于保存所述目标文件的文件数据;
(5).指定文件的路径:由用户指定,保存备份数据的文件的路径;
(6).文件系统块号:同时包括了分配组号和分配组块号的结构,分配组块号占用低位,剩下的高位比特为分配组块号;其中,分配组块号是指该块在分配组中的偏移,长度为32位;
(7).物理块号:该块在分区中的物理偏移,通过所述物理偏移来读取块上的数据,通过文件系统块号和文件系统基本信息可以计算出物理块号。
实施例一
如图1所示,提供了一种XFS下并行多线程文件备份恢复方法,所述方法包括步骤:
S1.创建第一线程、第二线程和第三线程,三者并行处理数据。
S2.将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出,其中,所述第一输出包括:指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;
其中,所述基础文件信息为inode号、父目录inode号、文件大小和文件名;所述基础文件夹信息为inode号、父目录inode号和文件名。
通过直接读取磁盘,对XFS文件系统进行二进制解析,深度提取了文件拷贝时使用的有效元数据。
可以理解的是,指定目录及其子目录下全部目标文件的inode号、父目录inode号、数据大小和文件名,具体是指:
指定目录及其子目录下全部目标文件的inode号;
指定目录及其子目录下全部目标文件的父目录inode号;
指定目录及其子目录下全部目标文件的文件大小;
指定目录及其子目录下全部目标文件的文件名。
还可以理解的是,指定目录下全部子目录的inode号、父目录inode号和文件名,具体是指:
指定目录下全部子目录的inode号;
指定目录下全部子目录的父目录inode号;
指定目录下全部子目录的文件名。
另外,为了便于理解,下面我们对步骤S2进行详细说明。
可选的,由第一线程负责执行的所述S2步骤,包括:
S21.根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号。
inode是Linux操作系统中的索引节点,它包含文件系统中文件的相关信息,每个文件都对应的inode。
inode号是inode的编号,每个inode都有对应的inode号,inode号在每个文件系统中是唯一的。
Linux中的设备以设备文件的形式存放在磁盘中,每个块设备都有其设备编号,Linux中通过设备表维护设备编号和设备名的对应关系,一般的,设备表文件名为“partitions”。
一般的,根据指定目录的路径,通过stat系统调用,可以获取指定目录的信息,包括设备编号和指定目录的inode号。
S22.根据所述设备编号,获取设备名。
查询设备表,根据所述设备编号,获取设备名。
S23.根据所述设备名,获取XFS基本信息,其中,所述基本信息包括:分配组块数和分配组个数。
如图2所示,XFS分区由若干个块组成并被均分为若干个块组,也称为分配组(Allocation Groups,AG),例如分配组(AG)1、分配组(AG)2、分配组(AG)n。每个分配组由元数据和用户数据组成。其中,元数据是文件系统中隐藏的结构体,用户不能直接对元数据进行访问。SB、AGI、AGF、Inode及一些其他元数据均是分配组中重要的元数据。
其中,SB又称超级块,用于维护整个文件系统的基本信息,存放在0号分配组的第一个块的前512字节,其他分配组的该位置为超级块的备份;AGF用于分配组内部空闲空间的管理;AGI用于分配组内部inode节点的管理。
根据所述设备名,通过open系统调用打开该块设备。
通过读取所述块设备的前512字节获取超级块,通过二进制解析技术对超级块进行解析,获取XFS文件系统的基本信息。其中,所述XFS文件系统的基本信息可以包括:扇区字节数、inode字节数、每个块的字节数、根目录inode号、分配组块数和分配组个数。
S24.根据所述指定目录的inode号和所述XFS基本信息,获取指定目录的inode。
一般的,inode号为64位,从高位到低位分别代表inode所在分配组号、inode所在块在分配组内的块号、inode在块内的偏移。
通过所述inode所在分配组号、inode所在块在分配组内的块号、inode在块内的偏移和XFS基本信息,可以计算inode在文件系统中的偏移,获取指定目录的inode。
S25.解析所述指定目录的inode,获取指定目录的目录项。
如图3所示,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结构以获取目录项。
其中,通过core结构中的format判断存储方式,1表示local,2表示extents,3表示btree。
其中,所述步骤S25,包括:
S251.解析所述指定目录的inode,获取core中的format;
S252.若format为1,即目录类型为local,遍历inode中的data fork结构,获取所述指定目录的目录项;若format为2,即目录类型为extents, 解析data fork中的bmx结构,遍历extents索引指向的块,获取所述指定目录的目录项;若format为3,即目录类型为btree,解析data fork中的bmbt结构,获取B+树的根节点并遍历B+树,获取叶子节点中的rec结构,遍历rec结构指向的块,获取所述指定目录的目录项。
S26.遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息,其中,所述文件列表信息包括:指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息。其中,所述基础文件信息为inode号、父目录inode号、文件大小和文件名;所述基础文件夹信息为inode号、父目录inode号和文件名。
S27.将指定目录的文件列表信息作为第一输出按批供应给第二线程。
S3.按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出,其中,所述第二输出为目标文件的文件数据位置。
为了便于理解,下面我们对步骤S3进行详细说明。
可选的,由第二线程负责执行的所述S3步骤,包括:
S31.根据所述第一输出中的每批文件列表信息,判断所述目标文件对应的inode是否读入内存;若否,将所述目标文件对应的inode及其相邻inode读入内存。
S32.根据内存中目标文件的inode,获取目标文件的data fork。
S33.根据所述目标文件的data fork,获取目标文件的文件数据位置。
S34.将所述目标文件的文件数据位置作为第二输出按批供应给第二线程。
需要注意的是,XFS中文件数据有两种存储方式。一般的,文件数据的存储方式为extents,文件数据使用extents索引并存放在data fork的bmx结构中;当文件数据在磁盘上的分布非常分散,data fork无法存放下全部的bmx结构,存储方式为btree,通过B+树分层级间接索引相关块,其实现方式与目录项的btree类型相同。
其中,通过core结构中的format判断存储方式,2表示extents,3表示btree。
因此,在步骤S4中,上述定位目标文件的文件数据的过程,应当首先判断目标文件的数据存储方式;若目标文件的数据存储方式为extents,解析data fork中的bmx结构,获取所述目标文件的文件数据在磁盘上的位置;若目标文件的数据存储方式为btree,解析data fork中的bmbt结构,获取B+树的根节点并遍历B+树,获取叶子节点中的rec结构,获取所述目标文件的文件数据在磁盘上的位置。
还可选的,所述步骤S33,包括:判断所述目标文件的format类型,若format为2,即文件数据存储方式为extents,解析data fork中的bmx结构,获取所述目标文件的文件数据在磁盘上的位置;若format为3,即文件数据存储方式为btree,解析data fork中的bmbt结构,获取B+树的根节点并遍历B+树,获取所述目标文件的文件数据在磁盘上的位置。
S4.按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出,并将目标文件的文件数据写入指定文件,其中,所述第三输出为目标文件的偏移记录。
为了便于理解,下面我们对步骤S4进行详细说明。
可选的,由三线程负责执行的所述S4步骤,包括:
S41.根据所述第二输出中的每批目标文件的文件数据位置,判断所述目标文件的文件数据是否读入内存;若否,将所述目标文件的文件数据及其相邻文件数据读入内存;
S42.根据指定文件的路径,将内存中所述目标文件的文件数据写入指定文件,并持续获取所述目标文件的偏移记录作为第三输出。
S5.根据写入文件数据后的指定文件,遍历第一输出和第三输出,恢复出指定数据。
可选的,所述步骤S5,包括:
S51.根据第一输出,获取指定目录的目录结构;
S52.根据所述第一输出、所述第三输出和写入文件数据后的指定文件,获取目标文件的文件数据;
53.根据所述指定目录的目录结构和所述目标文件的文件数据,恢复出指定数据。
本实施例的技术方案,通过解析XFS系统结构,提取inode、目录项等关键元数据,模拟文件系统读取磁盘数据,并通过多线程的方式并行处理每批输出数据,充分调用了资源,数据处理速度大幅提升,实现了XFS下海量小文件的高速读写,使得数据备份效率提升明显。
实施例二
如图4所示,在一个实施例中,提供了一种XFS下并行多线程文件备份恢复系统,该系统包括:
线程创建模块1001,用于创建至少第一线程、第二线程和第三线程,三者并行处理数据;
第一获取模块1002,用于将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出,其中,所述第一输出包括:指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;
其中,所述基础文件信息为inode号、父目录inode号、文件大小和文件名;所述基础文件夹信息为inode号、父目录inode号和文件名;
第二获取模块1003,用于按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出,其中,所述第二输出为目标文件的文件数据位置;
第三获取模块1004,用于按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出,并将目标文件的文件数据写入指定文件,其中,所述第三输出为目标文件的偏移记录;
恢复模块1005,用于根据指定文件,遍历第一输出和第三输出,恢复出指定数据。
可选的,在本实施例的基础上,如图5所示,所述第一获取模块1002,包括:
指定目录信息获取单元10021,用于根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号;
设备名获取单元10022,用于根据所述设备编号,获取设备名;
XFS基本信息获取单元10023,用于根据所述设备名,获取XFS基本信息,其中,所述XFS基本信息包括:分配组块数和分配组个数;
指定目录inode获取单元10024,用于根据所述指定目录的inode号和所述XFS基本信息,获取指定目录的inode;
指定目录inode解析单元10025,用于解析所述指定目录的inode,获取指定目录的目录项;
文件列表信息获取单元10026,用于遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息;
第一供应单元10027,用于将指定目录的文件列表信息作为第一输出按批供应给第一线程;
如图6所示,所述第二线程模块1003,包括:
第一预读单元10031,用于根据所述文件列表信息,判断所述目标文件对应的inode是否读入内存;若否,将所述目标文件对应的inode及其相邻inode读入内存;
data fork获取单元10032,用于根据内存中目标文件的inode,获取目标文件的data fork;
文件数据位置获取单元10033,用于根据所述目标文件的data fork,获取目标文件的文件数据位置;
第二供应单元10034,用于将目标文件的文件数据位置作为第一输出按批供应给第二线程。
可选的,如图7所示,在本实施例的基础上,所述第三线程模块1004,包括:
第二预读单元10041,用于根据所述第二输出中的每批目标文件的文件数据位置,判断所述目标文件的文件数据是否读入内存;若否,将所述目标文件的文件数据及其相邻文件数据读入内存;
文件数据写入单元10042,用于将内存中所述目标文件的文件数据写入指定文件,并持续获取所述目标文件的偏移记录作为第三输出。
可选的,如图8所示,在本实施例的基础上,所述恢复模块1005,包括:
目录结构获取单元10051,用于根据所述第一输出,获取指定目录的目录结构;
目标文件数据获取单元10052,用于根据所述第一输出、所述第三输出和写入文件数据后的指定文件,获取目标文件的文件数据;
数据恢复单元10053,用于根据所述指定目录的目录结构和所述目标文件的文件数据,恢复出指定数据。
本实施例的技术方案,线程创建模块1001,用于创建能够并行处理数据的第一线程、第二线程和第三线程;第一获取模块1002,用于将指定目录的路径供应给所述第一线程进行解析处理,持续获取指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;第二获取模块1003,用于按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取目标文件的文件数据位置;第三获取模块1004,用于按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取目标文件的偏移记录;恢复模块1005,用于根据指定文件,遍历第一输出和第三输出,恢复出指定数据。解决了现有技术中XFS文件系统下海量小文件处理效率较低的技术问题,基于二进制解析,本实施例对inode进行预读,提升了inode的读取速率;对文件数据进行预读,提升了用户数据的读取速率,在双预读机制下,海量小文件的读取速率提升明显,备份效率较高。
下面,我们提供一组对比实验,以便于进一步阐述本实施例,具体如下:
本实验的虚拟实验环境如表1所示。文件系统版本为XFS V5,在CentOS的7.0版本后开始默认使用,是目前最为常见的XFS版本。
表1 实验环境
本实验分别对量级为10万、50万、100万、500万和1000万的小文件目录进行实验,目录下既有几字节的小文件,又有占用一个块以上空间的“较大”的小文件,其总大小与量级成正比。
对比例1使用的方法是系统调用,通过opendir、readdir和stat获取文件列表信息,通过C语言标准库函数fopen、fread、fwrite和fclose实现文件数据的读写。
本实验的评价指标为获取文件列表信息时间和备份文件时间。经实验,结果表2、图9和图10,具体如下:
表2 海量小文件对比实验数据
结合表2和图9可知,随着目录量级的增大,获取文件列表速率提升并趋于稳定,而对比例1的文件列表信息获取速率随着量级的增大无明显变化。因此,在海量小文件的情形下,本实施例能够提升获取文件列表信息的速率。
结合表2和图10可知,随着目录量级的增大,备份文件速率提升。与对比例1相比,在海量小文件的情形下,本实施例能够大幅提升读写速率,进而提高数据备份效率。
实施例三
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例一所述的XFS下并行多线程文件备份恢复方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种XFS下并行多线程文件备份恢复方法,其特征在于,所述方法包括步骤:
创建至少第一线程、第二线程和第三线程,三者并行处理数据;
将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出,其中,所述第一输出包括:指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;
其中,所述基础文件信息为inode号、父目录inode号、文件大小和文件名;所述基础文件夹信息为inode号、父目录inode号和文件名;
按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出,其中,所述第二输出为目标文件的文件数据位置;
按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出,并将目标文件的文件数据写入指定文件,其中,所述第三输出为目标文件的偏移记录;
根据写入文件数据后的指定文件,遍历第一输出和第三输出,恢复出指定数据。
2.根据权利要求1所述的XFS下并行多线程文件备份恢复方法,其特征在于,所述将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出步骤,包括:
根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号;
根据所述设备编号,获取设备名;
根据所述设备名,获取XFS基本信息,其中,所述XFS基本信息包括:分配组块数和分配组个数;
根据所述指定目录的inode号和所述XFS基本信息,获取指定目录的inode;
解析所述指定目录的inode,获取指定目录的目录项;
遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息;
将指定目录的文件列表信息作为第一输出按批供应给下一线程。
3.根据权利要求1所述的XFS下并行多线程文件备份恢复方法,其特征在于,所述按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出步骤,包括:
根据所述第一输出中的每批文件列表信息,判断所述目标文件对应的inode是否读入内存;若否,将所述目标文件对应的inode及其相邻inode读入内存;
根据内存中目标文件的inode,获取目标文件的data fork;
根据所述目标文件的data fork,获取目标文件的文件数据位置;
将所述目标文件的文件数据位置作为第二输出按批供应给下一线程。
4.根据权利要求1所述的XFS下并行多线程文件备份恢复方法,其特征在于,所述按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出步骤,包括:
根据所述第二输出中的每批目标文件的文件数据位置,判断所述目标文件的文件数据是否读入内存;若否,将所述目标文件的文件数据及其相邻文件数据读入内存;
根据指定文件的路径,将内存中所述目标文件的文件数据写入指定文件,并持续获取所述目标文件的偏移记录作为第三输出。
5.根据权利要求1所述的XFS下并行多线程文件备份恢复方法,其特征在于,所述根据写入文件数据后的指定文件,遍历第一输出和第三输出,恢复出指定数据步骤,包括:
根据第一输出,获取指定目录的目录结构;
根据所述第一输出、所述第三输出和写入文件数据后的指定文件,获取目标文件的文件数据;
根据所述指定目录的目录结构和所述目标文件的文件数据,恢复出指定数据。
6.一种XFS下并行多线程文件备份恢复系统,其特征在于,所述系统包括:
线程创建模块,用于创建至少第一线程、第二线程和第三线程,三者并行处理数据;
第一获取模块,用于将指定目录的路径供应给所述第一线程进行解析处理,持续获取第一输出,其中,所述第一输出包括:指定目录及其子目录下目标文件的基础文件信息,或指定目录下子目录的基础文件夹信息;
其中,所述基础文件信息为inode号、父目录inode号、文件大小和文件名;所述基础文件夹信息为inode号、父目录inode号和文件名;
第二获取模块,用于按批次将所述第一输出供应给所述第二线程进行预读处理,持续获取第二输出,其中,所述第二输出为目标文件的文件数据位置;
第三获取模块,用于按批次将所述第二输出供应给所述第三线程进行预读处理,持续获取第三输出,并将目标文件的文件数据写入指定文件,其中,所述第三输出为目标文件的偏移记录;
恢复模块,用于根据指定文件,遍历第一输出和第三输出,恢复出指定数据。
7.根据权利要求6所述的XFS下并行多线程文件备份恢复系统,其特征在于,所述第一获取模块,包括:
指定目录信息获取单元,用于根据指定目录的路径,获取指定目录的信息,其中,所述指定目录的信息包括:设备编号和指定目录的inode号;
设备名获取单元,用于根据所述设备编号,获取设备名;
XFS基本信息获取单元,用于根据所述设备名,获取XFS基本信息,其中,所述XFS基本信息包括:分配组块数和分配组个数;
指定目录inode获取单元,用于根据所述指定目录的inode号和所述XFS基本信息,获取指定目录的inode;
指定目录inode解析单元,用于解析所述指定目录的inode,获取指定目录的目录项;
文件列表信息获取单元,用于遍历并解析所述指定目录的目录项,获取指定目录的文件列表信息;
第一供应单元,用于将指定目录的文件列表信息作为第一输出按批供应给下一线程;
所述第二线程模块,包括:
第一预读单元,用于根据所述文件列表信息,判断所述目标文件对应的inode是否读入内存;若否,将所述目标文件对应的inode及其相邻inode读入内存;
data fork获取单元,用于根据内存中目标文件的inode,获取目标文件的data fork;
文件数据位置获取单元,用于根据所述目标文件的data fork,获取目标文件的文件数据位置;
第二供应单元,用于将目标文件的文件数据位置作为第一输出按批供应给下一线程。
8.根据权利要求6所述的XFS下并行多线程文件备份恢复系统,其特征在于,所述第三线程模块,包括:
第二预读单元,用于根据所述第二输出中的每批目标文件的文件数据位置,判断所述目标文件的文件数据是否读入内存;若否,将所述目标文件的文件数据及其相邻文件数据读入内存;
文件数据写入单元,用于将内存中所述目标文件的文件数据写入指定文件,并持续获取所述目标文件的偏移记录作为第三输出。
9.根据权利要求6所述的XFS下并行多线程文件备份恢复系统,其特征在于,所述恢复模块,包括:
目录结构获取单元,用于根据所述第一输出,获取指定目录的目录结构;
目标文件数据获取单元,用于根据所述第一输出、所述第三输出和写入文件数据后的指定文件,获取目标文件的文件数据;
数据恢复单元,用于根据所述指定目录的目录结构和所述目标文件的文件数据,恢复出指定数据。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5任一项所述XFS下并行多线程文件备份恢复系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111616720.7A CN114168391A (zh) | 2021-12-28 | 2021-12-28 | Xfs下并行多线程文件备份恢复方法、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111616720.7A CN114168391A (zh) | 2021-12-28 | 2021-12-28 | Xfs下并行多线程文件备份恢复方法、系统及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114168391A true CN114168391A (zh) | 2022-03-11 |
Family
ID=80488211
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111616720.7A Pending CN114168391A (zh) | 2021-12-28 | 2021-12-28 | Xfs下并行多线程文件备份恢复方法、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114168391A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114546980A (zh) * | 2022-04-25 | 2022-05-27 | 成都云祺科技有限公司 | 一种nas文件系统的备份方法、系统及存储介质 |
-
2021
- 2021-12-28 CN CN202111616720.7A patent/CN114168391A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114546980A (zh) * | 2022-04-25 | 2022-05-27 | 成都云祺科技有限公司 | 一种nas文件系统的备份方法、系统及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4157858B2 (ja) | ストレージ・エリア・ネットワーク(san)ファイル・システムの並列高速バックアップ | |
JP5500309B2 (ja) | ストレージ装置 | |
US9830324B2 (en) | Content based organization of file systems | |
CN103282899B (zh) | 文件系统中数据的存储方法、访问方法及装置 | |
JP5233233B2 (ja) | 情報検索システム、情報検索用インデックスの登録装置、情報検索方法及びプログラム | |
US20170249216A1 (en) | Native snapshots in distributed file sytems | |
US8095678B2 (en) | Data processing | |
CN102693286B (zh) | 一种对文件内容与元数据进行组织管理的方法 | |
KR20060095448A (ko) | 데이터베이스 내부에 표현된 파일 시스템 | |
KR20090063733A (ko) | 다중 복제를 지원하는 분산 파일 시스템에서 데이터 서버의복구 방법 및 그에 적당한 메타데이터 스토리지 및 저장방법 | |
US20110153677A1 (en) | Apparatus and method for managing index information of high-dimensional data | |
CN102541982B (zh) | 一种组织和访问元数据文件日志的方法 | |
CN114168391A (zh) | Xfs下并行多线程文件备份恢复方法、系统及存储介质 | |
CN109947730A (zh) | 元数据恢复方法、装置、分布式文件系统及可读存储介质 | |
US20180373727A1 (en) | Management of b-tree leaf nodes with variable size values | |
JPH0358249A (ja) | フアイルのアクセス方法 | |
CN109800208B (zh) | 网络溯源系统及其数据处理方法、计算机存储介质 | |
CN113986838A (zh) | 基于文件系统的海量小文件处理方法、系统及存储介质 | |
Whitehouse | The GFS2 filesystem | |
CN115454947A (zh) | 一种非结构化数据的存储方法、装置、设备及存储介质 | |
CN114168392A (zh) | Ntfs串行多线程文件备份恢复方法、系统及存储介质 | |
CN111444179B (zh) | 数据处理方法、装置、存储介质及服务器 | |
US20240086362A1 (en) | Key-value store and file system | |
Peng et al. | A data recovery method for NTFS files system | |
JP3016255B2 (ja) | データベース管理システム |
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 |