1. 程式人生 > >使用 Linux 檔案恢復工具---目前個人認為最權威版

使用 Linux 檔案恢復工具---目前個人認為最權威版

Linux 檔案恢復的原理

inode 和 block

首先簡單介紹一下 Linux 檔案系統的最基本單元:inode。inode 譯成中文就是索引節點,每個儲存裝置(例如硬碟)或儲存裝置的分割槽被格式化為檔案系統後,應該有兩部份,一部份是 inode,另一部份是 block,block 是用來儲存資料用的。而 inode 呢,就是用來儲存這些資料的資訊,這些資訊包括檔案大小、屬主、歸屬的使用者組、讀寫許可權等。inode 為每個檔案進行資訊索引,所以就有了 inode 的數值。linux 作業系統下可以使用 ls –id 命令來檢視檔案或者目錄的 inode 值,一般”root”目錄的 inode 值為 2,一個分割槽掛載到一個目錄下時,這個”root”目錄的 inode 值為 2

1

2

3

# mount /dev/sdb2 /tmp

# ls -id /tmp

2 /tmp

檔案恢復的原理

本文要介紹的命令是通過檔案系統的 inode 值(一般是 2 )來獲取檔案系統資訊。在 ext3 和 ext4 檔案系統中,每個檔案都是通過 inode 來描述其資料存放的具體位置,當檔案被刪除以後,inode 的資料指標部分被清零,檔案目錄區沒有太多變化。檔案的讀寫都是通過 inode 來實現,當 inode 資料指標被清零以後,即便檔案內容還在,也沒有辦法把檔案內容組合出來。當 ext3 和 ext4 檔案系統中的元資料 metadata 發生變化時,相應的元資料 metadata 在日誌檔案會有一份拷貝。比如一個檔案被刪除了,它的 inode 資訊會在日誌檔案中先儲存一份,然後把要刪除檔案 inode 相關資訊清零。這個日誌檔案是迴圈使用的,當操作過多時,刪除的檔案的 inode 日誌記錄會被新的資料替換,這就徹底喪失了根據 inode 找回資料的機會了。如果是大量檔案的刪除,這個日誌檔案會被反覆迴圈利用多次,只留給最後刪除的那些檔案的恢復機會。

使用命令列工具恢復檔案

foremost 和 extundelete 簡介

formost 是一個基於檔案頭和尾部資訊以及檔案的內建資料結構恢復檔案的命令列工具。這個過程通常叫做資料探勘(data carvubg)。formost 可以分析由 dd、Safeback、Encase 等生成的映象檔案,也可以直接分析驅動器。檔案頭和尾可以通過配置檔案設定,也可以通過命令列開關使用 formost 內建的檔案型別。formost 最初是由美國空軍特別調查室(Air Force Office of Special Investigations)和資訊系統安全研究中心(The Center for Information Systems Security Studies and Research)開發的,現在使用 GPL 許可。Foremost 支援恢復如下格式:avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi, sxw, vis, wav, wmv, xls, zip。

針對 Linux 下的 ext 檔案系統來說,常用的 Linux 檔案刪除恢復工具有 debugfs、ext3grep、extundelete 等。extundelete 是一個開源的資料恢復工具,支援 ext3、ext4 檔案系統,其官方站點位於http://extundelete.sourceforce.net/,目前最新穩定版本為 0.2.0。

上面介紹的兩種命令列工具 foremost 和 extundelete 二者相比,foremost 支援的檔案系統比較多(包括 ext2、 ext3 、vfat、NTFS、ufs、jfs 等)和 extundelete 支援的檔案系統較少(ext3、ext4)檔案系統。不過 foremost 只能支援恢復特定格式的檔案。

使用 foremost

首先安裝軟體包

1

#apt-get install foremost

其它 Linux 發行版使用者可以在 http://foremost.sourceforge.net/ 下載原始碼編譯安裝。下面看看使用方法。

恢復單個型別檔案

筆者刪除一個 USB(/dev/sdba1)儲存器中一個 png 檔案然後使用 formost 恢復。

1

2

#rm -f /dev/sdb1/photo1.png

#foremost -t png -i /dev/sdb1

恢復完成後會在當前目錄建立一個 output 目錄,在 output 目錄下會建立 png 子目錄下會包括所有可以恢復的 png 格式的檔案。

需要說明的是 png 子目錄下會包括的 png 格式的檔名稱已經改變,另外 output 目錄下的 audit.txt 檔案是恢復檔案列表。

恢復多個型別檔案

1

#foremost -v -T -t doc,pdf,jpg,gif -i /dev/sda6 -o /media/disk/Recover

恢復完成後會在當前目錄建立一個 output 目錄,在 output 目錄下會建立四個子目錄(/doc,/pdf,/jpg,/gif),分別包括四種類型檔案。另外 output 目錄下的 audit.txt 檔案是恢復檔案列表。

使用 extundelete

首先安裝軟體包

1

#apt-get install extundelete

其它 Linux 發行版使用者可以在http://extundelete.sourceforce.net/下載原始碼編譯安裝。下載安裝 extundelete 之前要安裝兩個軟體包 e2fsprogs 和 e2fslibs。下面看看使用方法

模擬資料誤刪除環境

這裡我們使用一個分割槽/dev/sdd1 掛在在/backupdate 上,建立一個測試目錄/delete 並建立一檔案:del1.txt 。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# mkdir –p /backupdate/deldate

# mkfs.ext4 /dev/sdd1

# mount /dev/sdd1 /backupdate

#cd /backupdate/deldate

# touch del1.txt

# echo " test 1" > del1.txt

獲取檔案校驗碼

# md5sum del1.txt                          

 66fb6627dbaa37721048e4549db3224d  del1.txt

 

刪除檔案

# rm -fr /backupdate/*  

 

解除安裝檔案系統或者掛載為只讀

# umount /backupdate

查詢恢復資料資訊,注意這裡的--inode 2 這裡會掃描分割槽 :

# extundelete /dev/sdd1 --inode 2

.....

File name                                       | Inode number | Deleted status

Directory block 8657:

.                                                 2

..                                                2

lost+found                                        11             Deleted

del1.txt                                              12             Deleted

上面標記為 Deleted 是已經刪除的檔案或目錄

開始恢復檔案

預設恢復到當前目錄下的 RECOVERED_FILES 目錄中去。

1

2

3

4

5

6

7

8

# extundelete /dev/sdd1 --restore-file del1.txt

如果恢復一個目錄

# extundelete /dev/sdd1 --restore-directory /backupdate/deldate

恢復所有檔案

# extundelete /dev/sdd1 --restore-all

獲取恢復檔案校驗碼,對比檢測是否恢復成功

# md5sum RECOVERED_FILES/ del1.txt                        

66fb6627dbaa37721048e4549db3224d  RECOVERED_FILES/del1.txt

檢視校驗碼與之前的是否完全一致。

應用總結:筆者在現實使用過程中發現 extundelete 還是有很大的不完整性,基於整個磁碟的恢復功能較為強大,基於目錄和檔案的恢復還不夠強大。在 Linux 下誤刪除了檔案,當發現數據丟失以後,不要進行任何操作,保留現場。要想辦法把資料丟失的檔案系統經過 dd 命令或者 AIR(Automated Image Restore,http://cdnetworks-kr-2.dl.sourceforge.net/ )工具到另外的儲存空間上作為最原始的備份,以便資料恢復專家現場診斷恢復。

使用 scalpel

以上介紹的工具主要使用在 ext3 和 ext4 的檔案系統,如果使用者使用的那些沒有日誌機制的舊有檔案系統,可以使用 scalpel 工具。scalpel 是一種快速檔案恢復工具,它通過讀取檔案系統的資料庫來恢復檔案。它是獨立於檔案系統的。

使用者可以在http://www.digitalforensicssolutions.com/Scalpel/ 下載原始碼編譯安裝。下面看看使用方法:

使用 scalpel 工具之前,首先要修改配置檔案: /etc/scalpel/scalpel.conf。

例如使用者要恢復所有刪除 pdf 檔案,那麼要在/etc/scalpel/scalpel.conf 把包括 pdf 檔案格式的兩行之前的# 去掉。

1

2

3

4

[...]

        pdf     y       5000000 %PDF  %EOF\x0d  REVERSE

        pdf     y       5000000 %PDF  %EOF\x0a  REVERSE

[...]

然後儲存檔案。

下面看看使用方法

1

# scalpel /dev/sdb1 -o /RECOVERY/

其中/dev/sdb1 是目標驅動器,/RECOVERY/ 是恢復檔案儲存目錄。目錄下的 audit.txt 檔案是恢復檔案列表。

使用字元終端工具 testdisk 和 phtorec

testdisk 簡介

testdisk 是分割槽表恢復、raid 恢復、分割槽恢復的開源免費工具(testdisk 支援如下檔案系統: FAT12/FAT16/FAT32/NTFS/ext2/ext3/ext4)。testdisk 支援的功能: 修復分割槽表, 恢復已刪除分割槽,用 FAT32 備份表恢復啟動扇區,重建 FAT12/FAT16/FAT32 啟動扇區,修復 FAT 表,重建 NTFS 啟動扇區,用備份表恢復 NTFS 啟動扇區,用 mft 映象表(mft mirror)修復 mft 表,查詢 ext2/ext3 備份的 superblock,從 FAT,NTFS 及 ext2 檔案系統恢復刪除檔案,從已刪除的 FAT,NTFS 及 ext2/ext3 分割槽複製檔案。

使用方法

首先安裝

1

#apt-get install testdisk

其它 Linux 發行版使用者可以在http://www.cgsecurity.org/wiki/TestDisk_Download 下載原始碼編譯安裝。下載安裝 testdisk 之前要安裝幾個軟體包 libjpeg8 ,libncursesw5, libuuid1, zlib1g 。下面看看使用方法

啟動 testdisk

1

#testdisk

testdisk 啟動後的工作介面首先是選擇恢復操作中的 log 檔案(testdisk.log)的紀錄方式見圖 1。

圖 1.選擇恢復操作中的 log 檔案的紀錄方式

圖 1 選擇恢復操作中的 log 檔案的紀錄方式

[Create]新建

[Append]追加

[No Log]不紀錄

選擇了 log 檔案的記錄方式後、系統顯示處於連線狀態的磁碟裝置見圖 2。

圖 2.處於連線狀態的磁碟裝置

圖 2 處於連線狀態的磁碟裝置

在列出的磁碟裝置中,選擇要恢復的分割槽,然後選擇磁碟分割槽的種類。若是 ext4 檔案系統的話,請選擇 [None ] Non partitioned media 見圖 3

圖 3.選擇 [None ] Non partitioned media

Figure xxx. Requires a heading

說明:一般選擇[Intel] Intel/PC partition(如果是 GPT 分割槽,請選擇 EFI GPT),對於 ext4 檔案系統選擇 [Intel] Intel/PC partition 也能正確識別,只是分析硬碟時比較慢。

下面的畫面中選擇[Analyse],對分割槽進行分析見圖 4。

圖 4.對分割槽進行分析

圖 4 對分割槽進行分析

下面顯示了當前分割槽的狀態。這是軟體分析的當前分割槽表的分割槽結果,我們選擇“Deep Search”進行一次深入檢測見圖 5。

圖 5.選擇“Deep Search”進行一次深入檢測

圖 5 選擇“Deep Search”進行一次深入檢測

下面是檢測完成介面見圖 6

圖 6.檢測完成介面

圖 6 檢測完成介面

在這個畫面時,按 P 鍵就可以列出硬碟上的檔案見圖 7

圖 7.紅色的檔名稱就是已經被刪除的檔案

圖 7 紅色的檔名稱就是已經被刪除的檔案

紅色的檔名稱就是已經被刪除的檔案,選擇好你要恢復的檔案後,按 c 鍵之後,它就會問你要複製到哪個目錄,這時請選擇你要 複製的目地地(destination)即可。

photorec 簡介

photorec 是一款用於恢復硬碟、光碟中丟失的視訊、文件、壓縮包等檔案,或從數碼相機儲存卡中恢復丟失圖片的資料恢復軟體(因此,該軟體命名為 photo recovery 這個名字)。 photorec 忽略檔案系統,能直接從介質底層恢復資料,因此,在介質的檔案系統嚴重破壞或被重新格式化後,它也能進行資料恢復。出於安全考慮, photorec 以只讀方式來訪問您要恢復資料所在的磁碟或儲存卡介質。提示: 一旦發現丟失或意外刪除了某個圖片、檔案, 請不要繼續往該儲存裝置或磁碟儲存新檔案;否則您可能會覆蓋原來的資料。 這意味著您在使用 photorec 時,您千萬不要將恢復的檔案寫入到原資料所儲存的同一分割槽。

使用 photorec 恢復檔案

photorec 是 testdisk 的伴侶程式,安裝 testdisk 後 photorec 就可以使用了。

啟動 photorec

1

# photorec

圖 8 中顯示了已連線磁碟裝置,準備恢復的檔案在那個裝置上就選擇它,然後在選擇 Proceed 按鈕繼續下一步。

圖 8.已連線磁碟裝置

圖 8 已連線磁碟裝置

接下來,選擇恢復的磁碟分割槽格式。這裡選擇 ext4 見圖 9。

圖 9.選擇恢復的磁碟分割槽格式

圖 9 選擇恢復的磁碟分割槽格式

畫面下方[File Opt]中有可供恢復的檔案種類提供被選擇見圖 10。

圖 10.可供恢復的檔案種類

圖 10 可供恢復的檔案種類

說明:如果只是 root 據某些檔案簽名要恢復部分檔案型別,那麼可以按 s 取消全部勾選,然後移動游標到要恢復的檔案型別,可按空格來選擇高亮選中的型別。

下面設定要分析的磁碟空間區域,可整個分割槽搜尋,也可只搜尋自由空間(相當於未分配簇)見圖 11 。

圖 11.設定要分析的磁碟空間區域

圖 11 設定要分析的磁碟空間區域

下面選擇分割槽所使用的檔案系統型別,然後設定匯出的檔案目錄,一般輸入 Y 並回車即可。圖 12 是恢復完成介面。

圖 12.恢復完成

圖 12 恢復完成

恢復完了選擇 Quit 退出 PhtoRec。被恢復的檔案是 recup_dir.x 的若干數字子組合為檔名被儲存在當前目錄的/recup_dir 子目錄下的。

功能對比

表 1 是 Linux 刪除檔案恢復工具

表 1.Linux 刪除檔案恢復工具

工具名稱/功能對比 工作介面 功能簡介
foremost 命令列 formost 是一個基於檔案頭和尾部資訊以及檔案的內建資料結構恢復檔案的命令列工具
extundelete 命令列 Extundelete 是 ext3、ext4 檔案系統的恢復工具
scalpel 命令列 scalpel 是一種快速檔案恢復工具,它通過讀取檔案系統的資料庫來恢復檔案。它是獨立於檔案系統的
testdisk 字元終端 Testdisk 支援分割槽表恢復、raid 恢復、分割槽恢復
phtorec 字元終端 photorec 用來恢復硬碟、光碟中丟失的視訊、文件、壓縮包等檔案,或從數碼相機儲存卡中恢復丟失的圖片

總結

可以使用 testdisk 進行檔案恢復的場合,也就是硬碟上的分割槽(該分割槽有原有資料紀錄)已經損壞的情形。但是如果損壞之後,重新再次做成了新分割槽的話,檔案恢復的可能性比較小,很困難。photorec 不僅針對 硬碟、USB 裝置、CD-ROM、SD 卡,而且還可以對其它儲存裝置進行應用。因此大多數常用的檔案如果被誤操作的話,均可利用其來進行恢復,只不過它的初衷是針對照片而製作的。

相關主題