恢复Ext3下被删除的文件(转)

前言

下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。

 

删除文件

假设我们有一个文件名叫 ‘test.txt’

 

 $ls -il test.txt15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt

注意:: “-il” 选项表示显示文件的i-node号(15),如果你不知道Unix/Linux文件系统的“I结点”的话,你有必要先补充一下相关的知识。简单说来,i结点就是操作管理文件的一个标识号。

我们再看一下其内容:

$ cat test.txt
this is test file

好,现在我们开始删除文件:

$rm test.txt
rm: remove write-protected regular file `test.txt’? y

 

使用 Journal 和 Inode 号恢复

注意,如果你删除文件后重启了系统,那么,相关的文件 journal 会丢失,我们也就无法恢复文件了。所以,恢复文件的前提是,Journal不能丢失,即,系统不能重启。

因为我们已经知道 test.txt 文件的 inode 号是 15,所以我们可以使用 debugfs 命令来查看:

复制代码
debugfs: logdump -i <15>
FS block 1006 logged at sequence 404351, journal block 7241
(inode block for inode 15):
Inode: 15 Type: regular Mode: 0664 Flags: 0×0 Generation: 0
User: 0 Group: 0 Size: 20
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x48159f2d — Mon Apr 28 15:25:57 2008
atime: 0x48159f27 — Mon Apr 28 15:25:51 2008
mtime: 0x4806f070 — Thu Apr 17 12:08:40 2008
Blocks: (0+1): 10234
No magic number at block 7247: end of journal.
复制代码

 

请注意上面信息中的这一行:

Blocks: (0+1): 10234

这就是inode 15存放文件的地址(数据块)。然后,我们知道了这个地址,我们就可以使用 dd 命令,把这个地址上的数据给取出来。

复制代码
#dd if=/dev/sda5 of=/tmp/test.txt bs=4096 count=1 skip= 10234
1+0 records in
1+0 records out
if 是输入的设备
of 是输出的设备.
bs 指定一个block的大小
count 说明有多少个block需要dump
skip 说明从开始的地方跳过 10234 个block,并从取下一个block的数据
复制代码

 

下面让我们看一下被恢复的文件:

$cat /tmp/test.txt 
this is test file

当然,上面的文件恢复是基于我们知道文件的inode,可在现实中,我们并不知道这个信息,如果我们不知道inode,我们还可能恢复吗?是的,这是可能的,让我们来看一下如何恢复。

 

使用 Journal 和 文件名恢复

如果我们不知道文件的inode我们可能恢复吗?我可以告诉你,这是不可能的事情。不过我们有办法知道文件的inode号。下面让我们来看看怎么做到:

$rm mytest.txt
rm: remove write-protected regular file `mytest.txt’? y

注意,我们并不知道其inode号,但我们可以使用 debugfs 命令来查看(使用其 ls -d 选项)。

debugfs:  ls -d2  (12) .    2  (12) ..    11  (20) lost+found    2347777  (20) oss
<2121567> (20) mytest.txt

你看文件名了吧,它的inode号是 <2121567> ,注意,被删除了的文件的inode都是用尖括号包起来的。

即然知道了inode号,那么我们就很容易恢复了(使用 logdump选项):

复制代码
debugfs:  logdump -i <2121567>
Inode 2121567 is at group 65, block 2129985, offset 3840
Journal starts at block 1, transaction 405642FS block 2129985 logged at sequence 405644, journal block 9(inode block for inode 2121567):Inode: 2121567   Type: bad type        Mode:  0000   Flags: 0×0   Generation: 0User:     0   Group:     0   Size: 0File ACL: 0    Directory ACL: 0Links: 0   Blockcount: 0Fragment:  Address: 0    Number: 0    Size: 0ctime: 0×00000000 — Thu Jan  1 05:30:00 1970atime: 0×00000000 — Thu Jan  1 05:30:00 1970mtime: 0×00000000 — Thu Jan  1 05:30:00 1970Blocks:FS block 2129985 logged at sequence 405648, journal block 64(inode block for inode 2121567):Inode: 2121567   Type: regular        Mode:  0664   Flags: 0×0   Generation: 913772093User:   100   Group:     0   Size: 31File ACL: 2130943    Directory ACL: 0Links: 1   Blockcount: 16Fragment:  Address: 0    Number: 0    Size: 0ctime: 0x4821d5d0 — Wed May  7 21:46:16 2008atime: 0x4821d8be — Wed May  7 21:58:46 2008mtime: 0x4821d5d0 — Wed May  7 21:46:16 2008Blocks:  (0+1): 2142216
复制代码

