专栏首页python3用ext3grep恢复删除的文件

用ext3grep恢复删除的文件

一个同事不小心使用rm -rf命令误删了自己的代码,这意味着一个月的工作丢失了(一个月没有备份过代码,看来他以前一定没经历计算机崩溃的灾难)。我们知道rm命令无法撤销,那么有没有办法恢复这个被删除的目录以及其中的全部文件呢?

在网上搜索了一下,找到一个名为ext3grep的工具。在这个工具出现以前,恢复ext3文件系统中被删除的数据是不可能的。因为ext3文件系统不同于ext2文件系统,它在删除一个文件后,会把文件inode结点中扇区指针清为0,而这让文件恢复看起来不太可能。不过,正如ext3grep工具作者所说的,因为ext3是一个日志型的文件系统,通过分析日志信息,有很大的可能重新解析出块指针,从而恢复出目录和文件。

以下是恢复文件所采用的步骤,希望对大家有帮助。

[ 卸载被误删除文件所在的分区,或以只读方式mount ]

当你发现你误删除了文件后,要做的第一件事是马上卸载被误删除文件所在的分区,或者以只读的方式来挂载该分区。原因大家都很清楚,文件被删除后,文件中的数据还存在磁盘上,除非存放这些数据的数据块又被操作系统分配出去了。我们这一步就是尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的比率。

如果被误删的文件在根分区,那么你最好重启计算机,进入单用户模式,以只读的方式挂载根分区,然后再进行恢复。要进行单用户模式。

进入单用户模式后,根分区还是以读写方式mount的,用下面的命令,把挂载方式由读写(rw)改为只读(ro):

mount -o ro,remount /

如果被删除的文件不是根分区,也可以用unmount的方式将该分区卸载。假设文件在分区/dev/sda3中,该分区挂载到/home,那么我们用下面的命令来卸载:

umount /dev/sda3

或者命令:

umount /home

当然,在卸载前要保证没有程序在访问该分区,否则卸载会失败。所以,Easwy一般推荐进入单用户模式来恢复文件。

[ 安装ext3grep工具 ]

恢复的第一步当然是安装ext3grep工具。对于Debian/Ubuntu用户来说,安装ext3grep工具非常简单,只需要执行下面的命令:

aptitude install ext3grep

不过很多公司使用的Linux版本是Centos,所以需要自己手工编译ext3grep工具,其实这也很简单,首先到ext3grep主页上下载它的源代码,然后用下面的命令解压/编译/安装这个工具。

tar zxf ext3grep-0.10.1.tar.gz

cd /home/easwy/ext3grep-0.10.1

./configure

make

make install

注:在网上搜了一下,ext3grep也有rpm包可以下载,比如,RHEL/CentOS的RPM包可以在这里下载。其它Linux发行版的RPM也可以在rpmfind.net上找到。

前面说过,发现误删除后,要卸载掉该分区,或者进入单用户模式。所以最好在另外一台计算机上来编译或安装这个工具,然后把ext3grep这个可执行文件拷贝到U盘中再进行恢复。因为同事的文件恰好在根分区中。如果你也是这种情况,那么在用RPM包安装时,则需要把RPM包安装到你指定的目录中,然后再把它拷贝到U盘中。

U盘里只需要拷贝ext3grep一个文件即可,它不需要动态加载库就可以执行。接下来把U盘插到待恢复的电脑上,用下面的命令加载:

mount -t vfat /dev/sdb1 /mnt

把上面的设备号和安装点换成你自己的。如果你的设备文件还不存在的话,用mknod命令创建一下吧。

现在,我们可以开始文件恢复了。

[ 恢复文件 ]

在开始恢复前,选择一个目录来存放被恢复的文件。ext3grep程序会在当前目录下创建一个名为RESTORED_FILES的目录来存放被恢复的文件。因此在运行ext3grep命令前,先要切换到一个你可读写的目录中。

因为进入了单用户模式,并且将根分区设成了只读,那么只能把恢复出来的文件放在U盘中了。因此,先cd /mnt进入U盘目录。

如果你有幸记得你误删除的文件名及其路径的话,就可以直接用下面的命令进行恢复了:

ext3grep /dev/your-device --restore-file path/to/your/file/filename

需要注意的是,上面的文件路径,是在该分区上文件路径。假设我们要恢复/dev/sda3分区上文件,这个分区原来的安装点是/home,现在想恢复文件/home/xxx/vi/tips.xml,那么输入的命令应该是:

ext3grep /dev/sda3 --restore-file xxx/vi/tips.xml

如果你忘记了文件名,或者你误删除的是一个目录而你无法记全该目录中的文件,你可以先用下面的命令查询一下文件名:

ext3grep /dev/sda3 --dump-names | tee filename.txt

上面的命令把ext3grep命令的输出记录到文件filename.txt中,你可以慢慢查看,或者使用grep命令过滤出你需要的信息。

当你知道了目录/文件的信息后,就可以用上面说的命令进行恢复了。

在ext3grep命令中有一个–depth参数,应该是用来恢复目录以及其中的所有子目录和文件的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用ext3grep恢复ext3文件系统

    需要安装的软件为:ext3grep http://code.google.com/p/ext3grep/

    py3study
  • ext3grep 工具的使用

     ext3grep 是ext3文件系统的数据恢复工具,在ext3文件系统里删除一个文件,就是将该文件的inode节点中的指针清除,其实数据还在存在block当中...

    py3study
  • 安装ext3grep

    依赖包的安装 [root@localhost .unison]# rpm -qa |  grep  e2fsprogs e2fsprogs-devel-...

    py3study
  • Arcgis for JS之对象捕捉

    在web操作,如绘制或者测量的时候,为了精确,需要捕捉到某一图层的对象,在此,讲解下如何在Arcgis for JS中实现捕...

    lzugis
  • Swiper轮播插件手动滑动后,无法自动切换的问题解决

    今天在写一个移动端的页面,使用 swiper 轮播插件写了一个 banner 轮播,并设置了自动滑动。

    德顺
  • 区块链兄弟社区问答精选:关于51%攻击,你了解有多少?

    材料整合:小链 本文转载自区块链兄弟,区块链兄弟——技术专业问答先行者,区块链爱好者聚集地 本文约2400字,阅读(观看)需要16分钟 ? 问题1:有没有谁能帮...

    企鹅号小编
  • 字符串的相关操作

    The problem is not the problem. The problem is your attitude about the problem.

    小闫同学啊
  • 【浅谈Chromium中的设计模式(一)】——Chromium中模块分层和进程模型

    “EP”(中文:工程生产力)是目前项目中提升研发能力的一个很重要的衡量指标。笔者重点学习了Chromium产品是如何从代码和设计层面来保证快速高效的工程生产力。...

    腾讯移动品质中心TMQ
  • k8s源码分析------第三方库go-restful分析

    第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

    月牙寂道长
  • kubernetes系列教程(二十)prometheus提供完备监控系统

    上一个章节中kubernetes系列教程(十九)使用metric-server让HPA弹性伸缩愉快运行介绍了在kubernetes中的监控架构,通过安装和使用m...

    HappyLau谈云计算

扫码关注云+社区

领取腾讯云代金券