How-To:Linux 資料救援工具

當手上的儲存裝置(例如硬碟、記憶卡、隨身碟等)遇到需要進行資料救援的狀況時,如果該裝置並沒有硬體性的損壞、或者損壞還不是太嚴重時(至少電腦可以識別出裝置),那麼可以考慮利用 Linux 上一些相當方便的工具程式來進行資料救援。

 

要進行資料救援的工作,往往需要一顆(或多顆)夠大的硬碟,因為無論是將裝置做成映像檔、或者是利用 file carver 所挖出來的資料,其最終佔有的容量可能比原本預計要救援的資料量還要大得多。此外,在裝置的連接上,應盡可能直接使用裝置的原生介面,因為在 DR 的使用經驗裡,像是 IDE/SATA 裝置經過 USB 轉接後,可能會造成一些錯誤,進而影響救援的結果。

 

以下 DR 將以 Fedora 17 為基礎,介紹可用的資料救援相關工具,而軟體安裝方式皆為 yum。由於本文並不特別針對反刪除(undelete)的需求,因此專用於特定檔案系統的反刪除工具並不會在此列舉出來。

 

1. ddrescue

ddrescue 乍看之下有點像是 Linux 上常見的資料複製工具 dd,但實際上 ddrescue 是一款專用於資料救援的複製工具。最顯著的差異,在於 ddrescue 在遭遇讀取錯誤時仍會嘗試解讀出正確的資料。這可以應用於當儲存裝置存在著硬體性的損壞時,使用 ddrescue 將裝置複製成映像檔,再從映像檔中進行作業,如此可以避免持續去操作已經有問題的裝置。

 

安裝指令:

  • sudo yum install ddrescue

 

將 sdb 磁碟複製成映像檔 backup.img、記錄檔名為 recovery.log、並在遭遇錯誤時重試三次的指令範例:

  • sudo ddrescue -r 3 /dev/sdb /home/user/backup.img recovery.log

 

也可以嘗試使用直接磁碟存取(direct disc access)模式,在某些情況下可能有助於改善救援比例或者執行速度。使用此模式須先確認磁碟的實體磁區大小為何(可使用 fdisk 指令的輸出結果來檢視),然後加上額外的參數,如下所示:

  • sudo ddrescue -r 3 -d -b 4096 /dev/sdb /home/user/backup.img recovery.log

 

除此之外,倘若是希望將 ddrescue 作為磁碟對拷工具,則本站有提供一支 Python 腳本,可用於便利地產出相應的指令。

 

2. TestDisk

TestDisk 是一款跨平台的資料救援工具,其主要功能是進行磁碟分割表的救援,適用於誤刪分割區、或分割表損毀的狀況上,TestDisk 可以查出正確的分割表並重新寫入。此外它對 FAT、NTFS 等檔案系統也具有反刪除的功能,可以用來搜尋並嘗試復原誤刪的檔案。

 

安裝指令:

  • sudo yum install testdisk

 

執行方式:

  • sudo testdisk

 

TestDisk 預設是以實體裝置為讀取對象,若要讀取特定映像檔,得在執行時加上檔名:

  • sudo testdisk backup.img

 

由於 TestDisk 本身已經具備簡單明瞭的操作介面,因此對於其細部的操作方式就不多加贅述。

 

接下來 DR 要介紹的三款工具都是所謂的 file carver,其原理都是忽略檔案系統、直接根據資料開頭和所支援的檔案類型進行核對,然後嘗試拼接出完整的檔案。在忽略檔案系統的情況下,這類工具無法復原目錄結構與檔名,也無視於檔案是否被標記為已刪除的狀態,而通通抓出來。不過相對的優點是這類工具復原檔案的能力基本上都很不錯。

 

3. PhotoRec

PhotoRec 與 TestDisk 系出同門,在 Fedora 17 上只要安裝 TestDisk 就會連帶裝有 PhotoRec。名為 PhotoRec 可能會讓人誤解為這款工具只能救援圖片檔案,但事實上它所支援的檔案類型算是相當廣泛。

 

執行方式:

  • sudo photorec

 

和 TestDisk 相同,PhotoRec 預設也是以實體裝置為讀取對象,若要讀取特定映像檔,得在執行時加上檔名:

  • sudo photorec backup.img

 

PhotoRec 也具有簡單的操作介面,所以同樣不特別說明其操作方式。

 

4. Foremost

Foremost 最初是由美國空軍特別調查處(Air Force Office of Special Investigations)和資訊安全研究中心(CISR)共同研發,用於司法調查用途,後來則以開放原始碼的形式釋出並持續發展。

 

安裝指令:

  • sudo yum install foremost

 

若要救援 sdb 磁碟中所有支援的檔案類型到使用者的 recovery 目錄下,指令範例為:

  •  sudo foremost -t all -i /dev/sdb -o /home/user/recovery

 

5. Scalpel

Scalpel 是基於 Foremost 發展而來,可以視為 Foremost 的改良版。以 DR 自身的操作經驗來說,Scalpel 能夠抓出比 Foremost 更多的檔案,另外 Scalpel 也支援多執行緒,能夠提供更好的處理效率。

 

安裝指令:

  • sudo yum install scalpel

 

安裝完畢後,先確認設定檔(/etc/scalpel.conf)裡啟用了哪些檔案格式,不需要的可以將其註解掉,反之則移除註解。接著,救援 sdb 磁碟中的檔案到使用者的 recovery 目錄下,其指令範例為:

  • sudo scalpel -c /etc/scalpel.conf /dev/sdb -o /home/user/recovery
 
 
其它參考資料: