原理主要是删除的文件并没有实际上从硬盘上摸去,只是inode索引删除了相关的信息,因此只要找到刚删除文件的block上,就可以恢复已经删除的文件。

以下方法在ext3的文件系统上测试通过,ext2的没有测试过。假设删除的文件在dir下面,位于/dev/sda5上。

主要借助debugfs

1 运行debugfs,进入调度模式

2 执行open /dev/sda5

3 执行ls -d dir 会列出此目录最近的操作,其中可以看到<num>的日志删除记录

4 执行logdump -i <num> 显示此日志内容

5 在输出中寻找删除文件对应的block,记录下来blockid

6退出debugfs,运行dd if=/dev/sda5 of=/tmp/saved  bs=1024 count=1 skip=blockid

此时就把删除的文件恢复了,不过这个方法有个问题,如果删除的是大文件,则占用多个block,操作起来比较麻烦。

debugfs在调试模式下,命令行比较难用,不过其支持-R选项,可以在SHELL里执行,就是用多个-R把要执行的命令连接起来,若命令中需要指定参数则需要加"",否则SHELL解析会有问题。

比较好用的工具有testdisk,之前用过他来恢复和备份系统的分区表,没有恢复过文件。以后出问题也可以试试。

来源:http://blog.csdn.net/zzulp/article/details/7466866

 
 

在linux下使用debugfs恢复rm删除的文件的更多相关文章

  1. linux 下结合find 和 rm 删除大量文件

    echo "remove only files, the logs folder and it contents will not be removed"find /opt/tra ...

  2. LINUX 下通过lsof恢复被误删除的文件

    当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹.管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志.有时可以通过lsof来恢复这些 ...

  3. (总结)Linux下使用rsync最快速删除海量文件的方法

    昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所 ...

  4. (转)Linux下使用rsync最快速删除海量文件的方法

    转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...

  5. Linux下使用rsync最快速删除海量文件的方法

    常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所以必须要采取一些非常手段.我们可以使用rsync来实现快速删除大量文件. 1.先安装rsync:  yum install rsyn ...

  6. TestDisk 恢复rm -rf 的文件

    Linux操作系统下使用TestDisk恢复已删除的文件或目录 原创作者:szyzln/2015.10.16   转载需注明原始出处! 说明: testdisk和photorec是著名的恢复数据,而绝 ...

  7. Linux下用rm删除的文件的恢复方法

    Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站https://www.linuxidc.com/Linux/2008-08/14744.htm linu ...

  8. Linux rm 删除指定文件外的其他文件 方法汇总

    一.Linux下删除文件和文件夹常用命令如下: 删除文件: rm file 删除文件夹: rm -rf dir 需要注意的是, rmdir 只能够删除 空文件夹 . 二.删除制定文件(夹)之外的所有文 ...

  9. Linux rm删除大批量文件

    在使用rm删除大批量文件时,有可能会遭遇"参数列太长"(Argument list too long)的问题.如下所示 [oracle@DB-Server bdump]$ rm - ...

随机推荐

  1. Python报错IOError: [Errno 22] invalid mode ('r') or filename

    IOError: [Errno 22] invalid mode ('r') or filename: 这种错误的出现是在使用built-in函数file()或者open()的时候. 或者是因为文件的 ...

  2. python中继承和多态

    继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类 1.英雄要有昵称.攻击力.生命值属性 2.实例化出两个英雄对象 3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死 ...

  3. Qt QScrollArea and layout in code

    Qt QScrollArea and layout in code 一.参考文档: . Qt 第六章 QScrollArea类给QWidget添加滚动条 http://blog.csdn.net/co ...

  4. 解决使用 aapt 中遇到的问题

    |---- yum install glibc.i686 libstdc++.i686 zlib.i686 -y; .csharpcode, .csharpcode pre { font-size: ...

  5. c语言符号常量与常变量的区别?

    <blockquote>定义符号常量:#define PI 3.1415926               //注意后面没有分号 定义常变量  :const float PI=3.1415 ...

  6. iOS 修改通讯录联系人地址(address)崩溃原因分析

    目前项目中需要对iOS系统通讯录进行读取,修改操作.在进行对地址修改的时候,出现了一个奇怪现象: ● 如果contact没有address字段(或者一个全新的contact),对它的address进行 ...

  7. c++ template不能有cpp

    c++的template只能把生命和定义都放在.h文件里,不然会出错

  8. 新版eclipse编写Android 时常常报的错误 -support-v7

    一..和以往一样新建完一个Android项目之后.会报android.support.v4.. . . 或者V7找不到的错误.   这是由于这两个包在还有一个附带的项目(android-support ...

  9. Oracle分组函数实例

    分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...

  10. Spring Boot和Spring cloud

    微服务框架SpringBoot简单验证 首先摘录部分IBM网站部分内容对框架做一个简单说明 http://www.ibm.com/developerworks/cn/java/j-lo-spring- ...