在误删了数据我们立马要做的操作:不要做任何写入操作,不要做任何保存操作,把所删数据所在的盘卸载(umount),然后以只读方式挂载(mount -o ro),或者是直接用mount -o remount,ro重新挂载。如果提示“device is busy"类的信息,可以用fuser -k -i /mount_point来杀死所有正在使用这个盘的进程(-i是交互模式,会提示)。因为现在系统自动分区的话一般是只把一个分区挂在/目录下,没法再重新挂载,所以要果断关机, 把硬盘挂在另一个linux系统上进行恢复数据操作。
本例实研环境centos 6.5,要恢复的数据是装unbuntu系统的硬盘的/home/lei下的文件和目录。
1、在centos 6.5上安装extundelete。
extundelete可以从ext3和ext4文件系统恢复数据的linux工具
最新版本为0.2.4,从extundelete.sourceforge.net下载
为了支持ext4系统,它依赖e2fsprogs-devel开发包1.41以上版本
(e2fsprogs(也叫做e2fs programs)是一个Ext2(及Ext3/4)文件系统工具集(Ext2 Filesystems Utilities[),它包含了诸如创建、修复、配置、调试ext2文件系统等的标准工具。在不同的linux发行版上它的名字不同)
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 下载extundelete
yum list e2fsprogs-devel 版本为1.41.12-18.el6 正好满足需要
yum install e2fsprogs-devel 安装 (它依赖同版本号的libcom_err-devel)
tar -jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure 然后报错了,提示让查看config.log,实上不用看,没有安装gcc-c++或者gnu make
yum list gcc-c++ make 显示make 已安装,gcc-c++没有
yum install gcc-c++ 它的依赖文件有一大堆,幸亏有yum
./configure 生成Makefile文件
make 编译 (这里提示了一个警告warning: unused parameter "flags",应该没有太大问题)
make install 安装
extundelete -v 显示了版本信息,安装成功
2、关机把要恢复数据的盘挂上系统。然后开机,做挂载操作。
(挂载别的硬盘的逻辑卷具体要做的操作些处省略)
mount -o ro /dev/lei-pc/root /mnt # /dev/lei-pc/root是要恢复数据的ubuntu系统的根分区
-o ro 以只读模式挂载。
3、开始恢复
extundelete /dev/lei-pc/root --restore-directory /mnt/home/lei
# extundelete [要恢复的设备文件] --restore-directory [要恢复的目录或文件]
但可惜的是出错了,错误信息如下
NOTICE: Extended attributes are not restored.
Loading filesystem metadata … 75 groups loaded.
Loading journal descriptors … 29398 descriptors loaded.
Failed to restore file /mnt/home/lei
Could not find correct inode number past inode 287274.
Try altering the filename to one of the entries listed below.
File name | Inode number | Deleted status
extundelete: Operation not permitted while restoring directory.
extundelete: Operation not permitted when trying to examine filesystem
再试,不指定具体目录,用--restore-all 恢复所有能恢复的文件
extundelete /dev/lei-pc/root --restore-all
不像上次那样有很多屏幕输出,有希望哦
ls
看到了RECOVERED_FILES,说不定成功了,赶紧进去看看,发现在里边有很多安装日志之类的文本文件,也有home/lei目录,可是进去没有发现在被我删除的文件。重新试了几次,依然是这样。
恢复失败了。
4、心有不甘,再试
进入ubuntu系统,从网上下了三张图片,防在桌面上的testonemore文件夹里。然后打开终端输入
rm -rf Desktop/testonemore
sudo mount -o remount,ro /dev/lei-pc/root 想要以只读模式挂载根分区,但提示/“ is busy“”,失败了
sudo poweroff
再次把盘挂在centos下,启动centos
这次我没有把/dev/lei-pc/root挂载到/mnt目录下而是直接开始恢复
extundelete /dev/lei-pc/root --restore-all
cd RECOVERED_FILES 里边依然有很多日志类文件,但找到了home/lei/Desktop目录,里边有一个名为“Untitled Folder”的文件夹,进去一看是我放的那三张图片。也许这次真的成功了。
5、测试数据是否已经损坏。
我有同样的三张图片放在/root/testonemore文件夹里,用md5sum看看是不是一样的
md5sum /root/testonemore/pic1.jpg 看到了原文件的md5值
md5sum pic1.jpg 输出的md5值和原文件一样,这些真的恢复成功了。
6、总结
第一次之所以不成功,是可能是因为我在关机的时候依然有一些保存操作,导致数据被覆盖了,而第二次文件夹名改变也应该是同样的原因,文件名和牵引节点号错位了,不过运气比较好,问题不大。
从这次可以看出,不是误删之后立即停止操作就一定能恢复数据,对于硬盘只有一个根分区的系统来说,能不能恢复数据,真的要看运气。
Linux EXT3文件系统下成功恢复误删的文件:http://www.linuxdiyf.com/linux/8659.html
linux误删~/.bashrc解决办法:http://www.linuxdiyf.com/linux/13485.html
Linux误删除文件的恢复:http://www.linuxdiyf.com/linux/5132.html
Ubuntu误删当前内核后的修复方法:http://www.linuxdiyf.com/linux/4489.html
简单方法处理Linux误删除问题:http://www.linuxdiyf.com/linux/319.html