• extundelete是基于Linux的一个数据恢复工具,它通过分析文件系统的日志,解析出所有文件的inode信息,从而可以恢复Linux下主流的ext3,ext4文件系统下被误删除的文件。
  • [问题案例]最近看到群里提到如何恢复LINUX下ext4误删的文件,之前听说过ext3分区恢复工具ext3grep,但是恢复ext4一直没有概念,而且目前线上的系统分区格式都是ext4,SO网上找到了一款叫extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复,对我们运维攻城狮算是一款神器级别的软件,这里整理了如下文档,供大家参考。
  • 在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel。

    这里用:yum install e2fsprogs e2fsprogs-libs e2fsprogs-devel 来完成安装。

    注意事项

    • 恢复文件的时候一定要卸载磁盘分区
  • 虚拟机:        vmware workstation 9.0.2

    操作系统:      CentOS6.3 x64

    extundelete:   extundelete-0.2.4

    一.试验环境

    1.首先关闭SELINUX

    # setenforce 0

    # vi /etc/sysconfig/selinux

    ---------------

    SELINUX=disabled

    ---------------

    2.在虚拟机上创建一个2G的磁盘

    3.进入系统,创建一个2G的主分区

    # fdisk /dev/sdb

    ---------------------

    n+p+1+回车+回车+w

    ---------------------

    4.使分区无需重启就能生效

    # partx -a /dev/sdb

    5.格式化为ext4分区并挂载

    # mkfs.ext4 /dev/sdb1

    # mkdir /data

    # mount /dev/sdb1 /data

    注: 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。

    建议加装一块硬盘将extundelete安装到此硬盘,再做以下操作。

    二.extundelete安装

    1.安装依赖包

    # yum install e2fsprogs* -y

    2.下载并安装extundelete

    # wget http://nchc.dl.sourceforge.NET/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

    # tar -jxvf extundelete-0.2.4.tar.bz2

    # cd extundelete-0.2.4

    # ./configure --prefix=/usr/local/extundelete

    # make && make install

    3.验证是否安装成功

    # cd /usr/local/extundelete/bin

    # ./extundelete -v

    ---------------------

    extundelete version 0.2.4

    libext2fs version 1.41.12

    Processor is little endian.

    ---------------------

    4.设置环境变量

    # echo "PATH=/usr/local/extundelete/bin:$PATH" >> /etc/profile

    # echo "export PATH" >> /etc/profile

    # source /etc/profile

    5.上传一些图片,安装包等文件到/data目录

    # cd /data

    # yum install lrzsz -y

    # rz

    -------------

    本地文件.....

    -------------

    # ls

    ------------------

    lost+found  MySQL-5.6.10.tar.gz  nginx.conf  pic.jpg

    ------------------

    6.全部删除

    # rm -rf *

    7.查看被删除文件

    1).查看前需卸载该磁盘分区

    # cd ~

    # umount /dev/sdb1

    2).查看文件

    注:一般一个分区挂载到一个目录下时,这个”根”目录的inode值为2

    我们为了查看根目录所有文件,所以查看分区inode为2的这个部分

    # extundelete /dev/sdb1 --inode 2

    --------------------------------

    .....

    File name                                       | Inode number | Deleted status

    .                                                 2

    ..                                                2

    lost+found                                        11             Deleted

    mysql-5.6.10.tar.gz                               12             Deleted

    nginx.conf                                        13             Deleted

    pic.jpg                                           14             Deleted

    --------------------------------

    注:标记为”Deleted”的文件则是被删除的文件

    8.恢复指定的文件

    注: 默认被删文件会恢复到当前目录下的RECOVERED_FILES目录中去

    # extundelete --restore-file pic.jpg /dev/sdb1

    # cd RECOVERED_FILES/

    # ll

    ----------------

    -rw-r--r-- 1 root root 52592 8月  13 07:18 pic.jpg

    ----------------

    9.完全恢复设备上文件

    # extundelete --restore-all /dev/sdb1

    # ll

    -----------------------------------

    总用量 34464

    -rw-r--r-- 1 root root 35174149 8月  13 07:24 mysql-5.6.10.tar.gz

    -rw-r--r-- 1 root root     4551 8月  13 07:24 nginx.conf

    -rw-r--r-- 1 root root    52592 8月  13 07:18 pic.jpg

    -rw-r--r-- 1 root root    52592 8月  13 07:24 pic.jpg.v1

    -----------------------------------

    注:这里完全恢复并不会把之前恢复的pic.jpg文件覆盖掉,而是重命名为pic.jpg.v1

    10.恢复指定的时间点后被删文件

    1).指定一个时间点

    # date -d "Sep 4 03:09:13 2013" +%s

    ------------------

    1378235353

    ------------------

    2).恢复这个时间点后的文件

    # extundelete --restore-all --after “1378235353” /dev/sdb1

    --------------------

    ..........

    --------------------

    注:如果要恢之前的就用before参数。extundelete命令与after结合使用,在进行恢复时非常有用,可以过滤掉那太旧的文件,减小恢复压力。

    11.检验是否恢复成功

    # md5sum RECOVERED_FILES/mysql-5.6.10.tar.gz

    ------------------------------------

    9dcee911fb4bc7e977a6b63f4d3ffa63  RECOVERED_FILES/mysql-5.6.10.tar.gz

    ------------------------------------

    上传刚才误删的mysql安装包

    # rz

    ...

    # md5sum mysql-5.6.10.tar.gz

    ---------------------------------

    9dcee911fb4bc7e977a6b63f4d3ffa63  mysql-5.6.10.tar.gz

    ---------------------------------

    MD5值相同,恢复成功。。。

    -----------大功告成-------------

    extundelete反删除总结

    一、介绍extundelete

    1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复。

    2. 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。

    3. extundelete还是有很大的不完整性,基于整个磁盘的恢复功能较为强大,基于目录和文件的恢复还不够强大。

    4. extundelete执行完毕后在当前目录生产一个RECOVERED_FILES目录,里面即是恢复出来的文件,还包括文件夹。

    5.任何的文件恢复工具,在使用前,均要将要恢复的分区卸载或挂载为只读,防止数据被覆盖使用。

    umount /dev/partition

    mount -o remount,ro /dev/partition

    6.保持良好的习惯,绝对比恢复数据要更简单。

    二、安装

    0.yum install e2fsprogs* e2fslibs* -y

    1.wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

    2.tar -axf extundelete-0.2.4.tar.bz2 -C /usr/local/src

    3.cd /usr/local/src/extundelete-0.2.4

    4../configure --prefix=/usr/local/extundelete

    5.make

    6.make install

    7.ln -s /usr/local/extundelete/bin/* /usr/local/bin/

    三、使用及命令

    1. umount或者read only 分区

    umount /dev/partition

    mount -o remount,ro /dev/partition

    2.切换到存储恢复文件的目录

    cd $dir

    3.命令

    Usage: extundelete [options] [--] device-file

    Options:

    --superblock           打印指定分区的超级块信息。如不加任何的参数,

    此选项是默认的.

    extundelete --superblock /dev/sda3 <---> extundelete /dev/sda1

    --journal              显示块的日志信息,同--superblock。

    extundelete --journal /dev/sda1

    --after dtime          只恢复指定时间【dtime】(时间戳)之后,被删除的数据

    假如删除的时间大概是2011-7-26 14:30

    date -d "Jul 26 14:30" +%s

    得出秒数 1234567890

    恢复此时间后删除的所有文件

    extundelete /dev/sdb1 --after 1234567890 --restore-all

    --before dtime         只恢复指定时间【dtime】(时间戳)之前,被删除的数据

    Actions:

    --inode ino                显示某分区inode为x的信息,一般是查看该分区下所有的文件.

    extundelete --inode 2 /dev/sda1

    --block blk              显示某分区block为x的信息.

    --restore-inode ino[,ino,...] 恢复一个或多个指定inode号的文件,该恢复的文件,

    保存在当前目录下的RECOVERED_FILES里,文件名为【file.$inode】

    extundelete /dev/sda1 --restore-inode 13,14

    --restore-file 'filename'        恢复指定的文件(被删除的),文件位于当前目录下

    的RECOVERED_FILES/$filename,文件名还是原来的

    extundelete /dev/sda1 --restore-file initramfs-2.6.32-358.el6.x86_64.img

    --restore-files 'read_filename'  恢复指定的文件(真实存在的)中的内容,

    文件位于当前目录下的RECOVERED_FILES/$filename,文件名还是原来的

    vi test_restore.txt(结尾不可有多余的空格)

    System.map-2.6.32-358.el6.x86_64

    config-2.6.32-358.el6.x86_64

    symvers-2.6.32-358.el6.x86_64.gz

    vmlinuz-2.6.32-358.el6.x86_64

    initramfs-2.6.32-358.el6.x86_64.img

    extundelete /dev/sda1  --restore-files test_restore.txt

    --restore-directory 'dir-name'      恢复指定的目录,文件位于当前目录下的

    RECOVERED_FILES/$dir-name,文件名还是原来的

    extundelete /dev/sda1  --restore-files grub

    --restore-all                          恢复某分区里所有被删除的数据,文件名还是原来的

    extundelete /dev/sda1   --restore-all

    4.例

    ①--superblock

    ②--journal

    ③--after dtime

    假如删除的时间大概是2011-7-26 14:30

    date -d "Jul 26 14:30" +%s

    得出秒数 1234567890

    恢复此时间后删除的所有文件

    /usr/local/bin/extundelete /dev/sdb1 --after 1234567890 --restore-all

    ④--before dtime

    ⑤--inode

    ⑥--restore-inode ino[,ino,...]

    ⑦--restore-file 'filename'

    ⑧--restore-files 'read_filename'

    ⑨--restore-directory 'dir-name'

    ⑩--restore-all

    恢复单个目录:

    extundelete  /dev/sdb1 --restore-directory  /MongoDB

    恢复所有误删文件:

    extundelete  /dev/sdb1 --restore-all

    extundelete还可以实现恢复某个时间段的数据。可以通过“--after”和“--before”参数实现!

    【原理】extundelete恢复数据的过程:

    在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还储存在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以!以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。

linux extundelete 删除文件恢复的更多相关文章

  1. Linux递归删除文件命令

    Linux递归删除文件命令 find . -name "*.log.*" -exec ls {} \; find . -name "*.log.*" -exec ...

  2. linux反向删除文件

    Linux反选删除文件 最简单的方法是 # shopt -s extglob      (打开extglob模式) # rm -fr !(file1)  如果是多个要排除的,可以这样: # rm -r ...

  3. linux中删除文件内空白行的几种方法。

    linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...

  4. Linux下删除文件的原理

    Linux下文件删除的原理 Lniux下控制文件真正被删除的计数器 Linux是link的数量来控制文件删除的.只有当一个文件不存在任何link的时候,这个文件才会被删除.一般来讲,每个文件都有两个l ...

  5. Linux命令 - 删除文件(夹)

    1.删除文件夹 rm –rf /var/test 将会删除/var/test目录以及其下的所有文件.文件夹 2.删除文件 rm -f /var/test/test.txt 将会强制删除/var/tes ...

  6. Linux提示删除文件cannot remove `文件名': Operation not permitted

    Linux系统下删除某个文件时提示如下报错: 执行lsattr命令可以看到隐藏属性-------i--------,如下图: 通过查找资料发现: chattr命令用于改变文件属性.这项指令可改变存放在 ...

  7. 在Linux下删除文件及文件夹(rm)

    删除目录.文件 rm(remove) 功能说明:删除文件或目录.语 法:rm [-dfirv][--help][--version][文件或目录...]补充说明:执行rm指令可删除文件或目录,如欲删除 ...

  8. linux命令の删除文件和文件夹 复制粘贴文件和文件夹

    声明:此博文来自百度经验http://jingyan.baidu.com/article/642c9d34dcba80644a46f72d.html,谢谢分享! linux删除目录很简单,很多人还是习 ...

  9. Linux rm删除文件未释放空间问题分析

    问题描述: 在自己的虚拟机上做实验时出现空间不足情况,检查发现之前的kafka集群测试日志在几天写了 25G,于是进入 /data/kafka01/logs 目录执行 “rm -rf *” 删除所有测 ...

随机推荐

  1. Android6.0执行时权限解析,RxPermissions的使用,自己封装一套权限框架

    Android6.0执行时权限解析,RxPermissions的使用.自己封装一套权限框架 在Android6.0中,新添加了一个执行时的权限,我相信非常多人都已经知道了.预计也知道怎么用了,这篇博客 ...

  2. [Node.js] Level 3 new. Steam

    File Read Stream Lets use the fs module to read a file and log its contents to the console. Use the  ...

  3. Drupal 通过API动态的加入样式文件

    前面几篇文章中讲到关于样式的载入方式.已经了解到能够通过 theme.info 载入样式文件,但都须要更新缓存才干够使用.因些这样子没有办法动态的载入一些样式文件,在DP中提供了两个API操作样式文件 ...

  4. 压缩 MongoDB 的数据文件

    MongoDB采用了磁盘空间预分配的机制,为了避免磁盘碎片以及使用mmap后造成的近一步的内存碎片,但是随着数据的增删除改操作,数据文件不可避免的会产生空洞,造成磁盘空间和内存的浪费.本文说的是这方面 ...

  5. 破解无线网络密码-BT3如何使用2

    本教程只作学习和交流使用,任何其它商用与本人无关, 在开始教程之前, 首先需要用到几个软件,感兴趣的朋友看完贴子后可以去百度搜一下下载地址, 虚拟机: VMware Workstation 6.5 正 ...

  6. 《Java程序设计》第16周周四:GUI编程及文件对话框的使用

    第一部分:实验项目  项目一:文件及选择 目的:了解文件对话框的用法,熟悉GUI中事件驱动的核心步骤. 1. 阅读博文 "JFileChooser (Java Swing提供的文件选择对话框 ...

  7. 检查许可证所需的adobe application manager 丢失或损坏

    安装Adobe公司的一般都需要账号,记得以前安装Flex也是,这里提供一个公用账号: 帐号:992829179@qq.com 密码:521521 在安装Acrobat_Ⅺ_Pro_11.0.03后,弹 ...

  8. PHP 表单 - 4(验证邮件和URL)

    PHP 表单 - 验证邮件和URL 本章节我们将介绍如何验证 names(名称), e-mails(邮件), 和 URLs. PHP - 验证名称 以下代码将通过简单的方式来检测 name 字段是否包 ...

  9. easyui问题小结

    http://blog.sina.com.cn/s/blog_77cb836301017lrd.html

  10. CentOS 下安装MySQL 默认源为5.1版本

    CentOS——默认为安装5.1版本,如果需要安装5.5版本,需要使用remi源 yum install mysql-server –enablerepo=remi   Ubuntu——默认为安装5. ...