歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> Extundelete 數據恢復,extundelete

Extundelete 數據恢復,extundelete

日期:2017/3/6 9:34:25   编辑:學習Linux

Extundelete 數據恢復,extundelete


Extundelete 數據恢復,extundelete


簡介:

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

Copyright © Linux教程網 All Rights Reserved