1. 程式人生 > >linux系統:rm-rf執行以後,怎麼辦?我來教你恢復檔案。

linux系統:rm-rf執行以後,怎麼辦?我來教你恢復檔案。

大家好我是歷史,身為liunx系統管理員,rm命令是不是經常在用呢?有沒有做過rm命令以後,瞬間感覺無語的時候!

讓大家看看我的血的教訓!                  
     


果真感覺蛋疼了,欲哭無淚啊!寫了一天的成果,想著把之前備份的檔案刪除呢,結果把剛寫完的刪了。

國外著名linx管理員守則中有這麼一條:“慎用rm -rf命令,除非你知道此命令將帶來什麼後果。” 可見這個命令的重要性啊,書中看到的這句話,確實很對。
說了這麼多,教教大家執行了rm命令後 該這麼辦吧,是有辦法回覆的,我剛經過試驗證實了,google有一個開源的包 叫ext3grep工具他可以回覆刪除的檔案,甚至是drop database xcy; 對,就是誤刪除的資料庫都可以回覆。


   先說一下他的工作原理吧,然後我在把試驗分享給大家, 工作原理其實也不難,這個工具需要在ext3或者ext4 的檔案系統上才可以實現,因為ext3檔案系統是日誌型檔案系統,ext3檔案系統儲存資訊的時候是由inode號和block塊儲存的。
神馬? 不知道什麼是inode號?和block塊? 好吧,在說明白點,比如:一個分割槽比如一本書,那麼block塊就是書每頁的內容,而inode號 就是書的目錄,系統找檔案的時候先找inode號 然後根據inode號去找硬碟上的block快資訊,明白了吧! 

     
  在說一下刪除的原理吧。 當硬碟上的一個檔案刪除,其實沒有真正想象中的那樣在硬碟上清除掉的,他是把inode號和block塊的那個鏈子 斷開,但是真正的資料還是在硬碟上的,有沒有感覺在windos上刪除是那麼快,沒考慮到這吧,當你在刪除檔案的地方重新複製了新檔案,那時候才會把之前的檔案覆蓋掉,也就是說刪除了沒有關係,千萬不要往那個位置放檔案了。

原理說完了,開始實戰。

環境介紹: 系統版本:CentOS release 5.4 (Final)

1 安裝之前先檢查有沒有這個包: rpm -qa | grep e2fsprogs

2 ext4grep 是個原始碼包,需要編譯安裝

檢查一下e2fsprogs包是否完整,我的卻一個-devel的包,所以要先yum install e2fsprogs* 我偷懶了嘿嘿

解壓ext3原始碼包

進入原始碼包,然後開始檢查包的完整性 執行: ./configure 如果在這個過程中到最後有error那麼先檢查你的是不是少 e2fsprogs-devel

在進行 make && make install (編譯 編譯安裝) 一般這裡不會有問題如果這裡報錯了 檢查你係統是不是缺少 gcc gcc-c++ 這倆包 你可以 yum install gcc* 全部安裝 有好處沒有壞處哈哈哈


等待完整完,,好了安裝完以後。可以先檢視一個是否完成成功了,用: ext3grep -v 命令檢視ext3的版本資訊如下如:

當然如果不知道命令怎麼用可以輸入:ext3grep --help 檢視

然後我需要手動建立一個分割槽, 建立命令: fdisk /dev/sda 這個因為沒有辦法儲存影象所有我直接顯示的建立完成以後的。如果大家不知道怎麼建立 可以檢視我的 linx基本命令(檔案系統章節)。

然後 把這個分割槽y用ext3分割槽格式格式化 並且掛載到mnt目錄下。



然後 我進入了掛載的目錄裡, 建立了xcy目錄, 把/etc/passwrd 和 /etc/my.cnf 倆個檔案複製到了/mnt/xcy目錄中,並且 把倆個檔案改了下名字 為了我的辨認。 最後我執行了 rm -rf /xcy/* 把xcy檔案中的檔案都刪除了。

咳咳,然後我首先做的是解除安裝下來 把掛載的分割槽,因為 怕別人動了我的資料夾 在裡面複製了東西我就沒有辦法恢復了,在下面我執行:ext3grep /dev/sda5 --ls --inode 2 給你們解釋一下

ext3grep 刪除檔案的分割槽 --ls --innode inode號

為什麼最後我們要寫2 因為我不知道我的刪除的檔案的inode號多少, 所有我寫的是最大的inode / 的inode號 可以用: ls -id / 檢視

執行下去以後就會看到 他在刷幫你找刪除的檔案們。。


繼續走,,掃到最後我們想要知道的資料夾的inode號是2099 然後我們繼續執行掃描命令: ext3grep /dev/sda5/ --ls --lnode 2009 這個命令他就會掃 xcy目錄下的所有檔案(包括刪除 還有沒有刪除檔案的inode號了) ,然後我們就可以掃除來了,my.cnf.xcy innode號 是2011 passwd.xcy 檔案的inode號 是2010


現在我們的目標馬上就要達到了,知道了倆個檔案的inode號 就可以進行恢復了.

然後我們執行 ext3grep /dev/sda5 --restore-inode 2011 (恢復my.cnf.xcy檔案)

我們在執行 ext3grep /dev/sda5 --restore-inode 2010 (恢復passwrd.xcy檔案)

然後我們將解除安裝的檔案系統重現掛載上去。

恢復了,檔案不會在原來的位置,他會自動在/ 下建立一個叫RESTORED_FILES 目錄 你以後所有恢復的檔案都會在這裡儲存著,還有檔案的名字是以inode號命名的 你需要手動修改回來原名字,不要怕不知道那個檔案是那個,還記得我們 --ls 掃描的時候他都有對應的檔案和inode號



檔案恢復了,哈哈 是不是很激動啊,解決了liunx 下不能恢復的問題,這樣就可以大大節約成本 不用找硬碟恢復工具 不用花錢了, 對了還有呢, 這個同樣可以恢復 mysql 資料庫 誤操作刪除了庫或者表 都可以恢復 原理嘛 其實就是恢復相對應的mysql資料庫中的檔案了,自己嘗試一下吧,

對了在說一下,我截圖中 圈起來了是正確的命令,別的很多有操作錯誤的,因為畢竟第一次試驗嗎。。成功了很高興,,希望能幫到和我同樣遭遇的朋友們。

最後來個總結缺點: 我試驗發現這個功能有些缺點:

1 條件必須是ext3 ext4 日誌檔案系統才可以做到,別的我就不清楚了。

2 我這個是自己建立的分割槽/dev/sda5 也就是說我知道刪除的檔案在那個分割槽上,假如你刪除了檔案知道在哪裡分割槽中 那麼你就需要從sda1 ....sdaN 都試一遍吧,,,,。

有什麼問題可以留言 聯絡我 我看到了可以幫大家解決。。。