Linux命令 extundelete


原文链接: Linux命令 extundelete

参阅博文《使用 Linux 文件恢复工具》http://www.ibm.com/developerworks/cn/linux/1312_caoyq_linuxrestore/
使用

inode 和 block

Linux 文件系统的最基本单元:inode。inode 译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是 inode,另一部份是 block,block 是用来存储数据用的。而 inode 呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode 为每个文件进行信息索引,所以就有了 inode 的数值。linux 操作系统下可以使用 ls –id 命令来查看文件或者目录的 inode 值,一般”root”目录的 inode 值为 2,一个分区挂载到一个目录下时,这个”root”目录的 inode 值为 2

文件恢复的原理

本文要介绍的命令是通过文件系统的 inode 值(一般是 2 )来获取文件系统信息。在 ext3 和 ext4 文件系统中,每个文件都是通过 inode 来描述其数据存放的具体位置,当文件被删除以后,inode 的数据指针部分被清零,文件目录区没有太多变化。文件的读写都是通过 inode 来实现,当 inode 数据指针被清零以后,即便文件内容还在,也没有办法把文件内容组合出来。当 ext3 和 ext4 文件系统中的元数据 metadata 发生变化时,相应的元数据 metadata 在日志文件会有一份拷贝。比如一个文件被删除了,它的 inode 信息会在日志文件中先保存一份,然后把要删除文件 inode 相关信息清零。这个日志文件是循环使用的,当操作过多时,删除的文件的 inode 日志记录会被新的数据替换,这就彻底丧失了根据 inode 找回数据的机会了。如果是大量文件的删除,这个日志文件会被反复循环利用多次,只留给最后删除的那些文件的恢复机会。

工具名称 工作界面 功能简介
foremost 命令行 formost 是一个基于文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具
extundelete 命令行 Extundelete 是 ext3、ext4 文件系统的恢复工具
scalpel 命令行 scalpel 是一种快速文件恢复工具,它通过读取文件系统的数据库来恢复文件。它是独立于文件系统的
testdisk 字符终端 Testdisk 支持分区表恢复、raid 恢复、分区恢复
phtorec 字符终端 photorec 用来恢复硬盘、光盘中丢失的视频、文档、压缩包等文件,或从数码相机存储卡中恢复丢失的图片

第一种情况

当前系统有多个用户,其中一个用户对文件进行修改,则另一个用户对文件进行删除操作,那么这时候该如何操作? 解决方法: 通过文件打开的PID及打开的文件句柄

lsof | grep -i delete
cp /proc/file_PID/fd/# /path/file_name

-i 不区分大小写搜索 #为标志1的文件

第二种情况

当前系统只有一个用户在登录,对文件进行了误删除操作,那么这个时候如何操作呢? 注意事项及解决思路:

  1. 停止对当前分区进行修改

  2. 通过dd命令进行对分区备份,防止通过第三方软件恢复失败,造成对数据的丢失

    dd if=/path/filename of /dev/sdb1

  3. 通过umount命令将当前设备分区基于卸载 umount /dev/sda或者umount /mount_poit

卸载分区(防止继续写入)
extundelete /dev/sda4 --inode 2 (查看节点深度文件)
extundelete /dev/sda4 --restore-inode 12(根据inode 恢复)
extundelete /dev/sda4 --restore-file passwd(根据文件名)
extundelete /dev/sda4 --restore-all (恢复所有文件)

恢复单个文件

sudo extundelete /dev/sda3 --restore-file /home/ubuntu/go/src/github.com/rinetd/learning/channel/ch.go /home/dg/c/sort_binary.c

extundelete-【工具下载】

除了PhotoRec之外,我们也可以选择使用extundelete来完成数据恢复工作。extundelete针对的是ext3和ext4文件系统,所以相较于TestDisk而言,extundelete的使用范围就有一定的限制了。

通常情况下,在进行文件恢复工作的时候,我们要先将文件系统重新挂载,然后给它分配只读权限。完成之后,再将恢复的文件写入另外一个文件系统中,这样可以避免原始数据所在的存储区域被覆盖。使用extundelete来恢复文件的操作步骤非常的简单,我们只需要选择相应的文件系统,然后运行下面这条命令即可:

extundelete /dev/sda1 --restore-all

apt-get install extundelete

  1. 搜索 extundelete --inode 1 /dev/dm-0
  2. 恢复 extundelete --restore-inode inode /dev/dm-0
    extundelete --restore-all /dev/dm-0
    3.文件,目录,时间 extundelete --help
`