弹性文件系统的数据恢复方法和装置制造方法
【专利摘要】本发明提供了一种弹性文件系统的数据恢复方法和装置,所述方法包括:读取分区偏移元数据块信息,获得主偏移元数据块信息;根据主偏移元数据块信息,获得B+树的根节点;从B+树的根节点开始遍历B+树,获得每个节点数据块中的空闲表项;根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹。本发明通过上述手段,不仅能够解决传统的签名恢复技术针对不连续文件的恢复存在着恢复不完整的问题,而且能够保证目录结构的完整性。
【专利说明】弹性文件系统的数据恢复方法和装置
【技术领域】
[0001]本发明涉及数据存储【技术领域】,特别地,涉及一种弹性文件系统的数据恢复方法和装置。
【背景技术】
[0002]随着尖端技术的不断发展,传统的文件系统(如微软的NTFS)架构已经无法满足现有的需求,弹性文件系统(REFS,Resilient File System)作为微软最新推出的文件系统,凭借其高度的可靠性和巨大的容量性开始被逐步的应用到微软新版的操作系统上。
[0003]对于系统使用过程中因误操作或者恶意操作而导致的数据丢失问题,传统的数据恢复工具无法满足要求,以R-Stud1为例,只能为FAT、NTFS、NTFS5 (Windows 2000系统)和EXt2FS(LinuX系统)等分区的磁盘提供数据维护方案。针对REFS系统的数据恢复问题,一般是通过文件签名恢复的方法来恢复被删除的数据,其缺点是,对于不连续的碎片文件,可能会出现文件恢复不完整的问题。
【发明内容】
[0004]本发明提供一种弹性文件系统的数据恢复方法,用于解决现有技术对于不连续的碎片文件无法完整恢复的问题。
[0005]本发明还提供了一种弹性文件系统的数据恢复装置,以保证上述方法在实际中的应用。
[0006]为了解决上述问题,本发明公开了一种弹性文件系统的数据恢复方法,包括:读取分区偏移元数据块信息,获得主偏移元数据块信息;根据主偏移元数据块信息,获得B+树的根节点;WB+树的根节点开始遍历B+树,获得每个节点数据块中的空闲表项;根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹。
[0007]优选的,所述获得每个节点数据块中的空闲表项的方法具体包括:从I作为当前表项的表项偏移开始,直至当前节点数据块的最大表项偏移作为当前表项的偏移,判断当前表项与表项列表中的所有表项是否有交叉,若否,则将当前表项作为空闲表项。
[0008]优选的,所述表项之间是否有交叉的判断方法具体为:若EntryOffset+EntrySize ^ EntryOffseti 或 EntryOffsetjEntrySizei ^ EntryOffset,则表不当前表项与第 i 个表项不交叉;否则,表示当前表项与第i个表项有交叉;其中,EntryOffset表示当前表项的偏移,EntrySize表示当前表项的大小!EntryOffseti表示第i个表项的偏移,EntrySizei表不第i个表项的大小。
[0009]优选的,根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹,具体包括:若所述空闲表项的大小等于0x38且空闲表项所在的节点为索引节点,或者,所述空闲表项的值大小等于0x18且空闲表项内容包括有文件元信息或文件夹元信息,则获取该节点的子节点块号,解析并恢复该子节点块中的文件和/或文件夹。
[0010]优选的,根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹,具体包括:若所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件元信息,则根据文件结构信息,解析并恢复被删除的文件,同时记录该文件的父文件夹标识符;和/或,若所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件夹元信息,则根据文件夹结构信息,解析并恢复被删除的文件夹,同时记录该文件夹标识符及其父文件夹标识符。
[0011]依据本发明的另一优选实施例,还公开了一种弹性文件系统的数据恢复装置,包括:根节点获取单元,用于读取分区偏移元数据块信息,获得主偏移元数据块信息;以及根据主偏移元数据块信息,获得B+树的根节点;空闲表项获取单元,用于从B+树的根节点开始遍历B+树,获得每个节点数据块中的空闲表项;数据恢复单元,用于根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹。
[0012]优选的,所述空闲表项获取单元获得每个节点数据块中的空闲表项的方法具体包括:从I作为当前表项的表项偏移开始,直至当前节点数据块的最大表项偏移作为当前表项的偏移,判断当前表项与表项列表中的所有表项是否有交叉,若否,则将当前表项作为空闲表项。
[0013]优选的,判断表项之间是否有交叉的方法具体为:若EntryOffset+EntrySize ( EntryOffsetj 或EntryOffsetfEntrySizei ^ EntryOffset,则表不当前表项与第 i 个表项不交叉;否则,表示当前表项与第i个表项有交叉;其中,EntryOffset表示当前表项的偏移,EntrySize表示当前表项的大小!EntryOffseti表示第i个表项的偏移,EntrySizei表示第i个表项的大小。
[0014]优选的,所述数据恢复单元具体包括:子节点恢复子单元,用于当所述空闲表项的大小等于0x38且空闲表项所在的节点为索引节点,或者,所述空闲表项的值大小等于0x18且空闲表项内容包括有文件元信息或文件夹元信息时,获取该节点的子节点块号,解析并恢复该子节点块中的文件和/或文件夹。
[0015]优选的,所述数据恢复单元具体包括:文件恢复子单元,用于当所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件元信息时,根据文件结构信息解析并恢复被删除的文件,同时记录该文件的父文件夹标识符;和/或,文件夹恢复子单元,用于当所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件夹元信息时,根据文件夹结构信息解析并恢复被删除的文件夹,同时记录该文件夹标识符及其父文件夹标识符。
[0016]与现有技术相比,本发明具有以下优点:
[0017]本发明实施例基于对REFS存储结构的研究,提出了一种基于B+树结构的元数据信息恢复方法,通过在B+树中查找因数据删除形成的空闲表项(解决通过表项偏移列表无法获得空闲表项的问题),并根据该空闲表项中的内容信息,解析出表项数据,不仅能够解决传统的签名恢复技术针对不连续文件的恢复存在着恢复不完整的问题,而且能够保证目录结构的完整性。为由于误操作或者恶意操作而导致的REFS数据的丢失提供了解决方案。经实验验证,当一个文件被删除后如果不往REFS分区中写入数据,被删除的文件可以100%的被恢复。
【专利附图】
【附图说明】
[0018]图1-1为弹性文件系统的组成结构示意图;
[0019]图1-2为弹性文件系统数据块中的表结构示意图;
[0020]图2为本发明弹性文件系统的数据恢复方法一实施例的流程图;
[0021]图3-1为图2所示的方法实施例中步骤S103的具体实现流程;
[0022]图3-2为图2所示的方法实施例中步骤S104的具体实现流程;
[0023]图4为本发明弹性文件系统的数据恢复装置一实施例的结构示意图;
[0024]图5-1为REFS系统下Logs文件夹在删除前的列表示意图;
[0025]图5-2为图5-1所示的Logs文件夹被删除后用R-Stud1工具的恢复效果示意图;
[0026]图5-3为图5-1所示的Logs文件夹被删除后用图4所示的数据恢复装置的恢复效果示意图。
【具体实施方式】
[0027]在结合附图和【具体实施方式】对本发明作进一步详细的说明之前,首先说明弹性文件系统的存储结构。
[0028]弹性文件系统(REFS)由卷头、POMB(分区偏移元数据块)、MOMB(主偏移元数据块)和B+树(B+树用于描述文件信息、文件夹结构和位置信息)组成。如图1-1所示。REFS分配存储空间的基础单位为块,每个块都有编号,从O开始且大小为32个扇区,Μ0ΜΒ、Β+树的每个节点都是一个块。其中:
[0029]卷头在第O块,用于存储扇区大小、卷大小等相关的信息;
[0030]POMB固定存储在第30个块中,用于存储MOMB所在的块号以及备份的MOMB块号等信息;
[0031 ] MOMB块用于存储指向B+树的指针信息。
[0032]REFS系统每个块由一个块头和一系列的表组成。其中,表的结构由四部分组成:分别为表头、表项偏移表描述、表项偏移表以及各个表项。如图1-2所不。表头可以用于存储块的索引信息;表项偏移表描述用于描述表项偏移表的位置以及大小等;表项偏移列表主要用于描述各个表项的位置偏移EntryOffset ;各个表项可以存储文件信息或者块索引。
[0033]每个表项由三部分的组成:表项头部、表项ID和表项的值。
[0034]表项头部包含了如下六部分信息:表项大小EntrySize,用于描述整个表项的大小;表项ID偏移IDOffset ;表项ID的大小IDSize ;表项标志EntryFlags ;值偏移ValueOffset ;值大小ValueSize。其中表项的ID值作为B+树的关键字使用。
[0035]REFS系统将文件的元信息存储在一个如图1-2所示的表中,文件的属性分布在各个表的表项中存储。当文件被删除后,存储这些文件元信息的表项会变成没有任何表项偏移指向的空闲表项。一个文件被删除之后,包含这个文件元信息的表项标志位EntryFlags将发生变化,但是,这些表项中存储的与删除文件相关的元信息却完整的被保留下来。
[0036]参照图2,示出了本发明弹性文件系统的数据恢复方法一实施例的流程,包括以下步骤:
[0037]步骤SlOl:读取分区偏移元数据块POMB信息,获得主偏移元数据块MOMB信息;
[0038]步骤S102:根据主偏移元数据块MOMB信息,获得B+树的根节点;
[0039]步骤S103:从B+树的根节点开始遍历B+树,获得每个节点数据块中的空闲表项;
[0040]步骤S104:根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹。
[0041]本发明的下述各实施例将通过对比的方法获取相应的空闲表项,并且脱离表项偏移列表实现对所有空闲表项的遍历,进而根据空闲表项包括的内容(即文件或文件夹删除后被完整保留下来的相关元信息)恢复出相应的文件或文件夹。
[0042]文件或文件夹被删除后,文件或文件夹的元信息所在的表项变成了空闲表项,但是其元信息却完整的保留下来;正常的流程解析B+树中的表项无法获取到这些空闲的表项信息。如图3-1所示,在本方法实施例的一个优选实施例中,采用以下流程实现获取这些空闲表项(即步骤S103)这一关键步骤。
[0043]在本优选实施例中,假设ES = (E1, E2, , EJ表示一个表中所有表项的列表。其中,每个列表中的元素Ei包含两个属性:表项偏移EntryOffseti以及表项大小EntrySizep其中,表项偏移EntryOffset都相对于“表项偏移表描述”的开始位置。
[0044]本优选实施例的步骤S103具体包括:
[0045]步骤S103-1:从表项偏移表描述中获取相应的表项偏移列表OffsetTable以及最大的表项偏移MaxEntryOffset ;
[0046]步骤S103-2:遍历OffsetTable,针对列表中的每个EntryOffseti元素获取对应的EntrySizei并生成元素Ei加入到ES列表中;
[0047]在REFS系统中,偏移EntryOffseti处的往后四个字节即为EntrySizei的值。
[0048]步骤S103-3:将当前表项偏移CurrentOffset设置为I ;
[0049]步骤S103-4:判断CurrentOffset是否大于等于MaxEntryOffset,若是,则结束空闲表项获取流程,转步骤S104 ;否则转步骤S103-5 ;
[0050]步骤S103-5:获取当前表项偏移CurrentOffset所对应的表项长度CurrentSize,并将这两个属性(CurrentOffset和CurrentSize)作为当前表项CE的属性值;
[0051]从偏移CurrentOffset往后的四个字节表示表项长度;
[0052]步骤S103-6:判断表项列表ES中是否存在着与当前表项CE交叉的元素;若不存在,则转步骤S103-11 ;否则转步骤S103-7 ;
[0053]在本优选时候说了中,元素交叉的判断方法为:当元素Ei和元素Ej满足EntryOfTsetj+EntrySizej ^ EntryOffsetj 或者 EntryOfTsetj+EntrySizej ^ EntryOffseti 条件时,则元素Ei和元素Ej不交叉。否则,元素Ei和元素Ej交叉。
[0054]步骤S103-7:从ES中选取与CE交叉且表项偏移最小的元素Emin ;
[0055]步骤S103-8:判断 EntryOffsetmin 是否等于 CurrentOffset,若是,转步骤S103-10 ;否则,转步骤 S103-9 ;
[0056]步骤SlO3-9:CurrentOffset = CurrentOffset+l,转步骤 SlO3-4 ;
[0057]步骤S103-10:CurrentOffset = EntryOffsetmin+EntrySizemin,转步骤 S103-4 ;
[0058]步骤S103-11:将偏移为CurrentOffset,大小为CurrentSize的当前表项作为空闲表项,记录到相关表格中,作为步骤S104恢复被删除的文件或文件夹的基础;
[0059]步骤S103-12:CurrentOffset = CurrentOffset+CurrentSize,步骤 S103-4。
[0060]如图3-2所示,在本方法实施例的另一个优选实施例中,对于步骤S103获得的空闲表项,采用如下流程进行处理,以恢复被删除的文件或文件夹:
[0061]步骤S104-1:判断空闲表项的EntrySize是否等于0x38,并且空闲块所在节点为索引节点;若是,转步骤S104-8 ;否则,转步骤S104-2 ;
[0062]步骤S104-2:判断该空闲表项是否存储了文件元信息;若是,转步骤S104-6 ;否则,转步骤S104-3 ;
[0063]在本优选实施例中,具体的判断方法为:获取表项ID,判断表项ID的前四个字节是否为0x30000100,若是,则该空闲表项存储了文件元信息。
[0064]步骤S104-3:判断该空闲表项是否存储了文件夹信息;若是,转步骤S104-4 ;否贝U,结束对该空闲表项的数据恢复流程;
[0065]在本优选实施例中,(具体的判断方法为:获取表项ID,判断表项ID的前四个字节是否为0x30000200,如果是,则该表项存储了文件夹元信息;
[0066]步骤S104-4:判断表项的ValueSize是否等于24 (B卩0x18);若是,转步骤S104-8 ;否则,转步骤S104-5 ;
[0067]步骤S104-5:根据文件夹结构信息,解析相应的表项数据,恢复出相应的文件夹,同时记录相应的该文件夹标识符DirID及其父文件夹标识符ParentDirID ;然后,结束对该空闲表项的数据恢复流程;
[0068]其中,ParentDirID为空闲表项所在块从偏移24往后的8个字节。
[0069]步骤S104-6:判断该空闲表项的ValueSize是否等于24 ;若是,转步骤S104-8 ;否则,转步骤S104-7 ;
[0070]步骤S104-7:根据文件结构信息,解析相应的表项数据,恢复出相应的文件,同时记录相应的ParentDirID ;然后,结束对该空闲表项的数据恢复流程;
[0071]其中,ParentDirID为空闲表项所在块从偏移24往后的8个字节。
[0072]步骤S104-8:获取相应的子节点块号SubBlockNumber,并解析并恢复相应子节点块上的文件/文件夹;然后,结束对该空闲表项的数据恢复流程;
[0073]其中,子块号为从偏移ValueOffset往后的8个字节。
[0074]对于前述的各方法实施例,为了描述简单,故将其都表述为一系列的动作组合,但是本领域的技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为根据本发明,某些步骤可以采用其他顺序或同时执行;其次,本领域技术人员也应该知悉,上述方法实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0075]参照图4,示出了本发明弹性文件系统的数据恢复装置一实施例的结构示意图,包括:
[0076]根节点获取单元41,用于读取分区偏移元数据块信息,获得主偏移元数据块信息;以及根据主偏移元数据块信息,获得B+树的根节点;
[0077]空闲表项获取单元42,用于从B+树的根节点开始遍历B+树,获得每个节点数据块中的空闲表项;
[0078]其中,空闲表项获取单元42获得每个节点数据块中的空闲表项的方法具体包括:从I作为当前表项的表项偏移开始,直至当前节点数据块的最大表项偏移作为当前表项的偏移,判断当前表项与表项列表中的所有表项是否有交叉,若否,则将当前表项作为空闲表项。
[0079]上述判断表项之间是否有交叉的方法具体为:
[0080]若 EntryOffset+EntrySize ^ EntryOffseti 或 EntryOffset^EntrySizei ^ EntryOffset成立;则表示当前表项与第i个表项不交叉;否则,表示当前表项与第i个表项有交叉;
[0081]其中,EntryOffset表示当前表项的偏移,EntrySize表示当前表项的大小;EntryOffseti表示第i个表项的偏移,EntrySizei表示第i个表项的大小。
[0082]数据恢复单元43,用于根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹。
[0083]在本优选实施例中,数据恢复单元43具体包括:
[0084]子节点恢复子单元43-1,用于当所述空闲表项的大小等于0x38且空闲表项所在的节点为索引节点,或者,所述空闲表项的值大小等于0x18且空闲表项内容包括有文件元信息或文件夹元信息时,获取该节点的子节点块号,解析并恢复该子节点块中的文件和/或文件夹。
[0085]文件恢复子单元43-2,用于当所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件元信息时,根据文件结构信息解析并恢复被删除的文件,同时记录该文件的父文件夹标识符;
[0086]文件夹恢复子单元43-3,用于当所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件夹元信息时,根据文件夹结构信息解析并恢复被删除的文件夹,同时记录该文件夹标识符及其父文件夹标识符。
[0087]为了验证本发明弹性文件系统的数据恢复装置的效果,做了如下对比试验:
[0088]首先,新建一个REFS的格式的分区P,拷贝一些文件/文件夹到P分区的Root文件夹下(参加图5-1);
[0089]其次,以“Shift+Delete”方式删除Logs文件夹后,用R-Stud1恢复,其数据恢复效果如图5-2所示,可以看出,Logs文件夹下的子文件夹BPA和MeasuredBoot没有被恢复出来。
[0090]最后,采用本发明的数据恢复装置进行恢复,其结果如图5-3所示,可以看出,Logs文件夹下的所有子文件夹及其文件都被成功恢复。
[0091]需要说明的是,上述装置或系统实施例属于优选实施例,所涉及的单元和模块并不一定是本发明所必须的。
[0092]本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于本发明的装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0093]以上对本发明所提供的一种弹性文件系统的数据恢复方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种弹性文件系统的数据恢复方法,其特征在于,包括: 读取分区偏移元数据块信息,获得主偏移元数据块信息; 根据主偏移元数据块信息,获得B+树的根节点; 从B+树的根节点开始遍历B+树,获得每个节点数据块中的空闲表项; 根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹。
2.如权利要求1所述的方法,其特征在于,所述获得每个节点数据块中的空闲表项的方法具体包括: 从I作为当前表项的表项偏移开始,直至当前节点数据块的最大表项偏移作为当前表项的偏移,判断当前表项与表项列表中的所有表项是否有交叉,若否,则将当前表项作为空闲表项。
3.如权利要求2所述的方法,其特征在于,所述表项之间是否有交叉的判断方法具体为:
若 EntryOffset+EntrySize ^ EntryOffseti
或 EntryOffsetfEntrySizei ^ EntryOffset, 则表示当前表项与第i个表项不交叉;否则,表示当前表项与第i个表项有交叉; 其中,EntryOffset表示当前表项的偏移,EntrySize表示当前表项的大小;EntryOffseti表示第i个表项的偏移,EntrySizei表示第i个表项的大小。
4.如权利要求1所述的方法,其特征在于,根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹,具体包括: 若所述空闲表项的大小等于0x38且空闲表项所在的节点为索引节点,或者,所述空闲表项的值大小等于0x18且空闲表项内容包括有文件元信息或文件夹元信息,则获取该节点的子节点块号,解析并恢复该子节点块中的文件和/或文件夹。
5.如权利要求1所述的方法,其特征在于,根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹,具体包括: 若所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件元信息,则根据文件结构信息,解析并恢复被删除的文件,同时记录该文件的父文件夹标识符; 和/或, 若所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件夹元信息,则根据文件夹结构信息,解析并恢复被删除的文件夹,同时记录该文件夹标识符及其父文件夹标识符。
6.一种弹性文件系统数据恢复装置,其特征在于,包括: 根节点获取单元,用于读取分区偏移元数据块信息,获得主偏移元数据块信息;以及根据主偏移元数据块信息,获得B+树的根节点; 空闲表项获取单元,用于从B+树的根节点开始遍历B+树,获得每个节点数据块中的空闲表项; 数据恢复单元,用于根据每个节点数据块中空闲表项包括的内容恢复被删除的文件或文件夹。
7.如权利要求6所述的装置,其特征在于,所述空闲表项获取单元获得每个节点数据块中的空闲表项的方法具体包括: 从I作为当前表项的表项偏移开始,直至当前节点数据块的最大表项偏移作为当前表项的偏移,判断当前表项与表项列表中的所有表项是否有交叉,若否,则将当前表项作为空闲表项。
8.如权利要求7所述的装置,其特征在于,判断表项之间是否有交叉的方法具体为:
若 EntryOffset+EntrySize ^ EntryOffseti
或 EntryOffsetfEntrySizei ^ EntryOffset, 则表示当前表项与第i个表项不交叉;否则,表示当前表项与第i个表项有交叉; 其中,EntryOffset表示当前表项的偏移,EntrySize表示当前表项的大小;EntryOffseti表示第i个表项的偏移,EntrySizei表示第i个表项的大小。
9.如权利要求6所述的装置,其特征在于,所述数据恢复单元具体包括: 子节点恢复子单元,用于当所述空闲表项的大小等于0x38且空闲表项所在的节点为索引节点,或者,所述空闲表项的值大小等于0x18且空闲表项内容包括有文件元信息或文件夹元信息时,获取该节点的子节点块号,解析并恢复该子节点块中的文件和/或文件夹。
10.如权利要求6所述的装置,其特征在于,所述数据恢复单元具体包括: 文件恢复子单元,用于当所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件元信息时,根据文件结构信息解析并恢复被删除的文件,同时记录该文件的父文件夹标识符; 和/或, 文件夹恢复子单元,用于当所述空闲表项的值大小不等于0x18且空闲表项内容包括有文件夹元信息时,根据文件夹结构信息解析并恢复被删除的文件夹,同时记录该文件夹标识符及其父文件夹标识符。
【文档编号】G06F17/30GK104199888SQ201410421666
【公开日】2014年12月10日 申请日期:2014年8月25日 优先权日:2014年8月25日
【发明者】沈长达, 钱镜洁, 林艺滨 申请人:厦门市美亚柏科信息股份有限公司