本文仅做参考学习。
引言
EXT3文件系统是目前LINUX平台使用最多的文件系统,原起自EXT2,在其基础上加入日志功能(主要改变),EXT3作为许多LINUX系统默认的文件系统,误操作也在所难免。最常见的,基于LINUX EXT3上误删除操作的数据恢复就非常重要了。加上现在LINUX平台通常不用作娱乐,整体而言,数据较WINDOWS平台重要;同时,基于LINUX平台的数据恢复 软件及恢复原理方面的文章都较WINDOWS少得多。鉴于此,写此文章。
原理
EXT3文件系统原理方面的文章很多,同时加上LINUX的开源性及EXT3本身的简洁性,通常了解EXT3文件系统并不是难事。作为误删除,我们需要了解文件的存储结构与删除所做的实际操作。
EXT3是典型的UNIX,首先将类文件系统整个分区按固定大小的BLOCK分组,再将若干固定数目的BLOCK分组为BLOCK GROUP。这个概念为了描述方便,我们先放一放。再说别的。
EXT3中的每个文件可以看成由参数+数据组成。比如一个a.tar,其文件包是数据,它的大小、日期、存储位置等。用来区别每个文件的唯一标识是这个文件的"标号",可以简单理解:一个EXT3文件系统里有N个文件,其中M号文件大小为XX,日期为XX,数据存储位置为XX,这样就可以通过存储位置得到其数据XXX。这里没有谈到名称,初步可以理解为EXT3的文件系统里没有名称。名称和目录树都是为了更人性化地解读文件系统的一个助记符。没有名称和目录树,EXT3也可以完好地存储文件(可以这样理解),但只能看到一大堆大小不同、只在标号、没有目录层的“散”文件。我们看如何在此基础上加入目录:首先我们将所有目录、文件统统看成文件。目录中可以保存其下文件(包括目录)的标号,以此类推。但只有标号,很难理解文件所代表的内容,所以可以给标号同时绑定一个人性化的名称,即文件名,使文件名与文件标号一一对应。
每个文件特有的属性通过编好序的INODE进行描述。根目录本身存储根目录下一级子目录及文件的名称及对应的INODE编号,在遍历文件系统时可以读到文件名称,同时读到其节点号。
每个块组(前面讲过)分散放置系统中所有的INODE,其存储方式通过其他结构进行描述。系统可以很容易算出第N号节点的存储位置。通过节点就可以找到数据了。
删除文件的目的是为了释放空间、从索引中去除相应记录。为了实现这样的目的,EXT3文件的删除会做这样的操作,1、重组目录文件的内容(目录文件中的记录),在逻辑上去除被删除文件名称与INODE号的记录;2、更改被删除文件的INODE,至少去除其位置信息(直接与间接BLOCK号);3、在BITMAP区释放原先占用的BLOCK(将原来的使用位更改为空闲,EXT3中即将1更改为0)
从删除文件的原理来看,即使通过原来目录记录的残留信息可以找到被删除文件的名称,也可以找到其原来的节点号,数据就可以恢复了。
注:恢复前提是:当您误删除后,请立即关机,不要再使用计算机,否则恢复会十分困难!