文件删除的分析

在分析文件删除后文件系统中各个管理结构发生的变化之前,我们再总结一下HFS+文件系统对文件的管理方式。

①HFS+文件系统中有的几个重要元文件,其中编录文件是最重要的一个元文件。用户数据的大部分信息都由编录文件来管理,编录文件的存放地址则由文件系统的卷头描述。

②编录文件用B−树结构组织数据,B−树的第一个节点称为头节点。头节点中会描述节点的大小及根节点的节点号等信息,这样就可以通过头节点定位到根节点。

③根节点一般是索引节点,它用指针记录的形式描述B−树中各个关键字的分布情况,利用这种描述关系可以找到我们需要的关键字所在的节点号。

④通过索引节点定位到我们的目标关键字所在的节点,这个节点属于叶节点,它由数据记录组成,包括文件夹记录、文件记录、文件夹链接记录、文件链接记录,文件夹记录及文件记录描述文件夹和文件的具体信息,链接记录则能够告诉我们文件与文件夹之间的上下级关系。

⑤在目标文件所在的叶节点中对关键字做顺序遍历,能够很快找到目标文件的文件记录。文件记录中有文件的分支信息,通过分支信息中描述的盘区地址,最终就可以定位到文件的存储地址了,在这些盘区中存放的就是文件的数据。

综上所述,HFS+文件系统对文件的管理可以用一幅图来描述,如图6-63所示。

HFS+文件删除与恢复的分析-数据恢复迷

图6-63 HFS+文件系统对文件的管理结构图

下面以6.3.14节中的目标文件“80.jpg”为例,讲解其删除后的底层变化。

在6.3.14节中我们已经通过遍历B+树的方式掌握了文件“80.jpg”的管理方式,现在我们分析一下该文件在Apple系统中删除后的底层变化。

(1)卷头的变化

该文件删除后,卷头中发生改变的重要参数有“文件数”减少,“空闲块数”增多。

(2)头节点的变化

文件删除后,头节点中发生改变的参数主要是“叶节点记录数”减少。

(3)索引节点的变化

删除文件的关键字如果不是一个节点的开始,索引节点则不会发生变化。

(4)叶节点的变化

叶节点的节点描述符中,“该节点中的记录数”会减少,最重要的是,被删文件的文件记录会被回收。回收的方法是将该文件记录清空,并将该节点后面的文件记录整体前移,这样,被删文件的文件记录就完全不在了。

下面我们看看文件“80.jpg”删除之前的文件记录所在地址现在的数据,如图6-64所示。

HFS+文件删除与恢复的分析-数据恢复迷

图6-64 文件“80.jpg”删除之前的文件记录所在地址现在的数据

图6-64中数据的参数模板如图6-65所示。

HFS+文件删除与恢复的分析-数据恢复迷

图6-65 图6-64中数据的参数模板

“80.jpg”删除之前的文件记录及其参数模板在前面的图6-61和6-62中,我们可以用它们跟图6-64和6-65做个比较,很容易看出文件“80.jpg”删除之前的文件记录所在地址现在已经是文件“81.jpg”的文件记录了,也就是后面的文件记录做了前移,文件“80.jpg”的文件记录完全不在了。

(5)分配文件的变化

分配文件会将被删文件原来所占用的块回收,即将这些块在分配文件中对应的位清除设置。

(6)数据分支的盘区变化

文件删除后,数据分支所在盘区内的数据内容并没有发生变化。

文件删除的恢复分析

通过前文对Mac OS X系统下HFS+文件系统中的一个文件的删除分析可以知道,文件被删除后,其文件记录已经完全丢失,文件记录中存放着该文件的文件名、CNID、父目录ID、时间信息和盘区地址,这些信息都没有了,就等于失去了指向数据存放地址的指针,虽然数据内容并没有清零,但要找到文件的存储位置是很难的。

所以,HFS+文件系统下文件删除后是比较难恢复的,可以考虑按照文件类型进行恢复。HFS+文件系统采用盘区存放数据,这种方式让数据的连续性比较好,相对来说也就给恢复带来了一些成功的机会。