一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种MFT碎片的恢复方法、终端设备及存储介质与流程

2022-04-07 04:19:17 来源:中国专利 TAG:

一种mft碎片的恢复方法、终端设备及存储介质
技术领域
1.本发明涉及文件技术领域,尤其涉及一种mft碎片的恢复方法、终端设备及存储介质。


背景技术:

2.mft文件是ntfs文件系统用于存储所有文件元数据的文件,该文件至关重要。当文件系统崩溃或者文件系统被格式化后,需要依赖该文件重组恢复整个文件系统。mft文件属于元数据文件,只要系统在运行就会有数据的更新写入,因此该文件往往会呈现出一定程度的碎片化。
3.当前,针对mft文件的恢复主要基于文件记录特征搜索,将所有的文件记录组织成一个文件,再基于这个文件进行数据恢复。但在复杂情况下分区存在被多次格式化、分区误扩容导致数据覆盖等可能,导致搜索到的文件记录属于多个文件系统,简单的搜索恢复会导致文件目录结构错乱、文件内容定位不准确等问题。


技术实现要素:

4.为了解决上述问题,本发明提出了一种mft碎片的恢复方法、终端设备及存储介质。
5.具体方案如下:
6.一种mft碎片的恢复方法,包括以下步骤:
7.s1:获取磁盘的分区大小partitionsize,并设定当前搜索位置currentoffset为0;
8.s2:判断当前搜索位置currentoffset是否大于或等于分区大小partitionsize,如果是,进入s9;否则,进入s3;
9.s3:从磁盘分区的当前搜索位置currentoffset处读取1024个字节的数据块,并判断读取的1024个字节的数据块是否属于mft文件记录块,如果否,更新当前搜索位置currentoffset的值为在其原有值的基础上增加512后,返回s2;否则,进入s4;
10.s4:设定碎片起始位置fragmentstart为当前搜索位置currentoffset;
11.s5:设定碎片结束位置fragmentend为当前搜索位置currentoffset 1023,同时更新当前搜索位置currentoffset的值为在其原有值的基础上增加1024;
12.s6:判断当前搜索位置currentoffset是否大于或等于分区大小partitionsize,如果是,进入s8;否则,进入s7;
13.s7:从磁盘分区的当前搜索位置currentoffset处读取1024个字节的数据块,并判断读取的1024个字节的数据块是否属于mft文件记录块,如果是,返回s5;否则,进入s8;
14.s8:将碎片起始位置fragmentstart与碎片结束位置fragmentend作为一个元素后添加至碎片集合fr中,更新当前搜索位置currentoffset的值为在其原有值的基础上增加512后,返回s2;
15.s9:将碎片集合fr中的每个碎片按照mft文件记录结构进行解析,并根据解析后的每个碎片对应的文件记录集合fs生成文件记录集合序列fss;
16.s10:判断碎片集合fr是否为空,如果是,结束;否则,进入s11;
17.s11:从碎片集合fr中选取任一元素剪切至文件碎片集合frtmp中,并将该元素对应的文件记录从文件记录集合序列fss中删除;
18.s12:判断文件碎片集合frtmp中是否存在一元素,使其与碎片集合fr中的另一元素满足属于同个mft文件,如果存在,进入s13;如果不存在,将文件碎片集合frtmp中的各元素重组为一个mft文件,清空文件碎片集合frtmp,返回s10;
19.s13:将文件碎片集合frtmp中的该元素剪切至文件碎片集合frtmp中,并将该元素对应的文件记录从文件记录集合序列fss中删除,返回s12。
20.进一步的,判断读取的1024个字节的数据块是否属于mft文件记录块的方法为:
21.按照ntfs文件记录的结构对数据块databuff进行解析,以获得mft标识mftmagic、文件记录时间长度filerecordreallenth以及文件记录分配长度filerecordalloclenth;当同时满足以下三个条件时,则判断数据块databuff属于mft文件记录块;
22.条件一:databuff[30]等于databuff[1022],且databuff[31]等于databuff[1023];其中databuff[i]表示数据块databuff中的第i个字节,i为1-1024之间的整数;
[0023]
条件二:mft标识mftmagic为file;
[0024]
条件三:文件记录时间长度filerecordreallenth小于或等于文件记录分配长度filerecordalloclenth,且文件记录分配长度filerecordalloclenth等于1024。
[0025]
进一步的,判断两个碎片是否属于同个mft文件的方法为:当同时满足以下三个条件时,则判断两个碎片属于同个mft文件:
[0026]
条件一:分别从两个碎片对应的两个文件记录集合中选取一个文件物理大小physicalsize大于512,且文件数据簇链clist不为空的元素m和n,元素m和n满足:元素m的文件物理大小physicalsizem与元素m对应的文件数据簇链clist中所有链表元素所占的簇数据的总和的比值等于元素n的文件物理大小physicalsizen与元素n对应的文件数据簇链clist中所有链表元素所占的簇数据的总和的比值;
[0027]
条件二:两个文件记录集合不存在文件id相等的元素;
[0028]
条件三:针对两个文件记录集合中的任意一个元素,根据其父目录id,从两个文件记录集合中查找是否存在文件id等于父目录id的元素,如果存在,则该元素的文件类型应为文件夹类型。
[0029]
进一步的,将文件碎片集合frtmp中的各元素重组为一个mft文件的方法为:将文件碎片集合frtmp中的各元素按照其在磁盘分区中的偏移的大小顺序进行重组。
[0030]
一种mft碎片的恢复终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的mft碎片的恢复方法的步骤。
[0031]
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述的mft碎片的恢复方法的步骤。
[0032]
本发明采用如上技术方案,通过文件记录特征结合mft数据存储分配特性识别所有的mft文件碎片,并进一步基于文件id(也称为mft号)以及簇大小唯一等特性,对mft文件
碎片进行分类重组,最终实现mft碎片的恢复。该方法为分区被多次格式化、分区误扩容导致数据覆盖(分区数交杂)等复杂情况下的数据恢复,提供有效的恢复手段。
附图说明
[0033]
图1所示为本发明实施例一的流程图。
具体实施方式
[0034]
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。
[0035]
现结合附图和具体实施方式对本发明进一步说明。
[0036]
实施例一:
[0037]
ntfs文件将所有的文件元信息以文件记录的形式存储在mft文件中,mft文件由一条条文件记录组成,每条文件记录占用1024个字节。文件记录中记录了文件的名称、类型、是否删除、大小、物理大小、数据簇链、时间、文件id、父目录id等信息。同时,为了能够快速索引,每个文件夹还存有指向索引缓冲区的簇链信息。索引缓冲区存储了文件夹id(即子文件的父目录id)以及文件夹底下子文件的文件名称、文件时间、文件id等信息。
[0038]
本实施例中mft碎片恢复的原理主要依赖ntfs文件系统的如下特性,其中使用1-2特性搜索确定mft碎片,使用3-5特性重组mft碎片。具体特性如下:
[0039]
1.mft文件由一条条的文件记录组合而成,每条文件记录都有一定的头部特征和数据结构,且文件记录总出现在一个扇区的起始位置。因此,基于头部特征结合结构验证,可以准确的确定扇区的起始位置是否为一个mft文件记录的开始位置。
[0040]
2.为了避免mft出现太多的碎片,mft文件空间分配时一般采用连续簇的分配方式,因此,连续空间上的多条mft文件记录一般情况下属于同一个mft文件。
[0041]
3.ntfs文件使用文件id和父目录id来构造文件系统,同个文件系统中文件id值具有唯一性。因此,重组mft碎片时,不能出现文件id(排除删除类型)重复的情况。
[0042]
4.同个文件系统下簇大小的值是唯一的。因此,重组mft碎片时,不能出现簇大小不一样的文件记录(基于文件记录可以计算出簇大小)。
[0043]
5.一个文件的父目录id指向的文件记录所解析获得的文件类型必须是文件夹类型。因此,重组mft碎片时,若两个碎片中的文件记录解析结果刚好可以形成父子目录关系,则不允许出现文件父目录id指向一个文件的文件记录。
[0044]
基于上述的原理,本发明实施例提供了一种mft碎片的恢复方法,如图1所示,所述方法包括以下步骤:
[0045]
s1:获取磁盘的分区大小partitionsize,并设定当前搜索位置currentoffset为0;
[0046]
s2:判断当前搜索位置currentoffset是否大于或等于分区大小partitionsize,如果是,进入s9;否则,进入s3;
[0047]
s3:从磁盘分区的当前搜索位置currentoffset处读取1024个字节的数据块,并判断读取的1024个字节的数据块是否属于mft文件记录块,如果否,更新当前搜索位置
currentoffset的值为在其原有值的基础上增加512后,返回s2;否则,进入s4;
[0048]
s4:设定碎片起始位置fragmentstart为当前搜索位置currentoffset;
[0049]
s5:设定碎片结束位置fragmentend为当前搜索位置currentoffset 1023,同时更新当前搜索位置currentoffset的值为在其原有值的基础上增加1024;
[0050]
s6:判断当前搜索位置currentoffset是否大于或等于分区大小partitionsize,如果是,进入s8;否则,进入s7;
[0051]
s7:从磁盘分区的当前搜索位置currentoffset处读取1024个字节的数据块,并判断读取的1024个字节的数据块是否属于mft文件记录块,如果是,返回s5;否则,进入s8;
[0052]
s8:将碎片起始位置fragmentstart与碎片结束位置fragmentend作为一个元素后添加至碎片集合fr中,更新当前搜索位置currentoffset的值为在其原有值的基础上增加512后,返回s2;
[0053]
s9:将碎片集合fr中的每个碎片按照mft文件记录结构进行解析,并根据解析后的每个碎片对应的文件记录集合fs生成文件记录集合序列fss;
[0054]
s10:判断碎片集合fr是否为空,如果是,结束;否则,进入s11;
[0055]
s11:从碎片集合fr中选取任一元素剪切至文件碎片集合frtmp中,并将该元素对应的文件记录从文件记录集合序列fss中删除;
[0056]
s12:判断文件碎片集合frtmp中是否存在一元素,使其与碎片集合fr中的另一元素满足属于同个mft文件,如果存在,进入s13;如果不存在,将文件碎片集合frtmp中的各元素重组为一个mft文件,清空文件碎片集合frtmp,返回s10;
[0057]
s13:将文件碎片集合frtmp中的该元素剪切至文件碎片集合frtmp中,并将该元素对应的文件记录从文件记录集合序列fss中删除,返回s12。
[0058]
碎片集合fr中的元素为文件碎片,该实施例中第i个元素fri的内容包括碎片起始位置fragmentstart和碎片结束位置fragmentend两个属性。
[0059]
文件记录集合序列fss中的元素内容为文件记录集合fs,每个文件记录集合fs中的元素内容为各文件的文件记录,具体包括:文件名称filename、文件类型filetype、是否删除isdelete、文件物理大小physicalsize、文件数据簇链clist(链表中每个元素包含:簇起始cstart以及簇数目cnumber)、文件id fileid以及父目录id parentfileid等属性。
[0060]
步骤s3中判断读取的1024个字节的数据块是否属于mft文件记录块的方法为:
[0061]
按照ntfs文件记录的结构对数据块databuff进行解析,以获得mft标识mftmagic、文件记录时间长度filerecordreallenth以及文件记录分配长度filerecordalloclenth;当同时满足以下三个条件时,则判断数据块databuff属于mft文件记录块;
[0062]
条件一:databuff[30]等于databuff[1022],且databuff[31]等于databuff[1023];其中databuff[i]表示数据块databuff中的第i个字节,i为1-1024之间的整数;
[0063]
条件二:mft标识mftmagic为file;
[0064]
条件三:文件记录时间长度filerecordreallenth小于或等于文件记录分配长度filerecordalloclenth,且文件记录分配长度filerecordalloclenth等于1024。
[0065]
步骤s12中判断两个碎片是否属于同个mft文件的方法为:当同时满足以下三个条件时,则判断两个碎片属于同个mft文件,即是可以直接拼接的:
[0066]
条件一:分别从两个碎片对应的两个文件记录集合中选取一个文件物理大小
physicalsize大于512,且文件数据簇链clist不为空的元素m和n,元素m和n满足:元素m的文件物理大小physicalsizem与元素m对应的文件数据簇链clist中所有链表元素所占的簇数据的总和的比值等于元素n的文件物理大小physicalsizen与元素n对应的文件数据簇链clist中所有链表元素所占的簇数据的总和的比值;
[0067]
条件二:两个文件记录集合不存在文件id相等的元素,即不存在一个文件记录集合中的元素与另一个文件记录集合中的元素的文件id相等;
[0068]
条件三:针对两个文件记录集合中的任意一个元素,根据其父目录id parentfileid,从两个文件记录集合中查找是否存在文件id fileid等于parentfileid的元素,如果存在,则该元素的文件类型应为文件夹类型。
[0069]
该实施例中将文件碎片集合frtmp中的各元素重组为一个mft文件的方法为:将文件碎片集合frtmp中的各元素按照其在磁盘分区中的偏移的大小顺序进行重组,如从小到大的顺序。
[0070]
本发明实施例提出的上述方法是应对ntfs复杂场景下恢复的有效手段,该方法能够自动实现mft碎片的识别,并根据数据存储特性以及内部结构特性,实现来源于不同文件系统的mft碎片的自动分类与重组,最终实现mft碎片的准确恢复,有效弥补了现有手段应对复杂恢复场景时存在的恢复不准确问题。
[0071]
实施例二:
[0072]
本发明还提供一种mft碎片的恢复终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。
[0073]
进一步地,作为一个可执行方案,所述mft碎片的恢复终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述mft碎片的恢复终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述mft碎片的恢复终端设备的组成结构仅仅是mft碎片的恢复终端设备的示例,并不构成对mft碎片的恢复终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述mft碎片的恢复终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。
[0074]
进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述mft碎片的恢复终端设备的控制中心,利用各种接口和线路连接整个mft碎片的恢复终端设备的各个部分。
[0075]
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述mft碎片的恢复终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失
性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0076]
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。
[0077]
所述mft碎片的恢复终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)以及软件分发介质等。
[0078]
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献