我啟動 ddrescue 從我的 NAS 恢復故障的 2TB WD 硬碟。雖然我指定了一個日誌文件,但不幸的是,我是從可啟動閃存驅動器以試用模式運行ubuntu,並且沒有將日誌文件寫入單獨安裝的驅動器,因此當電源中斷到11% 左右時,我發現我丟失了日誌檔。
根據手冊第 14 章,生成模式看起來可能有效,所以我運行了:
ddrescue --generate-mode infile outfile mapfile
我要恢復的驅動器是一個全新的驅動器,因此我希望它能夠正常工作,因為驅動器上不存在舊資料。
我現在正在運行安裝到 SSD 的 Ubuntu,因此我使用生成的映射檔案再次運行 ddrescue:
ddrescue -f -n -r1 /dev/sda /dev/sdb /tmp/ddrescue.log
這似乎在很大程度上發揮了作用,因為恢復過程在 11.5% 左右重新開始,就在它停止的地方。但我擔心的是,在崩潰之前,ddrescue 已識別出一個讀取錯誤,並顯示了大約20MB 的未修剪區塊,但在使用新的映射檔案啟動該過程時,有0 個標記的讀取錯誤和0 個未修剪的區塊。現在運行 8 小時後,它顯示 2 個錯誤和 29696B 未修剪的區塊,但我假設這些是新的讀取錯誤,因為 ddrescue 沒有查看已標記為已救援的舊資料部分。
ddrescue 是否會在後續傳遞中發現原始讀取錯誤,或者該錯誤是否已永久消失,而查找並重試這些區塊的唯一方法是使用新的映射檔案從頭開始一切?
我希望從舊驅動器中恢復盡可能多的內容(如果不是全部),因此如果有必要,我願意重新開始。
感謝您對此的任何幫助。
答案1
關於--generate-mode
:
在某些情況下,Ddrescue 可以從 中產生近似
mapfile
,infile
和 中的(部分)副本outfile
,這幾乎與精確的 一樣好mapfile
。它透過簡單地假設包含全零的扇區沒有被拯救來實現這一點。
(來源)
第一次嘗試時,目標磁碟中與來源磁碟錯誤磁區相對應的磁區未寫入。同樣,與已跳過的內容相對應的磁區也不會被寫入。假設目標磁碟從尚未寫入的磁區傳回全零,則稍後ddrescue --generate-mode
將所有這些碎片歸類為「未救援」。
--generate-mode
無法判斷某個磁區是否全是零,因為它對應於來源磁碟的未嘗試磁區、未修剪、未刮傷或壞磁區;或已被複製但碰巧包含全零的健康扇區。它所知道的是,如果有一個扇區全是零,那麼outfile
它可能還沒有被讀取,而或許它可以被讀取。--generate-mode
在建立一個近似值時,簡單地將此類磁區分類為未嘗試,因此實際使用該磁區的mapfile
未來將嘗試(或重試)讀取該磁區。ddrescue
mapfile
最終ddrescue
可能會不必要地重新讀取某些扇區;已讀取但碰巧包含全零的扇區,因此看起來--generate-mode
像未嘗試的扇區。如果有的話,這通常會帶來輕微的不便。
您不需要從頭開始,除非啟動時目標磁碟上存在非零磁區。這些部門會讓人--generate-mode
相信它們是被拯救的數據,即使它們不是。您認為您的目標磁碟(作為全新磁碟)僅包含零。如果你的信念是正確的,那麼你不需要從頭開始。
如果您的信念是正確的,則第一次嘗試的錯誤扇區將被歸類為--generate-mode
“未獲救”,並且您的終極(仍在運行)ddrescue
已嘗試或即將嘗試再次讀取它。