2014年6月10日 星期二

Tools : 磁碟救援工具 ddrescue & PhotoRec

2014年6月10日 星期二

使用電腦有一件事一定得牢牢記住:「備份,備份,再備份」。現在的USB隨身碟也好,記憶卡也好,經常會聽到有人資料突然不見了,硬碟則是常有壞軌,甚或更嚴重,根本連偵測都偵測不到的情形發生。如果有養成好習慣,除了電腦的硬碟中有一份原始檔案,行動儲存裝置有備份,甚至「雲端」也來一份,相信就不怕那些不知何時會引爆的「炸彈」了。

最近有好幾次救援資料的經驗,由於當事人都沒有備份,只能死馬當活馬醫。除了類似 Final Data 這種商業軟體,我也試著在網路上找免費甚至「開源」的工具來解決。用過「GNU ddrescue」、「PhotoRec」後,覺得這兩個工具值得推薦,前者可以幫我們將有壞軌的磁碟備份成「映像檔」,而後者則可以幫我們將消失的檔案「撈」回來,至於能救回多少檔案,可能得看看運氣好不好囉!

以 ddrescue 由故障的磁碟複製資料


最近的兩次硬碟救援任務都卡在有嚴重壞軌,其中一顆是看得到分割區,也看得到目錄結構(MS Windows 系統),但因為有壞軌,會中斷 Windows 下的複製動作或是修復動作;另外一顆則是看得到分割區,但是無法看到資料,也已無法掛載。

如果電腦還偵測得到故障的磁碟,在 unix like 的 Linux 或是 Mac OS X 中,可以利用 ddrescue 將資料複製到另外一顆正常的磁碟中,它會盡量把可以讀到的資料複製出來。等到 ddrescue 的工作完成以後,我們可以利用別的工具來將複製的磁碟或是磁碟映像進行資料修復或備份。

ddrescue 的原始碼及說明文件,我們可以在 GNU 的網站中找到:





下載與安裝

Linux

如果使用的 Linux 是 Ubuntu 或 EzGo ,我們可以在終端機中執行底下的指令來安裝已編譯好的 GUN ddrescue:

sudo apt-get install gddrescue

FreeBSD

ddrescue 可以在 FreeBSD ports tree 的「sysutils」中找到,利用 ports 來安裝應該是最方便的囉!在終端機中執行底下的指令來編譯並安裝:

cd /usr/ports/sysutils/ddrescue
make install

Mac OS X

Mac OS X 中,當然也可以自行下載 GNU ddrescue 的 source 來編譯並安裝,嫌麻煩的話,我在下面這個網頁:


留言中找到有人提供 ddrescue 1.17 binary (compiled on OS X 10.7) 的下載連結:


下載回來的壓縮檔解壓縮後即可直接在終端機中下指令使用。


使用 ddrescue

開始使用 ddrescue 前,我們必須先將欲複製資料的分割區代號查出來。

Linux 中,我們可以執行底下的指令:

sudo fdisk -l


Mac OS X 中我們可以執行底下的指令:

diskutil list




查出分割區的磁碟代號以後,我們就可以準備以 ddrescue 來複製磁碟了。下面假設將故障的硬碟在 Mac OS X 中是「disk1」,它有三個分割區,想讀取第二個分割區後寫入映像檔中,並儲存為「partion2.dmg」,如果已在 ddrescue 的目錄中,就執行底下的指令:

sudo ddrescue /dev/disk1s2 partion2.dmg partion2.log

指令中,接在映像檔檔名(輸出裝置)後面的參數「partion2.log」是讓 ddrescue 可以將過程留記錄,方便我們在中斷 ddrescue 的工作後,可以重新由中斷之處繼續接著救援,畢竟磁碟救援的工作不是一、兩個小時就可以完成的,留了記錄可避免又要重頭來過。

另外,因為 ddrescue 預設是以 512 bytes 為一個單位來處理,如果想加快處理的速度,我們可以用 --block-size 來指定每次處理的單位,例如:

ddrescue --block-size=4KiB /dev/disk1s2 partion2.dmg partion2.log

上面指令改以 4K bytes 為單位,應該可以快不少。(k = 10^3, Ki = 2^10, M = 10^6, Mi = 2^20 ......)。

以 ddrescue 進行磁碟資料救援時,除了運氣以外,最需要的就是時間,臨時想中斷它的工作時,就以鍵盤按下「Ctrl C」,如果有留記錄在 log 檔,下次我們再重新執行中斷前所下的指令,就可以接續之前未完成的部份。


以 PhotoRec 挖出消失的資料


「記憶卡上的資料不見了,怎麼辦?」這個也是常被問到的問題,PhotoRec 是解決這個問題的好工具之一,它不但開放原始碼,也可以跨平臺使用。我們可以在下面的網站中找到:

下載與安裝

PhotoRec 現在已經整合在名為 TestDisk 的工具包裡,因此,我們只要下載或安裝 TestDisk 即可找到套件裡的 PhotoRec。Widnows 和 Mac OS X 可以到 PhotoRec 的網站下載,而 Ubuntu 或 EzGo 裡,則可以執行以下指令來安裝 TestDisk:

sudo apt-get install testdisk

使用 PhotoRec 來救消失的資料

PhotoRec 雖然沒有漂亮的圖形界面,也沒有中文,但只要按部就班,幾個步驟即可完成資料搶救行動。它除了可以掃瞄磁碟,也可以掃瞄磁碟或是分割區的映像檔,讀取有問題的故障磁碟可以先用 ddrescue 分析並輸出到映像檔中,再以 PhotoRec 來撈資料,也是蠻不錯的組合。

底下就來看看 PhotoRec 的救援程序:

Step 1.選取要救援的磁碟,並選「Proceed」。


Step 2.選取要救援的分割區,並按「Search」



Step 3.選取分割區是哪一種檔案系統:Windows 選「Other」。



Step 4.選取是要掃瞄的區域

  • 「Free」適合明明有資料卻突然失不見情形,區域較小、掃瞄時間較少。
  • 「Whole」全部掃瞄,會花較多時間。



Step 5.選取救回的資料要儲存在哪裡,確定了就按「C」。


前面步驟都完成後,PhotoRec 就會開始掃瞄並儲存救回的檔案。


要說它有什麼缺點,救回的檔案無法以原始的檔名儲存,屆時得一個個去篩選並更名囉!


除了 ddrescue 、PhtoRec 和 TestDisk ,聽說 foremost 和 Scalpel 也是救資料的好物,底下這一篇可以參考:


有空再來玩一玩。


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket