最近看到群里提到如何恢复LINUX下ext4误删的文件,之前听说过ext3分区恢复工具ext3grep,但是恢复ext4一直没有概念,而且目前线上的系统分区格式都是ext4,SO网上找到了一款叫extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复,对我们运维攻城狮算是一款神器级别的软件,这里整理了如下文档,供大家参考。
虚拟机: 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值相同,恢复成功。。。
-----------大功告成-------------
本文出自 “一路向北” 博客,请务必保留此出处http://showerlee.blog.51cto.com/2047005/1288591 (责任编辑:IT) |