用ext3grep恢復刪除的文件

 一個同事不小心使用rm -rf命令誤刪了自己的代碼,這意味着一個月的工作丟失了(一個月沒有備份過代碼,看來他以前一定沒經歷計算機崩潰的災難)。我們知道rm命令無法撤銷,那麼有沒有辦法恢復這個被刪除的目錄以及其中的全部文件呢?

在網上搜索了一下,找到一個名爲ext3grep的工具。在這個工具出現以前,恢復ext3文件系統中被刪除的數據是不可能的。因爲ext3文件系統不同於ext2文件系統,它在刪除一個文件後,會把文件inode結點中扇區指針清爲0,而這讓文件恢復看起來不太可能。不過,正如ext3grep工具作者所說的,因爲ext3是一個日誌型的文件系統,通過分析日誌信息,有很大的可能重新解析出塊指針,從而恢復出目錄和文件。

以下是恢復文件所採用的步驟,希望對大家有幫助。

[ 卸載被誤刪除文件所在的分區,或以只讀方式mount ]

當你發現你誤刪除了文件後,要做的第一件事是馬上卸載被誤刪除文件所在的分區,或者以只讀的方式來掛載該分區。原因大家都很清楚,文件被刪除後,文件中的數據還存在磁盤上,除非存放這些數據的數據塊又被操作系統分配出去了。我們這一步就是儘量降低數據塊中數據被覆蓋的風險,以提高恢復數據成功的比率。

如果被誤刪的文件在根分區,那麼你最好重啓計算機,進入單用戶模式,以只讀的方式掛載根分區,然後再進行恢復。要進行單用戶模式。

進入單用戶模式後,根分區還是以讀寫方式mount的,用下面的命令,把掛載方式由讀寫(rw)改爲只讀(ro)

mount -o ro,remount /

如果被刪除的文件不是根分區,也可以用unmount的方式將該分區卸載。假設文件在分區/dev/sda3中,該分區掛載到/home,那麼我們用下面的命令來卸載:

    umount /dev/sda3

或者命令:

    umount /home

當然,在卸載前要保證沒有程序在訪問該分區,否則卸載會失敗。所以,Easwy一般推薦進入單用戶模式來恢復文件。

[ 安裝ext3grep工具 ]

恢復的第一步當然是安裝ext3grep工具。對於Debian/Ubuntu用戶來說,安裝ext3grep工具非常簡單,只需要執行下面的命令:

aptitude install ext3grep

不過很多公司使用的Linux版本是Centos,所以需要自己手工編譯ext3grep工具,其實這也很簡單,首先到ext3grep主頁上下載它的源代碼,然後用下面的命令解壓/編譯/安裝這個工具。

 

tar zxf ext3grep-0.10.1.tar.gz

cd /home/easwy/ext3grep-0.10.1

./configure

make

make install

注:在網上搜了一下,ext3grep也有rpm包可以下載,比如,RHEL/CentOSRPM包可以在這裏下載。其它Linux發行版的RPM也可以在rpmfind.net上找到。

前面說過,發現誤刪除後,要卸載掉該分區,或者進入單用戶模式。所以最好在另外一臺計算機上來編譯或安裝這個工具,然後把ext3grep這個可執行文件拷貝到U盤中再進行恢復。因爲同事的文件恰好在根分區中。如果你也是這種情況,那麼在用RPM包安裝時,則需要把RPM包安裝到你指定的目錄中,然後再把它拷貝到U盤中。

U盤裏只需要拷貝ext3grep一個文件即可,它不需要動態加載庫就可以執行。接下來把U盤插到待恢復的電腦上,用下面的命令加載:

mount -t vfat /dev/sdb1 /mnt

把上面的設備號和安裝點換成你自己的。如果你的設備文件還不存在的話,用mknod命令創建一下吧。

現在,我們可以開始文件恢復了。

[ 恢復文件 ]

在開始恢復前,選擇一個目錄來存放被恢復的文件。ext3grep程序會在當前目錄下創建一個名爲RESTORED_FILES的目錄來存放被恢復的文件。因此在運行ext3grep命令前,先要切換到一個你可讀寫的目錄中。

因爲進入了單用戶模式,並且將根分區設成了只讀,那麼只能把恢復出來的文件放在U盤中了。因此,先cd /mnt進入U盤目錄。

如果你有幸記得你誤刪除的文件名及其路徑的話,就可以直接用下面的命令進行恢復了:

    ext3grep /dev/your-device --restore-file path/to/your/file/filename

需要注意的是,上面的文件路徑,是在該分區上文件路徑。假設我們要恢復/dev/sda3分區上文件,這個分區原來的安裝點是/home,現在想恢復文件/home/xxx/vi/tips.xml,那麼輸入的命令應該是:

    ext3grep /dev/sda3 --restore-file xxx/vi/tips.xml

如果你忘記了文件名,或者你誤刪除的是一個目錄而你無法記全該目錄中的文件,你可以先用下面的命令查詢一下文件名:

ext3grep /dev/sda3 --dump-names | tee filename.txt

上面的命令把ext3grep命令的輸出記錄到文件filename.txt中,你可以慢慢查看,或者使用grep命令過濾出你需要的信息。

當你知道了目錄/文件的信息後,就可以用上面說的命令進行恢復了。

ext3grep命令中有一個–depth參數,應該是用來恢復目錄以及其中的所有子目錄和文件的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章