由於剛纔不當心用rm刪了 /etc 目錄,就在網上找到了這篇文章,不過由於個人虛擬機都啓動不了了,因此我就直接重裝了,但但願對其餘人有幫助 node
一個同事不當心使用rm -rf命令誤刪了本身的代碼,這意味着一個月的工做丟失了(一個月沒有備份過代碼,看來他之前必定沒經歷計算機崩潰的災難)。咱們知道rm命令沒法撤銷,那麼有沒有辦法恢復這個被刪除的目錄以及其中的所有文件呢?linux
在網上搜索了一下,找到一個名爲ext3grep的工具。在這個工具出現之前,恢復ext3文件系統中被刪除的數據是不可能的。由於ext3文件系統不一樣於ext2文件系統,它在刪除一個文件後,會把文件inode結點中扇區指針清爲0,而這讓文件恢復看起來不太可能。不過,正如ext3grep工具做者所說的,由於ext3是一個日誌型的文件系統,經過分析日誌信息,有很大的可能從新解析出塊指針,從而恢復出目錄和文件。工具
如下是恢復文件所採用的步驟,但願對你們有幫助。google
[ 卸載被誤刪除文件所在的分區,或以只讀方式mount ]spa
當你發現你誤刪除了文件後,要作的第一件事是立刻卸載被誤刪除文件所在的分區,或者以只讀的方式來掛載該分區。緣由你們都很清楚,文件被刪除後,文件中的數據還存在磁盤上,除非存放這些數據的數據塊又被操做系統分配出去了。咱們這一步就是儘可能下降數據塊中數據被覆蓋的風險,以提升恢復數據成功的比率。操作系統
若是被誤刪的文件在根分區,那麼你最好重啓計算機,進入單用戶模式,以只讀的方式掛載根分區,而後再進行恢復。要進行單用戶模式。.net
進入單用戶模式後,根分區仍是以讀寫方式mount的,用下面的命令,把掛載方式由讀寫(rw)改成只讀(ro):指針
mount -o ro,remount /rest
若是被刪除的文件不是根分區,也能夠用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/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/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參數,應該是用來恢復目錄以及其中的全部子目錄和文件的。