在数据恢复技术领域里,Linux操作系统下的Ext3/Ext4文件系统下数据删除以后的恢复是一个相对比较难的技术问题,因为Ext3/Ext4文件系统下删除文件以后,被删除的文件的原始inode信息中数据指针地址会被清零,inode是文件的灵魂,inode被破坏,文件也就随之香消玉殒,只留下支离破碎的尸体碎片散落在硬盘的各个角落,文件的主人只能对硬盘默哀了!

值得庆幸的是,Ext3/Ext4文件系统是一种日志型文件系统,当格式化分区的时候,文件系统分配一个inode号等于8的文件作为分区日志文件,Linux把它叫做Journal文件,Journal就是日志的意思。这个Journal文件的大小是格式化的时候定好的,根据整个分区总体大小来决定Journal分配空间大小,一般数值是64MB、128MB、256MB等,这个文件不会太大。
所谓的日志型文件系统,就是文件系统中做了什么操作,操作系统就把它记录下来,比如创建一个新文件,操作系统会在日志文件中记录下来, 删除一个文件,操作系统也会在日志文件中记录下来,记录的信息包括文件名称、文件ionde信息等。它的操作步骤是:假如我删除一个文件,操作系统会把这个文件的文件名和inode等信息写到日志文件中,然后把文件删除,并清空删除文件的原始inode数据指针,这个删除过程就完成了!我们可以发现,这个被删除的文件在临死之前,操作系统把它的文件名和inode信息记录了一份,这就给数据恢复留了一手!

我们虽然找到了恢复的门路,但细心的人会发觉,这个Journal文件大小是固定的,它所记录的内容是有限的,如果 Journal文件存满了,它会自动释放前面的空间,循环使用,周而复始,所以Journal文件记录的永远是最新的操作记录。

我们举个例子,删除100 个文件和删除10万个文件的区别,删除100个文件时,假如只需要记录100个文件名和100个inode信息,这个Journal文件能轻松存放这些信息。删除10万个文件时,需要记录10万个文件名和10万个inode信息,这个数量这个Journal文件恐怕不能一次性保存下来,它只能循环使用它的空间,只记录最后操作删除文件的信息。从这个角度看,Ext3/Ext4文件系统数据删除以后的是否能恢复,是有条件的。

下面我们用达思数据恢复软件D-Recovery For Linux来演示一下怎样恢复Ext3/Ext4文件系统删除后的数据。

1、首先我们在VMWARE下的Linux虚拟机格式化一个10GB的硬盘,格式化成Ext3文件系统

(格式化分区,我们看到格式化过程中出现Creating journal (32768 blocks),这个步骤就是创建journal日志文件。)

2、格式化完成以后,mount分区,往分区中写入数据

(mount格式化后的分区,mount到/mysql目录下)


(通过SSH客户端,把数据上传到/mysql挂载的文件系统下)

3、数据写入完成,umount /mysql,用D-Recovery For Linux 展开分区


(umount 文件系统)


(根目录信息)

(ucenter目录下的文件)

(我们还看到,MetaDataDir下有个$Journal文件,这就是日志文件,大小128MB)

4、删除ucenter目录,然后用D-Recovery For Linux扫描,对比结果


(删除ucenter目录)

(展开后ucenter目录不见了)

(扫描丢失文件,选择根据日志恢复)

(扫描过程)


(扫描完成以后,左边多出一个JournalRoot目录,该目录下显示出被删除的文件,这些文件就是原先ucenter目录下的文件)


小结:
Ext3/Ext4文件系统下数据删除后的恢复原理上很简单,就是根据日志文件残留inode信息来恢复,由于日志文件大小有限,不可能记录下大量文件操作过程中产生的记录。D-Recovery For Linux能应对Ext3/Ext4文件系统下少量文件删除以后的恢复,恢复方法简单易用。若是面对大量文件的删除恢复,目前还没有很好的解决方案。但是对于大文件以及oracle数据库文件的恢复,可以采用逆向推算和oracle数据文件特点来提取,也能达到很好的效果。
任何数据能恢复的前提是,这个要恢复的数据没有被新写入的数据覆盖。

本文使用的D-Recovery For Linux数据恢复工具,最新版本请从达思官网下载:
http://www.d-recovery.org
本文由达思数据恢复总工程师覃廷良撰写,转发请注明出处:http://www.bnuol.com