一种数据恢复方法及系统
技术领域
本发明涉及计算机系统,更具体地说,涉及一种用于MAC OS X下的HFS+文件系统的数据恢复方法及系统,以找回被删除的文件。
背景技术
目前数据恢复一般分“深度扫描”和“快速扫描”。“深度扫描”根据特定文件的标识来对整个磁盘进行扫描,缺点是扫描速度慢,没有文件名、文件路径、文件创建时间等信息。“快速扫描”根据文件系统的文件描述信息来恢复。弥补了深度扫描的缺点,扫描速度快,有文件名、文件路径、文件创建时间等信息。
Windows平台下的文件系统一般是NTFS、fat32等,用户删除文件以后,只在文件描述信息里更改为已经删除。在恢复的时候只需要重新设为没删除,即可达到“快速扫描”恢复文件的目的。但在MAC平台下的HFS+文件系统,用户删除文件以后,连同文件描述信息一并被删除。这就无法实现Windows下那样的“快速扫描”。所以一般Windows一般提供“深度扫描”和“快速扫描”两种扫描方式,而Mac OS下只提供“深度扫描”而没“快速扫描”。例如,现有的专门用于崩溃发生后的数据恢复的软件产品Stellar Phoenix仅仅提供扇区(深度)扫描的方式。
Mac OS是一套运行于苹果Macintosh系列电脑上的操作系统,是首个在商用领域成功的图形用户界面。HFS+是苹果Mac OS下的一个文件系统,有日志式和非日志式。在Mac OS平台上,对HFS+文件系统的数据恢复传统采用扇区扫描的方式,其存在以下缺陷:
1)没有创建日期;
2)没有修改日期;
3)文件大小可能不正确;
4)没有原始文件名;
5)没有文件的目录结构;
6)对有碎片的文件无法恢复;
7)扫描时间非常慢。
因此需要开发一种快速、且能够提供部分文件信息例如创建日期、修改日期、文件大小、原始文件名等的数据恢复方式。
发明内容
本发明要解决的技术问题在于,针对现有技术中对MAC OS X下的HFS+文件系统的数据恢复一般采用扇区扫描,扫描速度慢且恢复的数据缺少文件名、文件路径、文件创建时间等信息的缺陷,提供一种数据恢复方法,其根据日志进行数据恢复,可以找回用户不小心删除的文件。
本发明要解决的另一技术问题在于,针对现有技术中对MAC OS X下的HFS+文件系统的数据恢复一般采用扇区扫描,扫描速度慢且恢复的数据缺少文件名、文件路径、文件创建时间等信息的缺陷,提供一种数据恢复系统,其根据日志进行数据恢复,可以找回用户不小心删除的文件。
本发明解决其技术问题所采用的技术方案是:提供一种数据恢复方法,用于苹果MAC OSX下的HFS+文件系统,所述数据恢复方法包括:
A、读取HFS+文件系统中的日志;
B、分析所述日志,以获取日志中的文件描述信息;
C、利用日志中包含的文件描述信息来恢复文件。
在本发明所述的数据恢复方法中,所述文件描述信息包括:文件名、文件路径、创建时间、以及文件的数据区;其中,所述文件路径包括文件所在目录项的ID(catalog node ID)和父目录项的ID(parent catalog node ID)。
在本发明所述的数据恢复方法中,所述读取HFS+文件系统中的日志包括:
A1、通过分析磁盘的分区表获取HFS+文件系统的卷;
A2、分析HFS+文件系统的卷头,获取该卷的日志的位置,并读日志到内存中。
在本发明所述的数据恢复方法中,所述分析所述日志包括:
B1、读取所述日志一个扇区的内容;
B2、反序列化该扇区为一个块列表头(block_list_header)结构,并检验校验和是否正确,如正确,进行步骤B3,如不正确,执行步骤B4;
B3、获取所述块列表(block list)中所有的目录项文件块(Catalog Fileblock),由此得到文件记录(file record)和目录记录(folder record);
B4、转到下一个扇区,继续步骤B1至B3的操作,直到整个日志文件读完。
在本发明所述的数据恢复方法中,所述检验校验和包括:检查所述扇区的前32字节为块列表头(block_list_header)时,校验和是否为0,且如果校验和为0,则是正确的块列表(block list)。
在本发明所述的数据恢复方法中,所述利用日志中包含的文件描述信息来恢复文件包括:
C1、构造完整路径,其中根据目录项文件(Catalog File)结构中的节点名称(nodeName)、目录项的ID(catalog node ID)和父目录项的ID(parentcatalog node ID)链接出正确的路径;
C2、恢复文件内容,其中利用目录项文件记录(Catalog File Records)中的数据区(dataFork)字段恢复该文件的数据。
本发明解决其技术问题所采用的另一技术方案是:构造一种数据恢复系统,用于苹果MAC OSX下的HFS+文件系统的数据恢复,其特征在于,所述数据恢复系统包括:
用于读取HFS+文件系统中的日志的装置;
用于分析所述日志的装置;及
用于利用日志中包含的文件描述信息来恢复文件的装置。
在本发明所述的数据恢复系统中,所述用于读取HFS+文件系统中的日志的装置执行如下步骤:
A1、通过分析磁盘的分区表获取HFS+文件系统的卷;
A2、分析HFS+文件系统的卷头,获取该卷的日志的位置,并读日志到内存中。
在本发明所述的数据恢复系统中,所述用于分析所述日志的装置执行如下步骤:
B1、读取所述日志一个扇区的内容;
B2、反序列化该扇区为一个块列表头(block_list_header)结构,并检验校验和是否正确,如正确,进行步骤B3,如不正确,执行步骤B4;
B3、获取所述块列表(block list)中所有的目录项文件块(Catalog Fileblock),由此得到文件记录(file record)和目录记录(folder record);
B4、转到下一个扇区,继续步骤B1至B3的操作,直到整个日志文件读完。
在本发明所述的数据恢复系统中,所述用于利用日志中包含的文件描述信息来恢复文件的装置执行如下步骤:
C1、构造完整路径,其中根据目录项文件(Catalog File)结构中的节点名称(nodeName)、目录项的ID(catalog node ID)和父目录项的ID(parentcatalog node ID)链接出正确的路径;
C2、恢复文件内容,其中利用目录项文件记录(Catalog File Records)中的数据区(dataFork)字段恢复该文件的数据。
实施本发明的数据恢复方法,具有以下有益效果:通过HFS+文件系统根据日志来进行数据恢复,实现了MAC下“快速扫描”的效果,解决了MAC下恢复数据文件没有原始文件名,没有文件路径等诸多缺点,速度也比“深度扫描”快很多倍。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明的数据恢复方法的流程图;
图2A是图1中步骤A的详细流程图;
图2B是图1中步骤B的详细流程图;
图2C是图1中步骤C的详细流程图;
图3是根据本发明数据恢复方法中读日志和分析日志过程的一实施例的流程图。
具体实施方式
在MAC OS下的HFS+文件系统中,日志是指在HFS+中为保持文件系统的正确性而维护的一个数据区,其中保存了与文件操作相关的一些信息。在对HFS+文件系统进一步研究后,发现当用户对文件进行移动、删除、创建等操作时,同时会往它的日志系统里写日志,以在不正常关机的情况下,对文件系统进行校验,以保证文件系统的完整性。这些日志里同时也包含了一些删除文件的文件描述信息。
如前所述,在MAC平台下的HFS+文件系统,用户删除文件以后,连同文件描述信息一并被删除。但是在一段时间内,最近被删除文件的数据及其文件描述信息还会保存在日志内。针对这一情况,本发明构思一种用于苹果MAC OSX下的HFS+文件系统的数据恢复方法。本发明的技术方案正是通过分析这些日志,分析出被删除文件的文件描述信息,再利用这些信息来恢复文件,进行“快速扫描”。上述文件描述信息包括:文件名、文件路径、创建时间、以及文件的数据区等。其中,所述文件路径包括文件所在目录项的ID和父目录项的ID。
如图1所示,本发明用于苹果MAC OSX下的HFS+文件系统的数据恢复方法包括读HFS+文件系统中的日志,如步骤A所示;分析该日志,如步骤B所示,以获取日志中的文件描述信息;以及利用日志中包含的文件描述信息来恢复文件,如步骤C所示。
图2A、2B和2C分别示出了图1中步骤A、步骤B和步骤C的详细分解步骤。
如图2A所示,图1中步骤A中读取HFS+文件系统中的日志包括:
步骤A1,通过分析磁盘的分区表获取HFS+文件系统的卷;和
步骤A2,分析HFS+文件系统的卷头,获取该卷的日志的位置,并读日志到内存中。
如图2B所示,图1中步骤B中分析日志以获取日志中的文件描述信息包括:
步骤B1,读取所述日志一个扇区的内容;
步骤B2,反序列化该扇区为一个块列表头结构,并检验校验和是否正确,如正确,进行步骤B3,如不正确,执行步骤B4;
步骤B3,获取所述块列表中所有的目录项文件块,由此得到文件记录和目录记录;和
步骤B4,转到下一个扇区,继续步骤B1至B3的操作,直到整个日志文件读完。
如图2C所示,图1中步骤C中利用日志中包含的文件描述信息来恢复文件包括:
步骤C1,构造完整路径,其中根据目录项文件结构中的节点名称、目录项的ID和父目录项的ID链接出正确的路径;和
步骤C2,恢复文件内容,其中利用目录项文件记录中的数据区字段恢复该文件的数据。
如图3所示,在本发明数据恢复方法的读日志及分析日志过程中,开始步骤之后,在步骤102,读卷头,其中包括通过分析磁盘的分区表得到HFS+文件系统的卷,并分析HFS+文件系统的卷头,以得到此卷的日志的位置。在步骤104中,将日志读到内存中。在步骤106,读取日志一个扇区的内容。随后,在步骤108,反序列化该扇区为一个块列表头(block_list_header)结构。在步骤110,检验该块列表头的校验和是否正确,如正确,进行步骤112。在步骤112,获取该块列表(block list)中所有的目录项文件块(Catalog File block)。在步骤114,解析文件记录(file record)和目录记录(folder record)。之后,执行步骤116,读日志的下一个扇区。
当在步骤110中,当该块列表头的校验和不正确,执行步骤116,读日志的下一个扇区。
在步骤118中,判断对志的下一个扇区的读取是否成功,如果成功,则返回步骤108,重复步骤108至116。如果失败,则日志已解析完毕。
在本发明的一实施例中,步骤110中检验该块列表头的校验和是这样实现的:该扇区的前32字节为块列表头(block_list_header)时,检查校验和是否为0,且如果校验和为0,则是正确的块列表(block list)。如果校验和不为0,则是不正确的块列表(block list),因此跳过该块列表,读日志的下一个扇区。
使用本发明的方法可以恢复各种数据文件,如文本文件、图片文件、音频/视频文件等。例如,某文本文件/a/b/c.txt被删除。操作系统会将删除的动作所涉及的节点(node)打包为事务(transaction),放到日志中。该事件(transaction)是在一个块列表(block list)中。在这个列表(list)中可能会有a、b、c.txt三个记录(record)。通过先搜索块列表头(block_list_header)的方式找到块列表(block list),再由块信息(block_info)的数组找到这些记录(record)。记下所有文件记录(file record)和目录记录(folderrecord),例如a目录记录(folder record),b目录记录(folder record),c.txt文件记录(file record),每个记录(record)有一个自身ID和父目录ID(PID),例如a(ID=3,PID=2),b(ID=5,PID=3),c.txt(ID=11,PID=5),此处文件c.txt的PID是b的ID,b的PID是a的ID,a的PID没有找到,所以目录结构为a/b/c.txt,它就是完整的路径名。又文件记录(file record)所示文件c.txt包含数据区(dataFork),根据其记录就能找到文件内容在分区的分布,读出这些扇区的内容保存到一个新文件即可恢复文件c.txt的内容。
本发明实施例还公开了一种数据恢复系统,用于苹果MAC OSX下的HFS+文件系统的数据恢复,所述数据恢复系统包括:用于读取HFS+文件系统中的日志的装置;用于分析所述日志的装置;及用于利用日志中包含的文件描述信息来恢复文件的装置。
需要说明的是,该数据恢复系统的具体结构以及处理流程,请参考上述方法项实施例的描述,这里不再赘述。