移至主內容
DarkRanger's Secret Area

主導覽

  • 首頁
  • 關於本站
  • Linux
  • 程式開發
  • N900
  • 譯文
  • 資訊技術辭典

文章分類

  • 影劇
  • 遊戲
  • 筆記
  • 雜文
  • 資訊技術
  • 站務訊息

最新內容

  • Jurassic Park computers in excruciating detail
  • How-To:Linux 安裝 DOSBox
  • Test Windows drivers in seconds, not minutes
  • RHEL 9 設定 xrdp 遠端桌面登入
  • Firefox 開發者工具的本機模式
  • How-To:Linux 安裝 Pax Britannica
  • How-To:Linux 架設 vsftpd 伺服器
  • 【自製】Chinese Chess 2
  • 早期 Unreal Engine 在 Linux 下的開發環境建置
  • 【自製】CrankMode

導航連結

  • 首頁
  • Linux 專區
  • Linux 工具程式
  • How-To:Linux 資料救援工具

How-To:Linux 資料救援工具

發表日期:星期六, 03/30/2013 - 23:26,更新日期:星期六, 10/31/2026 - 00:44

借助於開源的免費工具程式,儲存裝置的資料救援(data recovery)是有可能能夠自行實現的。然而自行施作的可行性評估,首先是該故障裝置必須還能夠被電腦偵測得到;以及欲救援的資料內容,一旦無法成功復原的後果及代價,不能是毀天滅地的等級。倘若裝置已經無法被偵測及識別出型號,或者如果資料損失的後果會相當嚴重,那麼當然還是得委由專業的公司,在安全的環境下,用嚴謹的流程及機具來處理。

 

不過即便如此,長年下來不知不覺間,自己仍處理過多次資料救援的需求,裝置類型包含 HDD、SSD、隨身碟及記憶卡等等。成功及失敗案例皆同樣存在,有時會順利救回指定的資料內容,有時結果則不盡如人意。於是本文算是一個簡單的經驗小總結,會有建議的流程以及推薦的工具程式,而作業環境則以 Fedora 43 發行版為基礎,使用 DNF 來安裝所需的工具程式。

 

然而在此之前,可能還是得先再次提醒:許多資料救援的迫切需求,其實都是因為沒有養成良好的資料備份觀念、或者是因為不適當的裝置使用行為所致。這其中包含習於將重要的東西只儲存在單一一處,或者過度依賴可攜式儲存裝置(可攜式裝置的故障風險高於固定裝置)。尤其考量到如今已是雲端盛行的年代,使用者應更多利用雲端儲存空間來進行重要的資料備份,藉此多一份保障。

 

除此之外,儲存媒體的採購及使用也不應一味追求更大的容量。因為容量越大,一旦有資料救援的需求,就可能會相應地增加資料救援的複雜性。包含讀取整個裝置可能會耗費更多的時間,以及若是需要做完整的映像拷貝,則作業環境也會需要有相應的可用空間。

 

1. 關於救援環境及器具的建議

雖然各式各樣的儲存媒體,如今都有 USB 轉接的媒介。然而倘若是針對資料救援的需求,那麼會建議是盡量使用儲存媒體最原生的介面。例如原本使用 USB 外接盒的 SATA 或 M.2 磁碟,最好是能夠直接改用其原始介面,插到電腦的主機板上。這是因為轉接介面也許會對救援過程有各種不同程度的影響,所以應盡可能避免。

 

2. 建立儲存媒體的映像檔,或者是進行對拷動作

倘若環境條件許可,在最理想的情況下,資料救援的第一步驟應是從問題裝置拷貝出一個 1:1 的映像檔複本,然後後續的所有救援動作都只在映像檔上進行。特別是在媒體裝置有硬體性故障的情況下,若是反覆對裝置進行操作,有可能會加劇裝置的損壞程度,惡化後續資料救援的可行性。

 

ddrescue 便是適用於此項任務的工具程式。乍看之下它有點像是 Linux 上常見的資料複製工具 dd,不過實際上 ddrescue 是一款專用於資料救援的複製工具。最顯著的差異,在於 ddrescue 在遭遇讀取錯誤時仍會嘗試解讀出正確的資料。其安裝指令如下:

  • sudo dnf 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 腳本,可用於便利地產出相應的指令。

 

在某些情況下,ddrescue 以外的可行替代方案是 Clonezilla。不過它並非是單獨的工具程式,而是一整套設計好的 Linux 系統,所以在使用彈性上比較難以超出它預先規劃的執行流程。

 

2. 儲存媒體的分割表救援

有些時候資料無法讀取,是因為分割表(partition table)的遺失或損毀。所以一旦分割表復原之後,有可能儲存媒體以及其中的資料便恢復可讀狀態。於是針對這項需求,TestDisk 是一款跨平台的資料救援工具,其主要功能便是進行分割表的救援,能夠嘗試分析出正確的分割表並重新寫入。其安裝指令如下:

  • sudo dnf install testdisk

 

執行方式:

  • sudo testdisk

 

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

  • sudo testdisk backup.img

 

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

 

倘若某些裝置不存在分割表的結構(non-partitioned media),TestDisk 也能嘗試分析出所使用的檔案系統為何。於是使用者可以再以此為線索,對檔案系統執行相應的修復(fsck 或 chkdsk)或掛載動作。此外 TestDisk 對 FAT、NTFS 等檔案系統也具有反刪除的功能,可以用來搜尋並嘗試復原誤刪的檔案。

 

3. 在檔案系統無法運作的情況下實施資料救援

倘若儲存媒體的故障程度,已經發展到其內的檔案系統無法再做修復及掛載。那麼資料救援的最終手段,便是使用檔案挖掘(file carving)工具。這類工具程式的原理是忽略檔案系統、直接根據資料開頭和所支援的檔案類型進行核對,然後嘗試拼接出完整的檔案。在忽略檔案系統的情況下,這類工具無法復原目錄結構與檔名,也無視於檔案是否被標記為已刪除的狀態,會全數抓取出來。

 

有不只一種檔案挖掘工具,例如 Foremost 和 Scalpel 都是 DR 曾經使用過的工具程式。不過現今來說,推薦使用的是 PhotoRec。PhotoRec 其實與 TestDisk 系出同門,因此在 Fedora 發行版上只要安裝 TestDisk 就會連帶裝有 PhotoRec。雖然名為 PhotoRec 可能會讓人誤解為這款工具只能救援圖片檔案,但事實上它所支援的檔案類型算是相當廣泛,是自己目前最常使用的檔案挖掘工具。其執行方式如下:

  • sudo photorec

 

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

  • sudo photorec backup.img

 

由於 PhotoRec 也具有簡單的操作介面,所以同樣無須在此特別說明其操作方式。