最近看到群裡提到如何恢復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值相同,恢復成功。。。
-----------大功告成-------------