- 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 删除文件恢复
时间: 2024-10-14 06:02:07
linux extundelete 删除文件恢复的相关文章
Linux中删除文件,磁盘空间未释放问题追踪
在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放.是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除.当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间. 我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过"lsof"命令去查看正在使用该文件的
linux rm删除文件原理
很多时候,我们都会发现,某个进程在对当前文件读写,但是我们依然能够rm, 是不是很奇怪?而windows下面,肯定会报错,"当前文件正在被使用", 这就得从linux下面删除文件的原理说起了. Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除.一般来说,每个文件都有2个link计数器:i_count 和 i_nlink. i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量
linux反向删除文件
Linux反选删除文件 最简单的方法是 # shopt -s extglob (打开extglob模式) # rm -fr !(file1) 如果是多个要排除的,可以这样: # rm -rf !(file1|file2) 原文地址:https://www.cnblogs.com/cheyunhua/p/8423321.html
手机sd卡删除文件恢复呢
手机sd卡删除文件恢复呢?我们现在有些时候会使用我们的SD卡去存储我们的数据,但是有些时候呢,我们会因为自己的不小心或者是其他方面的原因,将我们的手机SD卡上的文件给误删了. 那么我们若是误删了我们的SD卡文件,我们是不是可以恢复呢?我们又该怎么去进行我们SD卡的恢复呢?相信很多的人都会有这个疑问,下面我们就一起看看具体的SD卡删除文件如何恢复吧. 第一步:在过程刚刚开始的时候,打开我们丢失数据的电脑,然后在电脑浏览器上下载并安装"互盾数据恢复软件",之后对软件进行安装等待安装结束:
Linux下误删文件恢复
资深的Linux玩家,一般不会误删文件,就算误删文件,往往提前做过备份.如果有像我一样的菜鸟误删文件并且没有备份的话该怎么办呢?我就故作高深的讲讲. 在Linux中有许多文件修复工具,在咱51cto上有大师介绍过,我就不多说,我就把我的方法介绍一下吧!我用的是debugfs工具. 具体步骤如下: 1.删除任一文件 2.查看你删除文件所在的磁盘,我的在/dev/sda2. 3.启动debugfs(在命令行输入debugfs即可),并打开删除文件所在的分区,我的是/dev/sda2 4.查找删除文件
rm -rf 删除文件恢复
一.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 --
linux 磁盘删除文件后无法释放空间
预上线环境测试人员发现磁盘空间沾满,于是使用df -h 和 du -sh * 找到了大文件,并删除. 但并未释放空间,df -h 还是显示占用率为100%,此时du -sh * 显示占用只有7G,与df -h 查看到的内容不符. 在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接.然而如果文件是被程序占用的,则无法真正的清理磁盘空间,文件还是物理存在的. 此时使用lsof | grep deleted 查看 [[email protected] /]
linux命令の删除文件和文件夹 复制粘贴文件和文件夹
声明:此博文来自百度经验http://jingyan.baidu.com/article/642c9d34dcba80644a46f72d.html,谢谢分享! linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 删除文件夹实例:rm -rf /var/log/http
hadoop hdfs中删除文件恢复
hadoop的hdfs中删除的文件恢复原理和回收站原理是一样的,就是在删除hdfs文件时,被删除的文件存在了hdfs的.Trash文件夹中,恢复时只需要将该文件夹中文件拿出即可.具体操作如下: 1 设置trash 如果需要恢复hdfs中文件,就需要设置trash,hadoop的trash默认是关闭的.具体设置如下: <property> <name>fs.trash.interval</name> <value>10080