红联Linux门户
Linux帮助

谁说误删Ext3下的文件一定找不回

发布时间:2008-01-08 21:25:53来源:红联作者:Enbrain
原文出处:http://blog.cn-ic.org/?p=38

说来欠这篇文章有点时间了。事情发生在大概就在9/23吧(查看恢复文件的时间戳推算的),现在算算都一个多月过去了。我虽然不是干程序员的活,但也喜欢用PHP写一些东西给我的工作带来一些便利,因为那可以算是我用的比较熟练的语言。那是一个中午,经过近两周零零碎碎的更新,这个小系统的一个较大的功能改进算是基本完成了。于是准备备份一个版本。不知道是饿了,还是晕了,我居然敲了这个命令:

rm *.php

查了一下,这两周以来居然没有任何版本的备份。连忙拔下电源插座,以防任何数据写入该区域,那可就万劫不复了。

拆下硬盘,请公司IT部的朋友帮忙恢复。他在windows下用一些忙活了半天,结果是能恢复一些文件,但是没有一个是我要的。更气人的是,那些软件大都有按文件后缀名查询恢复的功能,但是没有一个支持php为后缀的,包括大名鼎鼎的easyrecover。

既然别人帮不上忙,那只能靠自己了。一阵google之后得出两个结论:

1.中文的内容都告诉我,ext2可以恢复,其他没戏。各个技术网站都重复转载着同一篇操作复杂的技术文章。各技术论坛里面关于数据恢复主题的更弥漫着一种悲观的气氛,通常都有这样的回复:“楼主节哀”,并且从技术角度告诉我种种不可恢复的理由。

2.英文内容好些,有一些专用的恢复软件,号称可以恢复ext3文件系统的文件,尝试了各种Demo版软件(大都可查找,不可恢复),找都找不到。我想那些软件也许对ext2有效,而对ext3可能只是一个营销手段吧。

就在我正打算重写这两个星期以来的代码的时候。在一个英文论坛的帖子里面找到了通往我的救星的一个链接

他在这里:http://www.csummers.org/index.php/2005/12/20/undelete-text-files-on-linux-ext3-partition/

他的开头是这么写的
Every once in a while I do something really, really stupid. Like, say, for instance, delete a whole directory of very important code that I’m working on and my last backup is a couple of weeks old (because of a server move and my failure to re-setup my cron backup). How did this happen? Well, for one, I was coding at about 5:30 a.m. before my caffeine had set in, and, secondly, I was rm -rf’ing with tab-completion. Almost instantly after I pressed Enter I realized what I had done. Tragedy. Or so I thought…

TNND,这不是在说我吗?文章的内容就不一一翻译了,他的思想方法其实很简单:用string命令把欲恢复的分区里的所有ASCII字符dump成一个巨大的txt文件。然后在这个文件里面找你要的东西吧。下面说说我按图索骥做成的成功案例,以及其中的心得:

1. 将硬盘装到另外一台装有Linux的电脑上,将欲恢复的系统已只读方式mout上来。只读的目的是为了方式误写入造成的数据永久丢失。

命令格式如下:
#mount -t ext3 -o ro /dev/hdbx /mnt
其中x根据实际需要改变。

2.用string命令dump吧。
#strings /dev/sda7 > /path/to/big_text_file
最好找一个大点的分区,因为你不知道那个文件会有多大。我当时的文件是2GB。

另外提一下各文件系统对最大单文件大小的限制:
FAT32:4GB
NTFS:64GB
NTFS5.0:2TB
EXT2/EXT3/ReiserFS:1TB
JFS:不限

3.用合适的文本编辑器找吧。当然我也没有这么牛的机器能打开一个2GB的文本文件,公司分配的只是一台256MB内存的破电脑,还要分一些当显存用。于是把它分割成了20个每个100MB的文件。关闭X以及各种服务,用emacs打开,按关键字查询。用了将近3个小时,居然被我悉数找回。

emacs是NB的,100MB的文件居然在10s内打开,而且关键字搜寻也很快,只是在它自动保存的时候需要1~2min时间不能动。我开始的时候在windows下用轻便的editpus,结果那个时候一点都不轻便,没有一个动作能在2mins内做完的,打开一个文件更是需要5~6mins。

另外还有一些问题:
a.)一些以前保存过的老版本以文件碎片的形式干扰你的查找

b.)如果以”{”或者”}”作为单独一行,那么dump的时候会丢失。所以找回来的文件需要添加一些花括号,这也是挺郁闷的,但总比重新写好吧。

当然这种方法作用有限,只能恢复ASCII字符,对二进制文件无效,而且我也没有在里面找到中文字符。但是总得来讲对重要文件多家备份,防止误删才是应道理。所谓预防第一嘛。所以真希望这篇文章没有人需要。
文章评论

共有 0 条评论