Linux ext3文件系統 rm恢復

一個同事不小心使用rm -rf命令誤刪了自己的代碼,這意味着一個月的工作丟失了(一個月沒有備份過代碼,看來他以前一定沒經歷計算機崩潰的災難)。我們知道rm命令無法撤銷,那麼有沒有辦法恢復這個被刪除的目錄以及其中的全部文件呢?
在網上搜索了一下,找到一個名爲ext3grep的工具,以及它的作者的一篇文章(見參考文檔)。在這個工具出現以前,恢復ext3文件系統中被刪除的數據是不可能的。因爲ext3文件系統不同於ext2文件系統,它在刪除一個文件後,會把文件inode結點中扇區指針清爲0,而這讓文件恢復看起來不太可能。不過,正如ext3grep工具作者所說的,因爲ext3是一個日誌型的文件系統,通過分析日誌信息,有很大的可能重新解析出塊指針,從而恢復出目錄和文件。
以下是Easwy恢復文件所採用的步驟,希望對大家有幫助。
[ 卸載被誤刪除文件所在的分區,或以只讀方式mount ]
當你發現你誤刪除了文件後,要做的第一件事是馬上卸載被誤刪除文件所在的分區,或者以只讀的方式來掛載該分區。原因大家都很清楚,文件被刪除後,文件中的數據還存在磁盤上,除非存放這些數據的數據塊又被操作系統分配出去了。我們這一步就是儘量降低數據塊中數據被覆蓋的風險,以提高恢復數據成功的比率。
如果被誤刪的文件在根分區,那麼你最好重啓計算機,進入單用戶模式,以只讀的方式掛載根分區,然後再進行恢復。要進行單用戶模式,請看Grub中進入單用戶模式的方法。
進入單用戶模式後,根分區還是以讀寫方式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 不過Easwy公司所使用的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/CentOS的RPM包可以在這裏下載。其它Linux發行版的RPM也可以在rpmfind.net上找到。
Easwy前面說過,發現誤刪除後,要卸載掉該分區,或者進入單用戶模式。所以最好在另外一臺計算機上來編譯或安裝這個工具,然後把ext3grep這個可執行文件拷貝到U盤中再進行恢復。這也正是Easwy所用的方法,因爲同事的文件恰好在根分區中。如果你也是這種情況,那麼在用RPM包安裝時,則需要把RPM包安裝到你你指定的目錄中,然後再把它拷貝到U盤中。
U盤裏只需要拷貝ext3grep一個文件即可,它不需要動態加載庫就可以執行。接下來把U盤插到待恢復的電腦上,用下面的命令加載:
mount -t vfat /dev/sdb1 /mnt 把上面的設備號和安裝點換成你自己的。如果你的設備文件還不存在的話(這也剛好是Easwy的情況),用mknod命令創建一下吧。
現在,我們可以開始文件恢復了。
[ 恢復文件 ]
在開始恢復前,選擇一個目錄來存放被恢復的文件。ext3grep程序會在當前目錄下創建一個名爲RESTORED_FILES的目錄來存放被恢復的文件。因此在運行ext3grep命令前,先要切換到一個你可讀寫的目錄中。
對Easwy來講,因爲進入了單用戶模式,並且將根分區設成了只讀,那麼只能把恢復出來的文件放在U盤中了。因此,先cd /mnt進入U盤目錄。
如果你有幸記得你誤刪除的文件名及其路徑的話,就可以直接用下面的命令進行恢復了:
    ext3grep /dev/your-device --restore-file path/to/your/file/filename 需要注意的是,上面的文件路徑,是在該分區上文件路徑。假設我們要恢復/dev/sda3分區上文件,這個分區原來的安裝點是/home,現在想恢復文件/home/easwy/vi/tips.xml,那麼輸入的命令應該是:
    ext3grep /dev/sda3 --restore-file easwy/vi/tips.xml 如果你忘記了文件名,或者你誤刪除的是一個目錄而你無法記全該目錄中的文件,你可以先用下面的命令查詢一下文件名:
ext3grep /dev/sda3 --dump-names | tee filename.txt上面的命令把ext3grep命令的輸出記錄到文件filename.txt中,你可以慢慢查看,或者使用grep命令過濾出你需要的信息。
當你知道了目錄/文件的信息後,就可以用上面說的命令進行恢復了。
在ext3grep命令中有一個–depth參數,應該是用來恢復目錄以及其中的所有子目錄和文件的,不過Easwy用這個參數無法恢復出任何文件,只好採用笨辦法,寫了個腳本,一個個文件的恢復。
經過幾個小時的折磨(中間走了一些彎路),同事的文件終於恢復成功了!
請閱讀Easwy的博客上的其它文章獲取更多信息。
 
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/raining_peidx/archive/2009/12/10/4980526.aspx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章