文件恢复的原理:

首先简单介绍一下 Linux 文件系统的最基本单元:inode。inode 译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是 inode,另一部份是 block,block 是用来存储数据用的。而 inode 呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode 为每个文件进行信息索引,所以就有了 inode 的数值。在 ext3 和 ext4 文件系统中,每个文件都是通过 inode 来描述其数据存放的具体位置,当文件被删除以后,inode 的数据指针部分被清零,文件目录区没有太多变化。文件的读写都是通过 inode 来实现,当 inode 数据指针被清零以后,即便文件内容还在,也没有办法把文件内容组合出来。当 ext3 和 ext4 文件系统中的元数据 metadata 发生变化时,相应的元数据 metadata 在日志文件会有一份拷贝。比如一个文件被删除了,它的 inode 信息会在日志文件中先保存一份,然后把要删除文件 inode 相关信息清零。这个日志文件是循环使用的,当操作过多时,删除的文件的 inode 日志记录会被新的数据替换,这就彻底丧失了根据 inode 找回数据的机会了。如果是大量文件的删除,这个日志文件会被反复循环利用多次,只留给最后删除的那些文件的恢复机会。

linux 操作系统下可以使用 ls –id 或者 stat 命令来查看文件或者目录的 inode 值

[iyunv@crushlinux ~]# stat install.log

File: “install.log”

Size: 34226      Blocks: 80         IO Block: 4096   一般文件

Device: 303h/771d Inode: 4672098     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2014-05-06 14:49:22.000000000 +0800

Modify: 2013-05-04 22:24:21.000000000 +0800

Change: 2013-05-04 22:24:38.000000000 +0800

[iyunv@crushlinux ~]# ls -i install.log

4672098 install.log

上面信息给出install.log文件的inode号码为:4672098

formost 是一个基于文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具。这个过程通常叫做数据挖掘(data carvubg)。formost 可以分析由 dd、Safeback、Encase 等生成的镜像文件,也可以直接分析驱动器。文件头和尾可以通过配置文件设置,也可以通过命令行开关使用 formost 内建的文件类型。formost 最初是由美国空军特别调查室(Air Force Office of Special Investigations)和信息系统安全研究中心(The Center for Information Systems Security Studies and Research)开发的,现在使用 GPL 许可。Foremost 支持恢复如下格式:avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi, sxw, vis, wav, wmv, xls, zip。

针对 Linux 下的 ext 文件系统来说,常用的 Linux 文件删除恢复工具有 debugfs、ext3grep、extundelete 等。extundelete 是一个开源的数据恢复工具,支持 ext3、ext4 文件系统,其官方站点位于 http://extundelete.sourceforce.net/ ,目前最新稳定版本为 0.2.0。

上面介绍的两种命令行工具 foremost 和 extundelete 二者相比,foremost 支持的文件系统比较多(包括 ext2、 ext3 、vfat、NTFS、ufs、jfs 等)和 extundelete 支持的文件系统较少(ext3、ext4)文件系统。不过 foremost 只能支持恢复特定格式的文件。

模拟实验环境:

[iyunv@crushlinux ~]# cd ~/Desktop

[iyunv@crushlinux Desktop]# ls

desktop.png

[iyunv@crushlinux Desktop]# rm -f desktop.png

[iyunv@crushlinux Desktop]# cd /root/

下载并编译安装 foremost:

[iyunv@crushlinux ~]# wget http://foremost.sourceforge.net/pkg/foremost-1.5.7.tar.gz

[iyunv@crushlinux ~]# tar xf foremost-1.5.7.tar.gz -C /usr/src/

[iyunv@crushlinux ~]# cd /usr/src/foremost-1.5.7/

[iyunv@crushlinux foremost-1.5.7]# ls

api.c    cli.c     dir.c     extract.c  foremost.8.gz  helpers.c  main.h    ole.h   state.c

CHANGES  config.c  engine.c  extract.h  foremost.conf  main.c     Makefile  README

[iyunv@crushlinux foremost-1.5.7]# make && make install

先确定被删除文件的所在分区,我的文件在/root/Desktop/下属于/,而/上挂载了设备 /dev/hda3