上面有很多信息,让我们仔细地查看,你可以看到下面一行信息:

FS block 2129985 logged at sequence 405644, journal block 9

并且,其类型是:

 Type: bad type 

再仔细看一下文件的时间戳下面的Blocks: 什么也没有。那么,让我们看一下下一个block:

FS block 2129985 logged at sequence 405648, journal block 64(inode block for inode 2121567):

这一条Journal就有block信息了:

Blocks:  (0+1): 2142216

这就是被删除文件的地址,让我们再次运行恢复命令:

$sudo dd if=/dev/sda5 of=/home/hchen/mytest_recovered.txt bs=4096 skip=2142216 count=1

再让我们来检查一下文件内容:

$ cat mytest_recovered.txt
this is my test file 

 

小结

好了,下面是我们的一些总结:
1)使用 debugfs: ls -d 找到被删除文件的inode号。
2)使用 debugfs:logdump找到文件的数据块地址。
3)使用dd 命令把数据取出来存成文件。

网上有很其它不同的方法来恢复文件,基本上也是使用debugfs这个命令,有的还使用到了lsdel,其实大同小异,这个教程是我在网上看到的,虽然他说只是针对Ext3文件系统的,但我总感觉应该可以用于Ext2文件系统,不过我没有试过。也许Ext2和Ext3被debugfs输出的信息不一样吧。大家可以去试试。

 

转自 http://www.cnblogs.com/ggjucheng/archive/2012/10/07/2714308.html

转载于:https://www.cnblogs.com/fwdxl/p/6706053.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon trainf_ocr_class_svm 训练OCR分类器

目录trainf_ocr_class_svm&#xff08;算子&#xff09;描述参数trainf_ocr_class_svm&#xff08;算子&#xff09; trainf_ocr_class_svm - 训练OCR分类器。 trainf_ocr_class_svm&#xff08;:: OCRHandle&#xff0c;TrainingFile&#xff0c;Epsilon&#xff0c;TrainMo…

Javascript之全局变量和局部变量部分讲解

以此文作为自己学习的一个总结。 关于全局变量和局部变量的一句简单的定义&#xff1a;在函数外声明的变量都为全局变量&#xff0c;在函数内声明的为局部变量。 一、局部变量和全局变量重名会覆盖全局变量 1 var a 1; 2 function test1() { 3 var a 2; 4 ale…

XML-RPC使用手册

内容列表 Preface: About This Manual Introduction to XML-RPC for C/C What is XML-RPC? How Does XML-RPC For C/C Help? More Information On XML-RPC For C/CThe Xmlrpc-c Function Libraries C Libraries C LibrariesUtility Programs xmlrpc xmlrpc_dumpserverAlterna…

利用ffmpeg来进行视频解码的完整示例代码(H.264)

