虛擬機器: 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節點中的扇區指標清零,實際檔案還儲存在磁碟上,如果磁碟繼續以讀寫入模式掛載,這些已刪除的檔案的資料區塊就可能被作業系統重新分配出去,在這些資料庫被新的資料覆蓋後,這些資料就真的丟失了,恢複工具也無力回天。所以!以唯讀模式掛載磁碟可以盡量降低資料庫中資料被覆蓋的風險,以提高恢複資料成功的比例。