[iyunv@crushlinux foremost-1.5.7]# mount

/dev/hda3 on / type ext3 (rw)

[iyunv@crushlinux foremost-1.5.7]# foremost -t png -i /dev/hda3

恢复完成后会在你的当前所在目录中建立一个 output 目录,并在在 output 目录下会建立 png 子目录下会包括所有已经恢复回来的 png 格式的文件。

注意:恢复回来的文件,文件名已经改变,另外 output 目录下有一个 audit.txt 文件是恢复成功文件的列表。

[iyunv@crushlinux output]# pwd

/usr/src/foremost-1.5.7/output

[iyunv@crushlinux output]# ls

audit.txt  png

[iyunv@crushlinux output]# cd png

[iyunv@crushlinux png]# ls -l 38019080.png

-rw-r--r-- 1 root root 13024 05-06 14:39 38019080.png

原本叫 desktop.png 的文件恢复回来之后文件名改成 38019080.png,需要自己找哦!!

恢复多种类型文件

[iyunv@crushlinux abc]# ls

file.doc  file.pdf

[iyunv@crushlinux abc]# rm -f *

[iyunv@crushlinux abc]# ls

[iyunv@crushlinux abc]# foremost -v -t pdf,doc -i /dev/hda1 -o /tmp/recover

[iyunv@crushlinux abc]# ls

file.doc  file.pdf

[iyunv@crushlinux abc]# rm -f *

[iyunv@crushlinux abc]# ls

[iyunv@crushlinux abc]# foremost -v -t pdf,doc -i /dev/hda1 -o /tmp/recover

foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus.

foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t ] [-s ] [-k ]

