在linux下使用debugfs恢复rm删除的文件
原理主要是删除的文件并没有实际上从硬盘上摸去,只是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删除的文件的更多相关文章
- linux 下结合find 和 rm 删除大量文件
echo "remove only files, the logs folder and it contents will not be removed"find /opt/tra ...
- LINUX 下通过lsof恢复被误删除的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹.管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志.有时可以通过lsof来恢复这些 ...
- (总结)Linux下使用rsync最快速删除海量文件的方法
昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所 ...
- (转)Linux下使用rsync最快速删除海量文件的方法
转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...
- Linux下使用rsync最快速删除海量文件的方法
常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所以必须要采取一些非常手段.我们可以使用rsync来实现快速删除大量文件. 1.先安装rsync: yum install rsyn ...
- TestDisk 恢复rm -rf 的文件
Linux操作系统下使用TestDisk恢复已删除的文件或目录 原创作者:szyzln/2015.10.16 转载需注明原始出处! 说明: testdisk和photorec是著名的恢复数据,而绝 ...
- Linux下用rm删除的文件的恢复方法
Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站https://www.linuxidc.com/Linux/2008-08/14744.htm linu ...
- Linux rm 删除指定文件外的其他文件 方法汇总
一.Linux下删除文件和文件夹常用命令如下: 删除文件: rm file 删除文件夹: rm -rf dir 需要注意的是, rmdir 只能够删除 空文件夹 . 二.删除制定文件(夹)之外的所有文 ...
- Linux rm删除大批量文件
在使用rm删除大批量文件时,有可能会遭遇"参数列太长"(Argument list too long)的问题.如下所示 [oracle@DB-Server bdump]$ rm - ...
随机推荐
- Python报错IOError: [Errno 22] invalid mode ('r') or filename
IOError: [Errno 22] invalid mode ('r') or filename: 这种错误的出现是在使用built-in函数file()或者open()的时候. 或者是因为文件的 ...
- python中继承和多态
继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类 1.英雄要有昵称.攻击力.生命值属性 2.实例化出两个英雄对象 3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死 ...
- Qt QScrollArea and layout in code
Qt QScrollArea and layout in code 一.参考文档: . Qt 第六章 QScrollArea类给QWidget添加滚动条 http://blog.csdn.net/co ...
- 解决使用 aapt 中遇到的问题
|---- yum install glibc.i686 libstdc++.i686 zlib.i686 -y; .csharpcode, .csharpcode pre { font-size: ...
- c语言符号常量与常变量的区别?
<blockquote>定义符号常量:#define PI 3.1415926 //注意后面没有分号 定义常变量 :const float PI=3.1415 ...
- iOS 修改通讯录联系人地址(address)崩溃原因分析
目前项目中需要对iOS系统通讯录进行读取,修改操作.在进行对地址修改的时候,出现了一个奇怪现象: ● 如果contact没有address字段(或者一个全新的contact),对它的address进行 ...
- c++ template不能有cpp
c++的template只能把生命和定义都放在.h文件里,不然会出错
- 新版eclipse编写Android 时常常报的错误 -support-v7
一..和以往一样新建完一个Android项目之后.会报android.support.v4.. . . 或者V7找不到的错误. 这是由于这两个包在还有一个附带的项目(android-support ...
- Oracle分组函数实例
分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...
- Spring Boot和Spring cloud
微服务框架SpringBoot简单验证 首先摘录部分IBM网站部分内容对框架做一个简单说明 http://www.ibm.com/developerworks/cn/java/j-lo-spring- ...