歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 恢復Linux 上誤刪除的文件

恢復Linux 上誤刪除的文件

日期:2017/2/28 17:09:52   编辑:Linux教程

Linux 上特自動恢復工具 e2undel 和特殊情況的恢復殊文件的恢復

馮 銳 ([email protected]), 軟件工程師, IBM

王 磊 ([email protected]), 軟件工程師, IBM

在Linux上恢復系統中刪除的文件是一個非常繁瑣的過程,而 e2undel 這個工具可以用來方便地恢復文件系統中已刪除的文件。本文將首先討論 e2undel 的工作原理和用法,並對之進行一些改進。然後討論了文件系統故障、文件系統重建、磁盤物理損壞等情況下應該如何恢復數據。

在本系列文章的前兩部分中,我們介紹了 ext2 文件系統中各種文件在磁盤上的存儲結構,以及如何利用 debugfs 工具的輔助,手工恢復這些文件的詳細過程。

通過這兩部分的學習,我們可以看出恢復系統中刪除的文件是一個非常繁瑣的過程,需要非常仔細地考慮各種情況,並且要保持足夠的細心,才可能把數據准確無誤地恢復出來。稍有差錯,就會造成數據丟失的情況。聰明的讀者肯定會想,如果有一些好工具來自動或輔助完成數據的恢復過程,那簡直就太好了。

幸運的是,已經有人開發了這樣一些工具,來簡化用戶的數據恢復工作,e2undel 就是其中功能最為強大的一個。

自動恢復工具 e2undel

回想一下,在 ext2 文件系統中刪除一個文件時,該文件本身的數據並沒有被真正刪除,實際執行的操作如下:

在塊位圖中將該文件所占用的數據塊標識為可用狀態。

在索引節點位圖中將該文件所占用的索引節點標識為可用狀態。

將該文件索引節點中的硬鏈接數目設置為 0。

將該文件索引節點中的刪除時間設置為當前時間。

將父目錄項中該文件對應項中的索引節點號設置為 0,並擴展前一項,使其包含該項所占用的空間。

而索引節點中的一些關鍵信息(或稱為元數據,包括文件屬主、訪問權限、文件大小、該文件所占用的數據塊等)都並沒有發生任何變化。因此只要知道了索引節點號,就完全可以用本系列文章介紹的技術將文件完整地從磁盤上恢復出來了,這正是 e2undel 之類的工具賴以生存的基礎。

然而,由於所刪除的文件在目錄項中對應的項中的索引節點號被清空了,因此我們就無法從索引節點中獲得文件名的信息了。不過,由於文件大小、屬主和刪除時間信息依然能反映文件的原始信息,因此我們可以通過這些信息來幫助判斷所刪除的文件是哪個。

e2undel 是由Oliver Diedrich 開發的一個用來恢復 ext2 文件系統中已刪除文件的工具,它會遍歷所檢測的文件系統的索引節點表,從中找出所有被標記為刪除的索引節點,並按照屬主和刪除時間列出這些文件。另外,e2undel 還提供了文件大小信息,並試圖按照 file 命令的方式來確定文件類型。如果您使用 rm –rf * 之類的命令一次刪除了很多文件,這種信息就可以用來非常方便地幫助確定希望恢復的是哪些文件。在選擇要恢復的文件之後,e2undel 會從磁盤上讀取該文件占用的數據塊(這些數據塊的信息全部保存在索引節點中),並將其寫入到一個新文件中。下面我們來看一下 e2undel 這個工具的詳細用法。

首先請從 e2undel 的主頁(http://e2undel.sourceforge.net/)上下載最新的源碼包(截止到撰寫本文為止,最新的版本是 0.82),並將其保存到本地文件系統中。不過這個源碼包在最新的 Fedora Core 8 上編譯時可能會有些問題,這是由於 ext2 文件系統內部實現中一些數據結構的變化引起來的,讀者可以下載本文“下載”部分給出的補丁來修正這個問題(請下載這個補丁文件 e2undel-0.82.patch,並將其保存到與源碼包相同的目錄中)。要想編譯 e2undel,系統中還必須安裝 e2fsprogs 和 e2fsprogs-devel 這兩個包,其中有編譯 e2undel 所需要的一些頭文件。Fedora Core 8 中自帶的這兩個包的版本號是 1.39-7:

Copyright © Linux教程網 All Rights Reserved