Decode() { FILE * inpf; int nWrite; int i,p; int nalLen; unsigned char* Buf; int got_picture, consumed_bytes; unsigned char *DisplayBuf; DisplayBuf(unsigned char *)malloc(60000); char outfile[] "test.pgm"; //1.打开输入文件 inpf fopen("test…

如何成为非标行业的大拿

&#xfeff;&#xfeff;1&#xff0c;选一个好的舞台&#xff08;工作环境&#xff09;&#xff0c;有个广告词叫&#xff1a;‘心有多大&#xff0c;舞台就有多大’&#xff0c;我想变个说法叫‘舞台越大&#xff0c;心就越大’。决定你表演效果的舞台&#xff0c;你如果选择…

TCP UDP HTTP 的关系和区别

TCP UDP HTTP 三者的关系: TCP/IP是个协议组&#xff0c;可分为四个层次&#xff1a;网络接口层、网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层有HTTP、FTP、TELNET、SMTP、DNS等协议。 TCP…

微信开放平台全网发布时,检测失败 —— C#

主要就是三个&#xff1a;返回API文本消息&#xff0c;返回普通文本消息&#xff0c;发送事件消息 --会出现失败的情况 &#xff08;后续补充说明&#xff1a;出现检测出错&#xff0c;不一定是代码出现了问题&#xff0c;也有可能是1.微信方面检测时出现服务器请求失败&…

halcon reduce_ocr_class_svm 缩减基于SVM的OCR分类器。

目录reduce_ocr_class_svm&#xff08;算子&#xff09;描述参数reduce_ocr_class_svm&#xff08;算子&#xff09; reduce_ocr_class_svm - 缩减基于SVM的OCR分类器。 reduce_ocr_class_svm&#xff08;:: OCRHandle&#xff0c;Method&#xff0c;MinRemainingSV&#xff…

Zabbix 钉钉报警

话不多说&#xff0c;咱们直接进入正题钉钉报警时基于zabbix&#xff0c;访问钉钉应用接口去推送的报警消息&#xff0c;所以我们需要一个在钉钉创建一个报警应用1、 我做的钉钉报警是基于钉钉自定义应用进行推送的所以需要登录钉钉管理后台进行创建&#xff08;zabbix自定义应…

七大因素阻碍非标自动化行业发展,那么应对的策略是什么呢?

&#xfeff;&#xfeff; 非标自动化机械相对于标准机械而言&#xff0c;是可以根据企业需要量身定做的设备&#xff0c;可以实现标准机械所不能实现的一些功能&#xff0c;实现标准件不可能达到的产量。例如在注塑行业中&#xff0c;众多注塑企业根据自身实际情况通过制造业自…

单播、多播(组播)和广播的区别

单播、多播和广播单播”&#xff08;Unicast&#xff09;、“多播”&#xff08;Multicast&#xff09;和“广播”&#xff08;Broadcast&#xff09;这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思&#xff1f;区别何在&#xff1f;1.单播&am…

数据库资源博客---小麦苗BEST

http://blog.csdn.net/lihuarongaini/article/details/60584577 http://blog.csdn.net/lihuarongaini/article/details/68485838转载于:https://www.cnblogs.com/zengkefu/p/6718754.html

halcon write_ocr_class_svm 将OCR分类器写入文件

目录write_ocr_class_svm&#xff08;运算符&#xff09;描述参数write_ocr_class_svm&#xff08;运算符&#xff09; write_ocr_class_svm - 将OCR分类器写入文件。 write_ocr_class_svm&#xff08;:: OCRHandle&#xff0c;FileName ? 描述 write_ocr_class_svm将OCR分…

jQuery插件备忘

jQuery BlockUI Plugin 遮罩插件 http://malsup.com/jquery/block/ artDialog是一个基于javascript编写的对话框组件&#xff0c;它拥有精致的界面与友好的接口 …

于敦德:途牛五大战略纵深不惧同质化竞争

&#xfeff;&#xfeff;于敦德说&#xff0c;途牛已经在目的地、出发地、产品系列、客户和品牌五个领域建立起了纵深壁垒&#xff0c;不担心任何局部竞争&#xff0c;将坚决把局部同质化战争打到底。 一个行业的两种公司 包括旅游在内的很多行业通常都有两种公司&#xff1a;…

活在当下吧

‘’你得为你自己而活&#xff0c;想要什么就去争取&#xff0c;不要干等着以为别人会施舍给你&#xff0c;也不要在意别人的眼光和看法&#xff0c;你首先得考虑的是你自己。” “你要明白&#xff0c;只有当你自己在乎自己的时候&#xff0c;别人才会用正眼看你&#xff0c;才…

ptime概述

官方给出的ptime的定义是&#xff1a;ptime gives the length of time in milliseconds represented by themedia in a packet。简单来讲就是一个数据包中媒体的时长&#xff0c;以毫秒为单位。比如&#xff1a;ptime:20就是定义为20毫秒。 每种媒体的时间是不一样。比如&#…

halcon clear_ocr_class_svm 清除基于SVM的OCR分类器

目录clear_ocr_class_svm&#xff08;算子&#xff09;描述参数&#xff1a;clear_ocr_class_svm&#xff08;算子&#xff09; clear_ocr_class_svm - 清除基于SVM的OCR分类器。 clear_ocr_class_svm&#xff08;:: OCRHandle ? 描述 clear_ocr_class_svm清除OCRHandle给…

自定义线程的方式

2019独角兽企业重金招聘Python工程师标准>>> package com.javaxxz.test;public class Demo extends Thread {/*** 创建线程的方式* 方式一&#xff1a;* 1、自定义一个类继承Thread类* 2、重写Thread类的run方法,把自定线程的任务代码写在run方法中* …

如何使用思维导图

&#xfeff;&#xfeff;思​维​导​图​比​较​容​易​,​因​为​我​们​平​时​都​是​这​样​思​考​,​但​参​考​一​些​思​维​导​图​练​习​案​例​,​还​是​有​帮​助​的​,​使​我​们​做​的​更​好​!