原文地址:http://www.libenfu.com/vim-分区下误删的文件,恢复文件全记录-转

当时我的工作目录是/source/needrecovered

$ pwd
/source/needrecovered

原本打算清空其中的一个子文件,

$ rm -rf canbedeleted/html

却打成如下命令:

$ rm -rf canbedeleted/ *

当时我琢磨着今天怎么删个小文件夹这么慢呢。等我仔细看了下命令,反应过来的时候,已经太迟了,整个工作目录被清空了 。

没辙了,只能先到网上找找解决方案了,网上大致提到的方法有两种:一种是利用debugfs;第二种是利用ext3grep

第一种方法,我尝试了若干次都以失败告终,第二种成功了。但是相同的是:两种方法首先提到的都是将对该分区进行操作的应用先全部关闭,具体如下:

以下的操作尽量使用root操作,以提高数据恢复的成功率。

#该命令用于列出操作该分区的进程
fuser -v -m /source
#如果没有很重要的进程,利用下面的命令将其全部 kill 掉
fuser -k -v -m /source

执行上面命令的时候,务必要将你的工作目录切换到/source以外,否则你的sshd会被kill掉。

这样子可以达到两个好处

1) 防止新的文件操作影响数据的恢复

2) 方便对磁盘或者分区进行进一步的操作,如:mountumount

接下来我们看看磁盘分区情况:

$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda8 ext3 7.9G 6.3G 1.2G 84% /source
/dev/sdb1 fuseblk 299G 266G 33G 90% /data/

需要恢复的分区是/dev/sda8,挂载点是/source

先将此分区卸载,并在/data分区建立一个用于存储备份数据的文件夹。

umount -v /source
mkdir -p /data/recovery

现在轮到主角登场了,先去下载一份ext3grep的源码,并安装:

cd /data/recovery
#此链接地址以官网最新版本为准
wget http://ext3grep.googlecode.com/files/ext3grep-0.10.2.tar.gz
tar xfz ext3grep-0.10.2.tar.gz
cd ext3grep-0.10.2
./configure --prefix=/data/recovery
make && make install

接下来就进入正式的恢复工作,先对需要恢复的磁盘进行扫描。

cd /data/recovery
nohup /data/recovery/bin/ext3grep /dev/sda8 --ls --inode 2 &
#建议使用 nohup 和 &,因为如果分区很大的话耗时比较长

扫描完毕后,/data/recovery中会出现两个分别名为c0d2.ext3grep.stage1c0d2.ext3grep.stage2的文件。前者可以直接忽略,后者里面保存着可以被恢复备份的文件名。

由于我需要备份的文件很多,几十G,就用下面这个命令进行全部恢复。

cd /data/recovery
nohup /data/recovery/ext3grep/bin/ext3grep /dev/sda8 --restore-all &
#建议使用 nohup 和 &,因为如果分区很大的话耗时比较长

需要注意的是,restore-all参数会将整个磁盘所有文件(已删除可恢复的文件和未被删除还存在的文件)进行恢复和备份处理,所以请确认你的存放恢复文件的分区有足够的空间。

如果仅仅是恢复几个文件的话,建议使用restore-file参数 备份的文件会存放在工作目录的名为RESTORED_FILES的文件夹里,本文中就是cd /data/recovery/RESTORED_FILES

最新文章

  1. MongoDB学习笔记六—查询下
  2. ERROR 1010 (HY000): Error dropping database (can't rmdir './test/', errno: 17)
  3. JSON金额解析BUG的解决过程
  4. 【Windows编程】系列第八篇:通用对话框
  5. sql关联表查询结果并插入
  6. Android基于mAppWidget实现手绘地图(十二)–显示当前用户位置
  7. [翻译] 为什么Uber的数据库从Postgres 切换到 MySql
  8. mysql查看存储过程
  9. derby数据库操作比较难理解的错误及解决方法大全
  10. How to: Fix a network printer suddenly showing as offline in Windows Vista, 7 or 8 « Robin's Blog
  11. Deadline来了,如何按时结题?
  12. 用JavaScript判断横屏竖屏问题。JavaScript代码如下【转】
  13. RMI入门教程
  14. 7.19 SQL——函数
  15. 使用npm install报错-4048 operation not permitted解决
  16. HashMap实现原理和源码解析
  17. 关于减少BUG的思考
  18. 51nod1268 和为K的组合(DFS)
  19. Shiro的认识
  20. 058 kafka与log4j集成

热门文章

  1. @Value注入static属性
  2. C# 自定义特性(Attribute)详解
  3. 乐字节Java反射之四:反射相关操作
  4. [知乎]鲲鹏920对比intel8180
  5. 龙芯PG10 安装uuid-ossp 的方法 复用瀚高数据库的 so文件
  6. ubuntu18和windows10双系统时间不同步问题(Ubuntu)
  7. Python连接ORACLE操作
  8. redis 缓存对象、列表
  9. C# 中类的成员有哪些?
  10. Linux命令(1)grep