1. 程式人生 > >ext4分割槽中恢復被刪除的檔案

ext4分割槽中恢復被刪除的檔案




       原創文章,轉載請註明出處,謝謝!       
       作者:清林,部落格名:飛空靜渡

今天在測試我剛完成的在linux對NTFS分割槽進行備份和恢復的程式碼,執行程式備份一個200M的NTFS分割槽,然後在執行另一個程式恢復資料到這個200M的分割槽中,然後把這個分割槽載入到/tmp/sdd1中檢視,檔案恢復成功 --- 欣喜啊,做了幾個星期,終於可以舒一口氣了!

因此,想進一步測試一下,所以想把/tmp/sdd1中的內容刪除,然後再恢復一次,看是否可以恢復整個分割槽的資料!因此手快快的運行了rm *。然後發現有個目錄沒刪除,我想“不對啊!我沒拷貝目錄到這個NTFS分割槽啊”,然後看一下目錄路徑,自己的專案路徑,因為我是在這個目錄下載入/dev/sdd1 到/tmp/sdd1中的,並沒有切換目錄。這時心的都涼了!做了那麼久的專案,那麼多的程式碼檔案,說沒就沒了 :( --- 欲哭無淚啊!

由於專案還沒建svn程式碼庫,因此所有程式碼都是在我機子本地,也沒有一個備份,天!這麼辛苦到底是為什麼,而且還會影響到專案進度啊。

搞了那麼久的windows下的檔案系統的資料備份和恢復,而且還打算寫一個NTFS分割槽的檔案恢復軟體,而現在呢,居然載在linux下的檔案系統中,悲哀!

馬上上網查詢一下ext4分割槽的檔案恢復!

找到了兩個,一個是photorec,另一個是extundelete。

下面是我的檔案恢復歷程!

photorec恢復的資料非常凌亂,而且不準確,下面主要說明如何用extundelete來恢復我的資料!

下載的extundelete的原始碼(網址:http://extundelete.sourceforge.net/)

這裡強調一下,不要把程式碼下載到你要恢復的分割槽中,你要恢復檔案的分割槽不要做任何的資料讀寫操作!

因此,我把extundelete下載到/tmp目錄下,然後解壓,編譯!

在編譯之前,需要安裝兩個庫,一個是e2fsprogs,另一個是e2fslibs。

sudo apt-get install e2fsprogs e2fslibs-dev

這就是在ubuntu10.04下安裝的。

然後就是到它的原始碼目錄src下執行make進行編譯,最後生成extundelete可執行檔案。

然後我就執行

sudo ./extundelete /dev/sda9 --restore-all

這裡建議恢復所有的被刪除的檔案,下面會說明。

在程式結束後,會在程式的目錄下生成一個目錄RECOVERED_FILES

這個目錄下就是所有被刪除的檔案,然後你就可以在下面找到你的被刪除的目錄及檔案,但是我有很多檔案還是找不到,好在我要找的檔案是文字檔案,因此,我就藉助了grep命令來查詢。

cd RECOVERED_FILES

到這個目錄下,然後根據你的程式檔案裡的內容,比如說我要找我的PartNtfs類,因為這個檔案找不到,因此我這樣

grep -rHn "PartNtfs" *

根據輸出內容,我找到了這個檔案

fjb/.mozilla/firefox/omhuxrnc.default/Cache/CF72B08Ed01

用vim開啟這個檔案,果然是我需要的檔案,因此把它拷貝出來並重命名。

所以在上面說一定要恢復所有被刪除的檔案,因為extundelete有可能會把恢復的檔案改名,並放到其它目錄中。

這裡用grep來查詢還是因此有些恢復的檔案變成了隱藏檔案,並且恢復的檔案非常多,一個一個開啟測試會非常麻煩,所以用grep來查詢就快的多了。

最後,我很幸運,把整個工程的原始碼檔案成功恢復了,並重新編譯 --- 成功!

這裡如果extundelete沒完全恢復你的檔案資料,你可以再借助一下photorec和grep命令來恢復,photorec可以找回部分資料,但有些資料會比較凌亂,需要你去拼湊!photorec在testdisk中,你只需安裝testdisk就會安裝了photorec。

哎,雖然做了那麼就的資料備份和恢復的軟體,一不小心,也會載在這裡,所以奉勸各位,一定要小心自己的資料保護和備份自己重要的資料,畢竟硬碟有價,資料無價啊!