歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下使用ext3grep恢復目錄及文件指南(ext3文件系統)

Linux下使用ext3grep恢復目錄及文件指南(ext3文件系統)

日期:2017/2/28 16:13:04   编辑:Linux教程

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

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

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

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

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

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

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

mount -o ro,remount / 

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

    umount /dev/sda3 

或者命令:

    umount /home 

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

[ 安裝ext3grep工具 ]

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

aptitude install ext3grep 

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

tar zxf ext3grep-0.10.1.tar.gz
cd /home//ext3grep-0.10.1
./configure
make
make install 

注:在網上搜了一下,ext3grep也有rpm包可以下載,比如,RHEL/CentOS的RPM包可以在這裡下載。其它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//vi/tips.xml,那麼輸入的命令應該是:

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

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

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

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

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

在ext3grep命令中有一個–depth參數,應該是用來恢復目錄以及其中的所有子目錄和文件的,不過用這個參數無法恢復出任何文件,只好采用笨辦法,寫了個腳本,一個個文件的恢復。

經過幾個小時的折磨(中間走了一些彎路),同事的文件終於恢復成功了!

[ 參考文檔 ]

  • HOWTO recover deleted files on an ext3 file system
Copyright © Linux教程網 All Rights Reserved