簡介:
Extundelete 數據恢復
救命的稻草!當你在運維過程中不小心誤刪除數據時,就會用到數據恢復工具,( 都是淚,不多說了 )。
常見的開源數據恢復工具有,debugfs、R-Linux、ext3grep、extundelete 等。
ext3grep 跟 extundelete 比較常用,其中 ext3grep 只支持 ext3 文件系統,extundelete 支持 ext3/ext4。
都是通過分析文件系統日志,解析出所有文件的 inode 信息,利用 inode 去查找所在 block ,利用 dd 備份出以刪除的數據。
當數據被刪除後,立即以只讀的方式重新掛載分區... 記住是立即 !!!
下載地址:
http://jaist.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
今天一不小心,刪除了一個放源碼包的目錄...
1、安裝 Extundelete
shell > yum -y install e2fsprogs-devel
## 先安裝這兩依賴包,不然會報錯:configure: error: Can't find ext2fs library
shell > tar jxf extundelete-0.2.4.tar.bz2 shell > cd extundelete-0.2.4 [root@study extundelete-0.2.4]# ./configure ; make ; make install
## 簡單介紹一下常用參數
--after dtime 時間參數,表示在某段時間之後被刪除的文件或目錄
--before dtime 時間參數,表示在某段時間之前被刪除的文件或目錄
## 簡單介紹一下常用動作
--inode ino 顯示節點 ino 的信息
--block blk 顯示數據塊 blk 的信息
--restore-inode ino 表示恢復節點 ino 的文件,用來恢復單個文件
--restore-file path 表示恢復指定路徑下的文件,用來恢復目錄下所有文件
--restore-all 表示恢復所有被刪除的目錄跟文件
2、查找被刪除的文件
shell > ls -id /usr/local/src 130619 /usr/local/src
## 首先查看被刪除的上層目錄 inode
shell > extundelete /dev/mapper/vg_study-LogVol00 --inode 130619 ... File name | Inode number | Deleted status . 130619 .. 130587 package 137256 Deleted apr-1.5.1 140038 apr-util-1.5.4 535002 httpd-2.4.10 535320 pcre-8.30 656184 siege-3.0.8 656483 libmcrypt-2.5.8 144383 package.xml 146709 mysql-5.6.4-m7 140588 memcache-2.2.7 146712 php-5.4.13 667097 redis-2.2.5 269016 memcached-1.4.15 146806 libevent-master 539531 Deleted
## 可以看到被刪除的目錄 package 狀態為 Deleted ,inode 為 137256
shell > extundelete /dev/mapper/vg_study-LogVol00 --inode 137256 ... File name | Inode number | Deleted status . 137256 .. 130573 e2p.h;54b8ac2f 137260 Deleted e2p.h 137260 mysql-5.6.4-m7.tar.gz 140630 Deleted httpd-2.4.10.tar.gz 140035 Deleted pcre-8.30.tar.gz 140036 Deleted siege-3.0.8.tar.gz 140037 Deleted libmcrypt-2.5.8.tar.bz2 144382 Deleted php-5.4.13.tar.bz2 144439 Deleted memcache-2.2.7.tgz 144381 Deleted redis-2.2.5.tgz 146713 Deleted libevent-master 539531 Deleted memcached-1.4.15.tar.gz 144377 Deleted libevent-master.zip 146863 Deleted
## 可以看到被刪除的目錄底下有哪些被刪除的文件及 inode 號
3、恢復數據
shell > extundelete /dev/mapper/vg_study-LogVol00 --restore-directory /usr/local/src/package
## 指定刪除目錄所在分區,--restore-directory 為恢復整個目錄,後面是要恢復的目錄
NOTICE: Extended attributes are not restored. WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set. The partition should be unmounted to undelete any files without further data loss. If the partition is not currently mounted, this message indicates it was improperly unmounted, and you should run fsck before continuing. If you decide to continue, extundelete may overwrite some of the deleted files and make recovering those files impossible. You should unmount the file system and check it with fsck before using extundelete. Would you like to continue? (y/n) y Loading filesystem metadata ... 151 groups loaded. Loading journal descriptors ... 22517 descriptors loaded. Searching for recoverable inodes in directory /usr/local/src/package ... 1679 recoverable inodes found. Looking through the directory structure for deleted files ... Block 578312 is allocated. Unable to restore inode 146713 (usr/local/src/package/redis-2.2.5.tgz): Space has been reallocated. Unable to restore inode 539531 (usr/local/src/package/libevent-master): Space has been reallocated. 1670 recoverable inodes still lost.
## 其中,redis-2.2.4.tgz 和 libevent-master 沒有被恢復,因為 inode 被重新分配出去了...
shell > cd RECOVERED_FILES/usr/local/src/package
## 恢復完成後會在當前目錄下生成一個 RECOVERED_FILES 目錄
shell > ls e2p.h;54b8ac2f libmcrypt-2.5.8.tar.bz2 memcached-1.4.15.tar.gz php-5.4.13.tar.bz2 libevent-master.zip memcache-2.2.7.tgz mysql-5.6.4-m7.tar.gz
## 只恢復了 7 個文件,刪除的有 12 個... 使用 find 查一下沒有恢復的文件的 inode 號
shell > find / -inum 140035 /usr/lib64/libe2p.so shell > find / -inum 140036 /usr/lib64/libext2fs.a shell > find / -inum 140037 /usr/lib64/libext2fs.so
## 發現 httpd 、pcre 、siege 的都被分配出去了...,現在恢復不出來的就永遠沒有了..
## 所以,千萬記住:萬一誤刪除數據了,一定要第一時間將數據所在磁盤卸載或掛載為只讀分區,防止寫入文件 inode 被重新分配。
## 如果誤刪的是根分區的數據,那麼立即進去單用戶模式,將根分區只讀掛載。
## 又引申出一個問題,做系統分區的時候,最好不要只分一個根分區,像這樣的情況很難辦...
## 第二,數據恢復軟件事先裝好吧..
## 第三,刪除數據時,先將要刪除的數據移動到 /tmp(單獨分區),然後刪除或腳本定期刪除
## 第四,做好數據備份。
## 最後,敲慢點 !!!
http://xxxxxx/Linuxjc/1138595.html TechArticle