Linux教程-使用mc恢復被刪除檔案(轉)

ba發表於2007-08-11
Linux教程-使用mc恢復被刪除檔案(轉)[@more@]週五下午7點接到電話並沒有什麼希奇;當一個人在家中工作時,別人總是可以找到他的。不尋常的電話另外一端說話的語調;其嚴重程度是絕對不會弄錯的。電話的另一端,我的一個同事正向我解釋一個指令碼中的錯誤空格是如何把我們開發用的計算機上的整個home目錄樹都刪除的。


??在我向他解釋Linux自己並沒有一個真正恢復的工具之後,我們就開始從備份磁帶上恢復檔案了。到星期一早晨為止,大部分內容已經恢復原樣了。


??在事情發生的那一刻,我忘記了一點事情。在Linux系統中,恢復刪除的檔案是可能的,但是這需要在檔案被刪除之後就儘快進行。和Windows中的情況類似,如果你等的時間太長了,那麼這些檔案的內容可能就已經被覆蓋了。


??在1998年我使用Midnight Commander檔案管理器工作時我就已經知道這種特性了。delete鍵會刪除滑鼠所在的檔案,也可能會把已經選中的檔案全部刪除。我希望刪除滑鼠所在的檔案愛你,但是卻忘記了自己文件目錄下所有的檔案都已經選中了——你可以猜想會發生什麼事情。當然,這不是檔案管理器的錯;在想到自己已經選定了多個檔案這一事實之前,我就對刪除請求進行了確認。


??後來當然我又想起來了!*笑*


??Steven Hirsch,一個Linux的良師益友,他是如此的友善,給我解釋瞭如何使用(一個特定編譯的版本)Midnight Commander來恢復檔案。具有諷刺意義的是,這個曾經以Linux裡所能見到的瘋狂的速度刪除檔案的工具居然是我恢復檔案的最佳希望。


?? 在我真誠地希望你不會看到成百上千的必須檔案高速消失時,我希望你已經準備好了黎明的到來。你可能希望作為root使用者執行;我們會載入並解除安裝分割槽,並使用這些原始的磁碟分割槽進行工作。就象下面的例子一樣,如果你要解除安裝諸如/home之類的分割槽,這可能尤其必要。


??在你的系統上取得Midnight Commander的一份複製


??雖然它不是唯一具有恢復刪除檔案能力的程式,但是它是我最熟悉的恢復刪除檔案的工具。現在,預設情況下MC已經包含了恢復刪除檔案的程式碼。如果你的發行版本中沒有MC,就從獲取一份複製並在系統中安裝上。


??進行恢復的最好時機是在你刪除檔案之後——你希望要把恢復的檔案儘可能少變動地恢復到檔案系統中。


??建立一個測試檔案並將這個檔案刪除


??你應該在需要的時候可以載入並解除安裝的分割槽上執行這些操作——不要在你的web server的主分割槽上執行這些操作。


??選取一個非root的分割槽(使用mount命令來檢視已經載入的分割槽)。對於本例來說,讓我們假定/dev/sdd1是載入在/home上的。這樣建立一個測試檔案:


echo "Just a test file" >/home/testfile

rm -f /home/testfile


??如果你是在root分割槽(或者更糟糕的情況,你只有一個分割槽)上建立的這個檔案,那麼你就要在下個月我介紹如何在root分割槽上安全操作時再來看一下了。


??解除安裝刪除檔案的分割槽


??在本例中,這可以透過執行下面的命令來實現:


umount /dev/sdd1


??不要試圖在一個已經載入的分割槽上恢復檔案——這樣你可能會破壞磁碟。


??啟動Midnight Command並選擇要恢復的檔案


mc


在mc中,輸入:


cd undel:/dev/sdd1


??你只能在mc中使用這個命令,其它地方都不行。在mc中使用“cd”命令和在命令提示符中的效果相同;該命令會改變目錄。這個特定語法的命令指示mc顯示該分割槽上所有刪除的可以恢復的檔案,而不是顯示目錄中的檔案。


??耐心等待一會,mc正在整個ext2檔案系統上查詢刪除的inode(i節點)(一個inode中包含了一個檔案的_contents_,但是沒有檔名)。大約一分鐘左右,你就會在這個視窗中看到一個顯示有一些名字類似“23434632:2”的檔案列表。這些項的日期和時間是對應的inode被刪除的日期和時間。我發現最有用的是對這個視窗根據時間進行排序:


, r, s, m,


或者


, l, s, m,


??你也可以使用 “檢視”特性來觀察inode的內容。在你認為刪除檔案的時間靠近視窗中列出的時間的檔案上面按下<ins>鍵。這樣就把這些檔案立即標記成已恢復的。



恢復檔案


??在其它視窗(使用鍵在mc中切換視窗)中,在/tmp下建立一個空目錄,例如/tmp/deletedfiles。


mkdir /tmp/deletedfiles


??現在切換回unel視窗並按下鍵把這些檔案複製到實際的檔案系統中。如果你已經處理完了,就可以按下鍵離開mc——見螢幕底部的說明。


??現在是重新載入/home分割槽的最好時機,使用下面的命令:


mount /home


??現在,你可能希望逐個檢視一下這些檔案,並確定實際的名字應該是什麼。既然這些檔案都在/tmp/deletedfiles目錄中,你可以把它們和其它檔案一樣處理,例如:


cd /tmp/deletedfiles

mv 23434632:2 /home/testfile


??如果你多次刪除了一個檔案,那麼你就會得到一個檔案的多個複製;你需要確定哪個檔案是你希望保留的。


??就是這樣,你已經從Linux分割槽中恢復出檔案來了。


??對於這種處理方法有幾點需要注意。首先,這種特殊的恢復技巧只能在ext2分割槽上工作。其次,如果檔案是在執行2.0.x版本的核心的系統上刪除的,那麼恢復過程只能最大可以恢復檔案的前面12288位元組。這是刪除過程中的一個bug,它沒有把檔案作為一個整體保留到檔案刪除為止。可能在比我使用的更新的2.0.x版本的核心中已經修正了這個問題,但是我知道在2.2.x版本的核心中這個問題已經修正了。


?? 這種特性的榮譽應該歸功於Ted T'so和其它ext2檔案系統的作者,也應該歸功於Miguel de Icaza和其它的MC的作者。


??十分感謝Bob DeRosa,感謝他允許我再次在LinuxMonth中發表文章。

??William 是Vermont, USA的一個Open-Source的開發者、狂熱的追求者和倡導者。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947259/,如需轉載,請註明出處,否則將追究法律責任。

相關文章