[-b ] [-c ] [-o

-V  - display copyright information and exit

显示版权信息并退出

-t  - specify file type.  (-t jpeg,pdf ...)

指定的文件类型

-d  - turn on indirect block detection (for UNIX file-systems)

打开间接块检测

-i  - specify input file (default is stdin)

指定输入文件

-a  - Write all headers, perform no error detection (corrupted files)

写出所有头文件,检测是否有错误

-w  - Only write the audit file, do not write any detected files to the disk

只写审计文件,不写所有检测到的文件到磁盘

-o  - set output directory (defaults to output)

指定输出目录

-c  - set configuration file to use (defaults to foremost.conf)

设置配置文件并使用

-q  - enables quick mode. Search are performed on 512 byte boundaries.

可使用快速模式,搜索是在512字节边界进行。

-Q  - enables quiet mode. Suppress output messages.

可使用快速模式,抑制输出消息。

-v  - verbose mode. Logs all messages to screen

详细模式,记录所有消息到屏幕

切记:硬盘有价,数据无价!!

linux 误删文件夹恢复工具,恢复Linux误删除文件系列之foremost工具相关推荐

  1. linux删去分区的文件夹,如何恢复 Linux 分区下误删的文件?

    以前总是在网上看到很多人问怎么恢复 Linux 分区下误删的文件.当时并没有仔细关注过,真没想到昨天这事摊我身上了. 大致说说这场悲剧的整个过程吧(为了避免一些不必要的麻烦,本文中的文件夹名和设备名都 ...

  2. linux脚本剪切文件覆盖了怎么恢复,剪切的文件如何恢复 被剪切或删除的文件夹怎么恢复...

    剪切的文件如何恢复?有网友跟脚本之家提问说如果电脑将一些文件剪切到移动硬盘上使用了,可是移动硬盘不小心丢掉了.那么能不能在电脑上恢复被剪切掉的文件,因为文件对它很重要.所以小编就在网上查找被剪切的文件 ...

  3. 不小心删除文件夹怎么恢复,怎么恢复误删文件?

    不小心删除文件夹怎么恢复?居家办公作息不稳定,导致我最近上班的时候总是犯错,比如保存或者查看某些本周要用的文件时,一个不留神就将其删除了.这些文件数据都是经过一定时间的整理才做出来的,重新做的话很浪费 ...

  4. 误删u盘文件夹怎么恢复?

    电脑的出现给我们带来了很多意想不到的东西.不管是企业办公,还是学生的学习等都离不开它.而u盘就是我们很好的助手.我们可以随身携带存储的数据.可随时随地使用.但当我们不小心删除了u盘上的文件,或者在剪切 ...

  5. linux目录为root所有文件,linux获取文件所有目录/文件夹的例子linux操作系统 -电脑资料...

    下面我给大家整理了两种比较实用的方法,如我们可以使用dirname来获取文件路径或者使用shell命令来获取路径,希望例子对大家有帮助, 方式一:使用" dirname" 去获得( ...

  6. Linux上新建文件夹并将另一个文件夹移动进来

    场景 在Linux上新建一个文件夹,并将另一个文件夹移动到新建的文件夹内. 实现 新建文件夹: mkdif  文件夹名字 比如: mkdir a 移动文件夹b到问价夹a中: mv b a 举例:

  7. 如何在linux系统下对文件夹名有空格的文件

    在5261Windows操作系统中可以轻易地创建\移动\删除文件4102夹名带有空格的文件夹, 而在linux则需要进行一些特殊的处理才能1653实现以上功能. (1)创建文件夹 mkdir my\ ...

  8. linux挂载u盘在哪个文件夹,如何在Linux挂载U盘

    上午想玩下Linux,想把U盘上的东西拷到虚拟机下的Linux系统中,可是发现U盘插上以后根本就看不到,网上一查,知道要挂载在Linux下才能看到.经过查找资料,实践操作,在这过程中也遇到了这样或者那 ...

  9. linux怎么查找文件名带有abc的文件,如何查找一个文件夹里的最新的文件

    如何查找一个文件夹里的最新的文件以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何查找一个文件夹里的最新的文件 安装一 ...

  10. linux各个文件夹作用是什么,我的世界游戏文件夹目录作用介绍 各个文件夹都是什么用...

    我的世界游戏文件夹目录作用介绍 各个文件夹都是什么用.那下面给大家介绍的则是我的世界游戏文件夹目录索引的内容哦~那到底在我的世界文件夹中各个文件夹都有设么作用呢?那下面一一介绍一下吧! 游戏园我的世界 ...

最新文章

  1. Ellipse函数画圆
  2. Delphi处理TWebBrowser的Close事件
  3. Ubuntu18.04安装ROS Melodic(亲测有效)
  4. HTML与CSS基础之常用选择器(一)
  5. Aroma's Search(暴力)
  6. 项目经理到底要不要懂技术?
  7. Am335x lcd驱动分析
  8. OpenShift 4.6 新特性 - 用 Windows MachineConfig Operator 管理 Windows Container
  9. linux i386,i486,i586,i686和AMD_64,X86,x86_64后缀的区别
  10. java实例化类方法_Java 实例化类的的几种方法
  11. 基于SSM的订餐管理系统
  12. 【Python】列表解析式
  13. Android 6.0 屏幕旋转
  14. \t\t使用INDY的IdMappedPortTCP控件实现动态的HTTP代理服务器
  15. 无法在已有的 xxxxxxx“上还原文件 zzz。请重新发出 RESTORE 语句,用 WITH REPLACE 来覆盖原先存在的文件
  16. python文本文件和二进制文件的区别_以文本格式和二进制格式打开文件,到底有什么区别?...
  17. AI模型看看视频,就学会了玩《我的世界》:砍树、造箱子、制作石镐样样不差...
  18. 计算机的位、字节、字
  19. 关于人体血液循环的猜想
  20. fastapi python_fastapi安装及访问页面

热门文章

  1. 候选公示!高工智能汽车金球奖第二批入围年度产品/方案亮相
  2. DoDAF示例图绘制
  3. vensim逆向供应链仿真
  4. java Google图片验证码_使用google.kaptcha来生成图片验证码的实现方法
  5. 构建之法——现代软件工程
  6. Android的深度定制版阿里云os(Android的山寨)
  7. 数据系统架构-3.数据仓库设计
  8. 汉字的 unicode 编码表
  9. Json对象(数组)与Java对象(集合)的相互转换
  10. SpringAOP+自定义注解模拟shiro框架实现