CN108062357A - F2fs文件系统的删除文件恢复方法及存储介质 - Google Patents
F2fs文件系统的删除文件恢复方法及存储介质 Download PDFInfo
- Publication number
- CN108062357A CN108062357A CN201711213034.9A CN201711213034A CN108062357A CN 108062357 A CN108062357 A CN 108062357A CN 201711213034 A CN201711213034 A CN 201711213034A CN 108062357 A CN108062357 A CN 108062357A
- Authority
- CN
- China
- Prior art keywords
- file
- node
- inode
- node number
- list item
- 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.)
- Granted
Links
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/18—File system types
- G06F16/1847—File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
-
- 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/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种F2FS文件系统的删除文件恢复方法及存储介质,方法包括:根据根目录文件的节点号和孤儿文件节点的节点号,从第一节点地址表、第二节点地址表或摘要块中读取对应的表项;根据表项中的块地址,读取I节点,并记录节点号;若I节点为目录文件则获取子文件的节点号;继续根据子文件的节点号获取对应的表项进行解析;若I节点为普通文件,则读取文件数据;获取第二节点地址表中节点号未被记录的且块地址有效的表项;若表项对应的节点为I节点且I节点为普通文件,则读取文件数据。本发明结合了文件目录数据结构的特性和NAT表结构特性,可恢复出删除文件。
Description
技术领域
本发明涉及数据恢复技术领域,尤其涉及一种F2FS文件系统的删除文件恢复方法及存储介质。
背景技术
F2FS(Flash Friendly File System)是由三星电子开发的专门为基于NAND的存储设备设计的新型开源Flash文件系统。特别针对NAND闪存存储介质做了友好设计,主要数据结构的设计对Flash物理地址进行了对齐。
F2FS作为一种新兴文件系统,目前市面上对F2FS解析恢复相关研究较少,随着华为,Moto、谷歌等越来越多手机厂商开始使用F2FS作为手机文件系统,对F2FS文件系统的数据恢复越来越迫切。
发明内容
本发明所要解决的技术问题是:提供一种F2FS文件系统的删除文件恢复方法及存储介质,可恢复出F2FS文件系统的删除文件。
为了解决上述技术问题,本发明采用的技术方案为:一种F2FS文件系统的删除文件恢复方法,包括:
读取超级块,并根据所述超级块,读取最新版本的检查点和根目录文件的节点号;
根据所述检查点,读取节点地址表的位图、孤儿文件节点和摘要块;
根据所述节点地址表的位图,得到第一节点地址表和第二节点地址表;
根据所述根目录文件的节点号和孤儿文件节点的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
根据所述对应的表项中的块地址,读取I节点,并记录所述I节点的节点号;
若所述I节点为目录文件,则读取目录数据块;
解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号;
根据所述子文件的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
继续执行所述“根据所述对应的表项中记录的块地址,读取I节点,并记录所述I节点的节点号”的步骤;
若所述I节点为普通文件,则读取文件数据;
获取所述第二节点地址表中节点号未被记录的且块地址有效的表项;
若所述表项对应的节点为I节点且所述I节点为普通文件,则读取文件数据。
本发明还涉及一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上所述的步骤。
本发明的有益效果在于:根据超级块,读取得到根目录的节点号、两个节点地址表、孤儿文件节点和摘要块,根据节点号从节点地址表或摘要块中读取对应的表项,根据表项中的块地址读取得到I节点,若I节点为目录文件,则获取子文件的节点号,继续进行遍历,若I节点为普通文件则读取文件数据;根目录和孤儿文件遍历完后,继续遍历并解析出第二节点地址表中未被解析的文件数据。本发明结合了文件目录数据结构的特性和NAT表结构特性,可完美地恢复出删除文件。
附图说明
图1为本发明一种F2FS文件系统的删除文件恢复方法的流程图;
图2为F2FS文件系统六个区域的结构示意图;
图3为F2FS文件系统的NAT映射示意图;
图4为本发明实施例一的方法流程图一;
图5为本发明实施例一的方法流程图二;
图6为本发明实施例一的方法流程图三。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。
本发明最关键的构思在于:根据节点号从节点地址表或摘要块中读取对应的表项,根据表项中的块地址读取得到I节点,若I节点为目录文件,则获取子文件的节点号,继续进行遍历,若I节点为普通文件则读取文件数据,后续继续遍历并解析出第二节点地址表中未被解析的文件数据。
F2FS文件系统介绍:
F2FS的扇区大小为512字节的整数倍。最小为512字节,最大为4096字节,默认为512字节。
F2FS的Block(块)大小为固定的4096字节,一个块包含一个或者多个扇区。Block在F2FS中是极为重要的概念,重要的数据结构设计都是Block对齐的。
连续的Block集合组成Segment(段),Segment大小也是固定值,为2M。当前正在操作的Segment中包含了一个Summary block(摘要块),F2FS为了防止反复写NAT区域,设计了Journal机制,即把少量修改NAT的Natentry先缓存到Summary block中,需要写Checkpoint时再更新到NAT中,减少NAT区域写次数,延长存储介质使用寿命。
F2FS的main area(数据区域)中包含两种类型的Block:Data和Node(节点)。Node存储文件元数据,Data存储文件的实际数据。Node包含三种类型:Inode(I节点)、DirectNode(直接索引节点)和Indirect Node(间接索引节点)。每个Node对应NAT中的一个表项Natentry,每个Natentry包含Node Number(节点号)和Node Address(节点地址)。Inode包含了文件的大小、文件名、修改时间、访问时间、文件模式(File mode,用于判断是目录文件还是普通文件)、是否内嵌文件标志(Inline flag)以及数据块地址列表和用于索引数据的Node number列表(或者Inline文件的文件数据)等文件元数据信息。每个Inode对应一个普通文件或者目录文件,Inode的Node numbe即可作为文件唯一ID。Direct Node和IndirectNode为文件数据索引Node,Direct Node的每一个表项指向的是文件数据块地址(普通文件数据或者目录文件数据Dentry Block),Indirect Node的每一个表项指向的是NAT表中的一个表项即文件数据间接索引Node,比如一个一级间接索引Indirect Node指向NAT表中的Direct Node列表,一个二级间接索引Indirect Node指向一级间接索引Indirect Node列表。
如图2所示,F2FS将整个卷切分成六个区域,分别是Super Block(超级块),CheckPoint(检查点),Segment Info Table(SIT,段信息区),Node Address Table(NAT,节点地址表),Segment Summary Area(SSA,段摘要区),Main Area(数据区域)。除了SuperBlock只占用一个Segment,其他模块都占用至少两个或者更多连续Segment。
F2FS中Super block区域占用一个Segment,位于卷偏移1024字节处。该区域包含两个Super block,在F2FS加载时读取第一个Super block,如果第一个Super block数据校验失败则读取第二个Super block。Super block主要记录了F2FS签名,Sector、Block、Segment等大小,Root number(根目录文件的Node Number,固定值为3)及Checkpoint、SIT、NAT、SSA、Main Area大小和起始偏移地址等参数信息。
F2FS中Checkpoint区域占用两个Segment,文件系统加载时读取两个Segment中的Checkpoint并对校验有效性和比较版本号,有效且版本较高的作为当前Checkpoint。Checkpoint记录了空闲空间总容量、下一次写入数据的Segment的地址及其他可更改信息。与传统Checkpoint不同之处F2FS Checkpoint记录了有效NAT/SIT的Bitmap(位图),Orphaninode(孤儿文件节点,即由于系统奔溃或者断电等异常产生的无法找到上级目录的文件节点)列表及当前有效的Segment的Summary block。
NAT(NODE ADDRESS TABLE,节点地址表)是存储在Main区域的所有节点(inode和索引节点)的数据块地址表。NAT中的每一个表项称为Natentry,每个Natentry包含一个Node number和Node在卷中的块地址Node Address。F2FS中包含两份NAT,它们以Segment为粒度交叉存储,通过最新版本Checkpoint中记录的Natbitmap(节点地址表位图)访问到的NAT表,本发明中把该NAT称为NAT1(第一节点地址表),通过该Natbitmap取反访问到的NAT表称为NAT2(第二节点地址表)。所有的节点(Node)块由NAT映射,如图3所示,这意味着每个Node的位置由NAT表来转换。考虑Wandering tree(游离树)问题,F2FS使用这种节点映射索引方式可以切断由于叶子节点修改操作引起的节点更新传播问题。
请参阅图1,一种F2FS文件系统的删除文件恢复方法,包括:
读取超级块,并根据所述超级块,读取最新版本的检查点和根目录文件的节点号;
根据所述检查点,读取节点地址表的位图、孤儿文件节点和摘要块;
根据所述节点地址表的位图,得到第一节点地址表和第二节点地址表;
根据所述根目录文件的节点号和孤儿文件节点的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
根据所述对应的表项中的块地址,读取I节点,并记录所述I节点的节点号;
若所述I节点为目录文件,则读取目录数据块;
解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号;
根据所述子文件的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
继续执行所述“根据所述对应的表项中记录的块地址,读取I节点,并记录所述I节点的节点号”的步骤;
若所述I节点为普通文件,则读取文件数据;
获取所述第二节点地址表中节点号未被记录的且块地址有效的表项;
若所述表项对应的节点为I节点且所述I节点为普通文件,则读取文件数据。
从上述描述可知,本发明的有益效果在于:结合了文件目录数据结构的特性和NAT表结构特性,可完美地恢复出删除文件。
进一步地,所述“读取超级块”之后,进一步包括:
对所述超级块进行有效性校验。
进一步地,所述“对所述超级块进行有效性校验”具体为:
若所述超级块的块大小为扇区大小的整数倍,且段大小为块大小的整数倍,则判定所述超级块有效。
由上述描述可知,F2FS的超级块区域中包含两个超级块,在F2FS加载时读取第一个超级块,如果第一个超级块数据校验失败则读取第二个超级块。
进一步地,所述“从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项”具体为:
若为删除文件的节点号,则从所述第二节点地址表中获取所述节点号对应的表项;
若为正常文件的节点号,则判断所述摘要块中是否存在所述节点号对应的表项;
若是,则从所述摘要块中获取所述节点号对应的表项;
若否,则从所述第一节点地址表中获取所述节点号对应的表项。
由上述描述可知,对于删除文件的节点号,从第二节点地址表中获取对应的表项;对于正常文件的节点号,则先在摘要块中读取对应的表项,若读取不到,则再从第一节点地址表中读取。
进一步地,所述“若所述I节点为目录文件,则读取目录数据块”具体为:
根据所述I节点的文件模式,判断所述I节点是否为目录文件;
若是,则根据所述I节点的内嵌标志,判断是否内嵌目录;
若内嵌目录,则读取内嵌目录数据块;
若未内嵌目录,则根据所述I节点记录的数据块地址列表和节点号列表,读取目录数据块。
进一步地,所述“解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号”具体为:
依次获取所述目录数据块的一表项;
若所述一表项中的掩码值为1,则判定所述一表项对应的子文件为正常子文件,获取所述一表项中的节点号;
若所述一表项中的掩码值为0且节点号不为0,则判定所述一表项对应的子文件为删除子文件,获取所述一表项中的节点号。
由上述描述可知,若是目录文件,则获取其子文件的节点号,以便后续继续根据子文件的节点号进行解析。
进一步地,所述“获取所述第二节点地址表中节点号未被记录的且块地址有效的表项;若所述表项对应的节点为I节点且所述I节点为普通文件,则读取文件数据”具体为:
在所述第二节点地址表中依次获取一节点号;
若所述一节点号未被记录,则从所述第二节点地址表中获取所述一节点号对应的表项;
若所述一节点号对应的表项中的块地址不为0,则根据所述块地址获取所述表项对应的节点;
若根据所述节点读取的数据块中的节点号与其所属文件的I节点号一致,则判定所述节点为I节点;
若所述I节点为普通文件,则读取文件数据。
由上述描述可知,解析第二节点地址表中还未被解析的表项,保证恢复的文件数据的完整性。
进一步地,所述“若所述I节点为普通文件,则读取文件数据”具体为:
根据所述I节点的文件模式,判断所述I节点是否为普通文件;
若是,则根据所述I节点的内嵌标志,判断是否内嵌文件;
若内嵌文件,则从内嵌文件读取文件数据;
若未内嵌文件,则根据所述I节点记录的数据块地址列表和节点号列表,读取文件数据。
本发明还提出一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上所述的步骤。
实施例一
请参照图4-6,本发明的实施例一为:一种F2FS文件系统的删除文件恢复方法,本方法主要包括两个部分,首先从根目录开始递归解析,如果是目录文件则读取目录数据块,判断该目录文件下的子文件是正常文件还是删除文件,并解析下一级目录,如果是普通文件则读取文件数据。在上述解析过程中,是从第一节点地址表(NAT1)、第二节点地址表(NAT2)和摘要块(Summary block)中获取对应的表项,在完成上述解析后,还需遍历第二节点地址表,解析出还未解析的I节点对应的文件。
如图4所示,第一部分的解析过程包括如下步骤:
S101:读取超级块,并根据所述超级块,读取最新版本的检查点和根目录文件的节点号。由上述对F2FS文件系统的介绍可知,Super block区域占用一个Segment,位于卷偏移1024字节处,通过该信息即可读取到超级块;并且由于超级块中记录了根目录的节点号以及检查点的大小和起始偏移地址等参数信息,因此可以根据超级块读取得到检查点和根目录的节点号。
进一步地,在读取超级块后,还对超级块进行有效性校验,具体地,若所述超级块的块大小为扇区大小的整数倍,且段大小为块大小的整数倍,则判定所述超级块有效。
S102:根据所述检查点,读取节点地址表的位图、孤儿文件节点和摘要块;由于F2FS文件系统的检查点记录了有效NAT/SIT的位图、孤儿文件节点列表及当前有效的段的摘要块,因此可通过检查点,读取得到节点地址表的位图、孤儿文件节点和摘要块。
S103:根据所述节点地址表的位图,得到第一节点地址表和第二节点地址表;具体地,根据节点地址表的位图,访问到第一节点地址表NAT1;将所述节点地址表的位图取反,并根据取反后的所述节点地址表的位图,得到第二节点地址表NAT2。
S104:根据所述根目录文件的节点号和孤儿文件节点的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
S105:根据所述对应的表项中的块地址,读取I节点,并记录所述I节点的节点号;
S106:根据所述I节点的文件模式,判断所述I节点是否为目录文件,若是,则执行步骤S107,若否,则表示所述I节点为普通文件,执行步骤S110。
S107:读取目录数据块。具体地,根据所述I节点的内嵌标志Inline flag,判断是否内嵌目录;若内嵌目录,则读取内嵌目录数据块;若未内嵌目录,则根据所述I节点记录的数据块地址列表和节点号列表,读取目录数据块。
S108:解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号。该步骤中的目录数据块包括步骤S107中的有内嵌目录时的内嵌目录数据块和未内嵌目录时的目录数据块。
在F2FS的目录数据块Dentry block中保存了子文件的掩码值、Node number、哈希值、文件类型等信息。若子文件的掩码值为1,则表示子文件是正常文件,若掩码为0且Nodenumber、哈希值、文件类型等信息不为0,则表示子文件是删除文件。
因此,在执行该步骤时,依次获取所述目录数据块的一表项;若所述一表项中的掩码值为1,则判定所述一表项对应的子文件为正常子文件,获取所述一表项中的节点号;若所述一表项中的掩码值为0且节点号不为0,则判定所述一表项对应的子文件为删除子文件,获取所述一表项中的节点号。
S109:根据子文件的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;执行步骤S105。
S110:读取文件数据。具体地,根据所述I节点的内嵌标志,判断是否内嵌文件;若内嵌文件,则从内嵌文件读取文件数据;若未内嵌文件,则根据所述I节点记录的数据块地址列表和节点号列表,读取文件数据。
对于步骤S104和步骤S109,都是根据节点号获取对应的表项,如图5所示,其中的“从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项”具体包括如下步骤:
S201:判断节点号是否为删除文件的节点号,若是,则执行步骤S202,若否,则表示节点号为正常文件的节点号,执行步骤S203。
S202:从所述第二节点地址表中获取所述节点号对应的表项;
S203:判断所述摘要块中是否存在所述节点号对应的表项,若是,则执行步骤S204,若否,则执行步骤S205。
S204:从所述摘要块中获取所述节点号对应的表项;
S205:从所述第一节点地址表中获取所述节点号对应的表项。
由于F2FS为了防止反复写NAT区域,设计了Journal机制,即把少量修改NAT的Natentry先缓存到Summary block中,需要写Checkpoint时再更新到NAT中,可减少NAT区域写次数,延长存储介质使用寿命。
同时,F2FS中包含两份NAT,它们以Segment为粒度交叉存储,通过最新版本Checkpoint中记录的Natbitmap(节点地址表位图)访问到的NAT表,本发明中把该NAT称为NAT1(第一节点地址表),通过该Natbitmap取反访问到的NAT表称为NAT2(第二节点地址表),而被删除文件对应的节点号一般就存储在NAT2中。
因此,对于删除文件的节点号,从第二节点地址表中获取对应的表项;对于正常文件的节点号,则先在摘要块中读取对应的表项,若读取不到,则再从第一节点地址表中读取。
在完成上述步骤后,第二节点地址表中可能还存在未被解析的表项,因此还需对第二节点地址表进行遍历,如图6所示,包括如下步骤:
S301:根据第二节点地址表的大小,统计得到第二节点地址表中的节点号总数,也即表项总数。
S302:初始化num=3,即从根目录文件的节点号开始遍历。
S303:判断在第二节点地址表的第num个表项中的节点号是否已被记录,若是,则执行步骤S308,若否,则执行步骤S304。NAT中记录文件的Node number,Node number在NAT中顺序存储。该步骤所述的记录指的是步骤S105中的记录操作。
S304:获取第num个表项,并判断该表项中的块地址是否有效,即是否不为0,若是,则执行步骤S305,若否,则执行步骤S308。
S305:根据所述块地址获取所述表项对应的节点,并判断该节点是否为I节点,即判断根据所述节点读取的数据块中的节点号与其所属文件的I节点号是否一致,若是,则执行步骤S306,若否,则执行步骤S308。
S306:根据所述I节点的文件模式,判断所述I节点是否为普通文件,若是,则执行步骤S307,若否,则执行步骤S308。由于通过第一部分的解析过程后,已经没有目录结构,因此在该部分的解析过程中丢弃目录文件。
S307:读取文件数据;执行步骤S308。具体地,同步骤S110,根据所述I节点的内嵌标志,判断是否内嵌文件;若内嵌文件,则从内嵌文件读取文件数据;若未内嵌文件,则根据所述I节点记录的数据块地址列表和节点号列表,读取文件数据。
S308:令num=num+1。
S309:判断num是否大于节点号总数,若是,则结束此次解析,若否,则执行步骤S303。
通过上述步骤,即可获取到根目录下的所有文件数据,且由于步骤S101-S110是按照目录结构进行遍历,因此可恢复出带有目录结构的文件数据。
本实施例结合了文件目录数据结构的特性和NAT表结构特性,可完美地恢复出删除文件。
实施例二
本实施例是对应上述实施例的一种计算机可读存储介质,其上存储有计算机程序所述程序被处理器执行时实现以下步骤:
读取超级块,并根据所述超级块,读取最新版本的检查点和根目录文件的节点号;
根据所述检查点,读取节点地址表的位图、孤儿文件节点和摘要块;
根据所述节点地址表的位图,得到第一节点地址表和第二节点地址表;
根据所述根目录文件的节点号和孤儿文件节点的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
根据所述对应的表项中的块地址,读取I节点,并记录所述I节点的节点号;
若所述I节点为目录文件,则读取目录数据块;
解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号;
根据所述子文件的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
继续执行所述“根据所述对应的表项中记录的块地址,读取I节点,并记录所述I节点的节点号”的步骤;
若所述I节点为普通文件,则读取文件数据;
获取所述第二节点地址表中节点号未被记录的且块地址有效的表项;
若所述表项对应的节点为I节点且所述I节点为普通文件,则读取文件数据。
进一步地,所述“读取超级块”之后,进一步包括:
对所述超级块进行有效性校验。
进一步地,所述“对所述超级块进行有效性校验”具体为:
若所述超级块的块大小为扇区大小的整数倍,且段大小为块大小的整数倍,则判定所述超级块有效。
进一步地,所述“从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项”具体为:
若为删除文件的节点号,则从所述第二节点地址表中获取所述节点号对应的表项;
若为正常文件的节点号,则判断所述摘要块中是否存在所述节点号对应的表项;
若是,则从所述摘要块中获取所述节点号对应的表项;
若否,则从所述第一节点地址表中获取所述节点号对应的表项。
进一步地,所述“若所述I节点为目录文件,则读取目录数据块”具体为:
根据所述I节点的文件模式,判断所述I节点是否为目录文件;
若是,则根据所述I节点的内嵌标志,判断是否内嵌目录;
若内嵌目录,则读取内嵌目录数据块;
若未内嵌目录,则根据所述I节点记录的数据块地址列表和节点号列表,读取目录数据块。
进一步地,所述“解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号”具体为:
依次获取所述目录数据块的一表项;
若所述一表项中的掩码值为1,则判定所述一表项对应的子文件为正常子文件,获取所述一表项中的节点号;
若所述一表项中的掩码值为0且节点号不为0,则判定所述一表项对应的子文件为删除子文件,获取所述一表项中的节点号。
进一步地,所述“获取所述第二节点地址表中节点号未被记录的且块地址有效的表项;若所述表项对应的节点为I节点且所述I节点为普通文件,则读取文件数据”具体为:
在所述第二节点地址表中依次获取一节点号;
若所述一节点号未被记录,则从所述第二节点地址表中获取所述一节点号对应的表项;
若所述一节点号对应的表项中的块地址不为0,则根据所述块地址获取所述表项对应的节点;
若根据所述节点读取的数据块中的节点号与其所属文件的I节点号一致,则判定所述节点为I节点;
若所述I节点为普通文件,则读取文件数据。
进一步地,所述“若所述I节点为普通文件,则读取文件数据”具体为:
根据所述I节点的文件模式,判断所述I节点是否为普通文件;
若是,则根据所述I节点的内嵌标志,判断是否内嵌文件;
若内嵌文件,则从内嵌文件读取文件数据;
若未内嵌文件,则根据所述I节点记录的数据块地址列表和节点号列表,读取文件数据。
综上所述,本发明提供的一种F2FS文件系统的删除文件恢复方法及存储介质,根据超级块,读取得到根目录的节点号、两个节点地址表、孤儿文件节点和摘要块,根据节点号从节点地址表或摘要块中读取对应的表项,根据表项中的块地址读取得到I节点,若I节点为目录文件,则获取子文件的节点号,继续进行遍历,若I节点为普通文件则读取文件数据;根目录和孤儿文件遍历完后,继续遍历并解析出第二节点地址表中未被解析的文件数据。本发明结合了文件目录数据结构的特性和NAT表结构特性,可完美地恢复出删除文件。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种F2FS文件系统的删除文件恢复方法,其特征在于,包括:
读取超级块,并根据所述超级块,读取最新版本的检查点和根目录文件的节点号;
根据所述检查点,读取节点地址表的位图、孤儿文件节点和摘要块;
根据所述节点地址表的位图,得到第一节点地址表和第二节点地址表;
根据所述根目录文件的节点号和孤儿文件节点的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
根据所述对应的表项中的块地址,读取I节点,并记录所述I节点的节点号;
若所述I节点为目录文件,则读取目录数据块;
解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号;
根据所述子文件的节点号,从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项;
继续执行所述“根据所述对应的表项中记录的块地址,读取I节点,并记录所述I节点的节点号”的步骤;
若所述I节点为普通文件,则读取文件数据;
获取所述第二节点地址表中节点号未被记录的且块地址有效的表项;
若所述表项对应的节点为I节点且所述I节点为普通文件,则读取文件数据。
2.根据权利要求1所述的F2FS文件系统的删除文件恢复方法,其特征在于,所述“读取超级块”之后,进一步包括:
对所述超级块进行有效性校验。
3.根据权利要求2所述的F2FS文件系统的删除文件恢复方法,其特征在于,所述“对所述超级块进行有效性校验”具体为:
若所述超级块的块大小为扇区大小的整数倍,且段大小为块大小的整数倍,则判定所述超级块有效。
4.根据权利要求1所述的F2FS文件系统的删除文件恢复方法,其特征在于,所述“从所述第一节点地址表、第二节点地址表或摘要块中读取对应的表项”具体为:
若为删除文件的节点号,则从所述第二节点地址表中获取所述节点号对应的表项;
若为正常文件的节点号,则判断所述摘要块中是否存在所述节点号对应的表项;
若是,则从所述摘要块中获取所述节点号对应的表项;
若否,则从所述第一节点地址表中获取所述节点号对应的表项。
5.根据权利要求1所述的F2FS文件系统的删除文件恢复方法,其特征在于,所述“若所述I节点为目录文件,则读取目录数据块”具体为:
根据所述I节点的文件模式,判断所述I节点是否为目录文件;
若是,则根据所述I节点的内嵌标志,判断是否内嵌目录;
若内嵌目录,则读取内嵌目录数据块;
若未内嵌目录,则根据所述I节点记录的数据块地址列表和节点号列表,读取目录数据块。
6.根据权利要求1所述的F2FS文件系统的删除文件恢复方法,其特征在于,所述“解析所述目录数据块,获取子文件的节点号,所述子文件的节点号包括正常子文件的节点号和删除子文件的节点号”具体为:
依次获取所述目录数据块的一表项;
若所述一表项中的掩码值为1,则判定所述一表项对应的子文件为正常子文件,获取所述一表项中的节点号;
若所述一表项中的掩码值为0且节点号不为0,则判定所述一表项对应的子文件为删除子文件,获取所述一表项中的节点号。
7.根据权利要求1所述的F2FS文件系统的删除文件恢复方法,其特征在于,所述“获取所述第二节点地址表中节点号未被记录的且块地址有效的表项;若所述表项对应的节点为I节点且所述I节点为普通文件,则读取文件数据”具体为:
在所述第二节点地址表中依次获取一节点号;
若所述一节点号未被记录,则从所述第二节点地址表中获取所述一节点号对应的表项;
若所述一节点号对应的表项中的块地址不为0,则根据所述块地址获取所述表项对应的节点;
若根据所述节点读取的数据块中的节点号与其所属文件的I节点号一致,则判定所述节点为I节点;
若所述I节点为普通文件,则读取文件数据。
8.根据权利要求1或7所述的F2FS文件系统的删除文件恢复方法,其特征在于,所述“若所述I节点为普通文件,则读取文件数据”具体为:
根据所述I节点的文件模式,判断所述I节点是否为普通文件;
若是,则根据所述I节点的内嵌标志,判断是否内嵌文件;
若内嵌文件,则从内嵌文件读取文件数据;
若未内嵌文件,则根据所述I节点记录的数据块地址列表和节点号列表,读取文件数据。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7任一项所述的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711213034.9A CN108062357B (zh) | 2017-11-28 | 2017-11-28 | F2fs文件系统的删除文件恢复方法及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711213034.9A CN108062357B (zh) | 2017-11-28 | 2017-11-28 | F2fs文件系统的删除文件恢复方法及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108062357A true CN108062357A (zh) | 2018-05-22 |
CN108062357B CN108062357B (zh) | 2020-09-08 |
Family
ID=62135083
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711213034.9A Active CN108062357B (zh) | 2017-11-28 | 2017-11-28 | F2fs文件系统的删除文件恢复方法及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108062357B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582500A (zh) * | 2018-11-26 | 2019-04-05 | 万兴科技股份有限公司 | 数据恢复方法、装置、计算机设备及存储介质 |
CN110232004A (zh) * | 2019-06-13 | 2019-09-13 | 深圳麦风科技有限公司 | 一种apfs文件系统数据恢复方法 |
CN111400101A (zh) * | 2020-03-18 | 2020-07-10 | 北京北亚宸星科技有限公司 | 一种jfs2文件系统数据删除时的数据恢复方法及系统 |
CN111897675A (zh) * | 2020-06-16 | 2020-11-06 | 东南大学 | 一种手机端f2fs文件系统的近期删除文件恢复方法 |
CN112463736A (zh) * | 2020-12-11 | 2021-03-09 | 厦门市美亚柏科信息股份有限公司 | 一种用于apfs文件的恢复方法和系统 |
US11392436B2 (en) | 2020-04-01 | 2022-07-19 | Western Digital Technologies, Inc. | Advanced file recovery method for flash memory |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030158873A1 (en) * | 2002-02-15 | 2003-08-21 | International Business Machines Corporation | Dynamic links to file system snapshots |
CN102289526A (zh) * | 2011-09-29 | 2011-12-21 | 深圳市万兴软件有限公司 | 一种hfs+文件系统数据恢复方法及装置 |
CN102682015A (zh) * | 2011-03-15 | 2012-09-19 | 中国科学院声学研究所 | 一种面向高清媒体的嵌入式文件存储结构及存储方法 |
CN103365944A (zh) * | 2012-03-29 | 2013-10-23 | Lsi公司 | 文件系统提示 |
CN104301682A (zh) * | 2014-10-22 | 2015-01-21 | 厦门市美亚柏科信息股份有限公司 | 一种监控视频碎片的恢复方法和装置 |
CN105068889A (zh) * | 2015-08-03 | 2015-11-18 | 四川效率源信息安全技术有限责任公司 | 恢复Ext3/Ext4中已彻底删除文件的方法 |
CN105204959A (zh) * | 2015-08-28 | 2015-12-30 | 小米科技有限责任公司 | 恢复ext文件系统中已删除文件的方法及装置 |
CN106873921A (zh) * | 2017-03-24 | 2017-06-20 | 努比亚技术有限公司 | 一种多分区外置存储设备的挂载方法及装置 |
-
2017
- 2017-11-28 CN CN201711213034.9A patent/CN108062357B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030158873A1 (en) * | 2002-02-15 | 2003-08-21 | International Business Machines Corporation | Dynamic links to file system snapshots |
CN102682015A (zh) * | 2011-03-15 | 2012-09-19 | 中国科学院声学研究所 | 一种面向高清媒体的嵌入式文件存储结构及存储方法 |
CN102289526A (zh) * | 2011-09-29 | 2011-12-21 | 深圳市万兴软件有限公司 | 一种hfs+文件系统数据恢复方法及装置 |
CN103365944A (zh) * | 2012-03-29 | 2013-10-23 | Lsi公司 | 文件系统提示 |
CN104301682A (zh) * | 2014-10-22 | 2015-01-21 | 厦门市美亚柏科信息股份有限公司 | 一种监控视频碎片的恢复方法和装置 |
CN105068889A (zh) * | 2015-08-03 | 2015-11-18 | 四川效率源信息安全技术有限责任公司 | 恢复Ext3/Ext4中已彻底删除文件的方法 |
CN105204959A (zh) * | 2015-08-28 | 2015-12-30 | 小米科技有限责任公司 | 恢复ext文件系统中已删除文件的方法及装置 |
CN106873921A (zh) * | 2017-03-24 | 2017-06-20 | 努比亚技术有限公司 | 一种多分区外置存储设备的挂载方法及装置 |
Non-Patent Citations (2)
Title |
---|
刘靖宇 等: "混合S-RAID:一种适于连续数据存储的节能数据布局", 《计算机研究与发展》 * |
吉治钢 等: "基于EXT2文件系统的Linux文件恢复", 《暨南大学学报(自然科学版)》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582500A (zh) * | 2018-11-26 | 2019-04-05 | 万兴科技股份有限公司 | 数据恢复方法、装置、计算机设备及存储介质 |
CN109582500B (zh) * | 2018-11-26 | 2021-09-03 | 万兴科技股份有限公司 | 数据恢复方法、装置、计算机设备及存储介质 |
CN110232004A (zh) * | 2019-06-13 | 2019-09-13 | 深圳麦风科技有限公司 | 一种apfs文件系统数据恢复方法 |
CN111400101A (zh) * | 2020-03-18 | 2020-07-10 | 北京北亚宸星科技有限公司 | 一种jfs2文件系统数据删除时的数据恢复方法及系统 |
CN111400101B (zh) * | 2020-03-18 | 2021-06-01 | 北京北亚宸星科技有限公司 | 一种jfs2文件系统数据删除时的数据恢复方法及系统 |
US11392436B2 (en) | 2020-04-01 | 2022-07-19 | Western Digital Technologies, Inc. | Advanced file recovery method for flash memory |
CN111897675A (zh) * | 2020-06-16 | 2020-11-06 | 东南大学 | 一种手机端f2fs文件系统的近期删除文件恢复方法 |
CN111897675B (zh) * | 2020-06-16 | 2024-04-09 | 东南大学 | 一种手机端f2fs文件系统的近期删除文件恢复方法 |
CN112463736A (zh) * | 2020-12-11 | 2021-03-09 | 厦门市美亚柏科信息股份有限公司 | 一种用于apfs文件的恢复方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108062357B (zh) | 2020-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108062357A (zh) | F2fs文件系统的删除文件恢复方法及存储介质 | |
US10248556B2 (en) | Forward-only paged data storage management where virtual cursor moves in only one direction from header of a session to data field of the session | |
Fairbanks | An analysis of Ext4 for digital forensics | |
CN102567427B (zh) | 一种对象数据处理方法及装置 | |
CN103257831B (zh) | 存储器的读写控制方法及对应的存储器 | |
KR100922389B1 (ko) | 플래시 메모리를 위한 색인 스킴 | |
CN103514106B (zh) | 一种数据缓存方法 | |
CN110347852B (zh) | 嵌入横向扩展键值存储系统的文件系统及文件管理方法 | |
US8793290B1 (en) | Metadata management for pools of storage disks | |
CN105787093B (zh) | 一种基于LSM-Tree结构的日志文件系统的构建方法 | |
KR20080063466A (ko) | 플래시 메모리 관리 | |
CN105468294A (zh) | 用于固态存储设备的脱机去重 | |
CN106951375A (zh) | 在存储系统中删除快照卷的方法及装置 | |
CN101983376A (zh) | 访问装置、信息记录装置、信息记录系统、文件管理方法和程序 | |
CN106021031A (zh) | 一种btrfs文件系统的删除数据恢复方法和装置 | |
CN104156432A (zh) | 一种文件访问方法 | |
CN114968111A (zh) | 一种数据删除方法、装置、设备和计算机可读存储介质 | |
CN111897675B (zh) | 一种手机端f2fs文件系统的近期删除文件恢复方法 | |
Vandermeer et al. | Forensic analysis of the exfat artefacts | |
CN108664482B (zh) | Flash存储器及存储文件管理方法 | |
CN104778099B (zh) | 一种基于历史版本的yaffs2破损文件重构方法 | |
CN105677579A (zh) | 缓存系统中的数据访问方法和系统 | |
CN106557572A (zh) | 一种安卓应用程序文件的提取方法及系统 | |
CN104714985B (zh) | 一种提升表单审批效率的方法及装置 | |
KR100745163B1 (ko) | 동적 매핑 테이블을 이용한 플래시 메모리 관리방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |