繼續從損壞的日誌檔案進行 ddrescue

繼續從損壞的日誌檔案進行 ddrescue

幾天前,我在 180GB 分區中運行了 ddrescue,但 3 天後(99.91% 救援以及我上次檢查時在第 3 階段)系統凍結了,所以我按住關閉按鈕關閉了電腦。

當我開機時,我對映像檔和日誌檔案進行了備份,但是日誌檔案沒有完全複製,它說複製時出錯,但是從日誌檔案複製了106 kb中的104 kb(奇怪的事情) )。

當我再次執行 ddrescue 指令時,出現一則訊息「mapfile discoC.Logfile 中出現錯誤,第 4092 行」。

命令:

sudo ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile

這是我的PasteBin 上的日誌檔案不完整,第 4092 行是最後一行。這是日誌檔案的一部分:

# Mapfile. Created by GNU ddrescue version 1.23
# Command line: ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile
# Start time:   2021-12-15 01:56:33
# Current time: 2021-12-18 20:11:51
# Scraping failed blocks... (forwards)
# current_pos  current_status  current_pass
0xC5A65E00     /               1
#      pos        size  status
0x00000000  0x00003400  -
0x00003400  0x00000200  +
0x00003600  0x00000800  -

0x00003E00  0x00000800  +

0x00004600  0x00000200  -

0x00004800  0x00000200  +

0x00004A00  0x00000400  -

....... (Lot of - and +)........

0xC564C600  0x00000400  +
0xC564CA00  0x00000600  -
0xC564D000  0x00000200  +
0xC564D200  0x00000200  -
0xC564D400  0x00000800  +
0xC564DC00  0x00000400  -
0xC564E000  0x00000600  +
0xC564E600  0x00000200  -
0xC564E800  0x00001A00  +
0xC5650200  0x00000200  -
0xC5650400  0x00000E00  +
0xC5651200  0x00000200  -
0xC

您可以幫助我,以便該過程可以從那裡繼續嗎?

答案1

根據https://www.electric-spoon.com/doc/gddrescue/html/Mapfile-struct.html映射文件(日誌文件)很容易用文字編輯器解釋和編輯。

我傾向於複製它並刪除第 4091 和 4092 行,我希望這將允許 ddrescue 從它記錄的最後一點開始。

它似乎確實失敗了很多。我確實想知道從末尾向後運行它(即添加 -R 開關)是否可以讓您更快地捕獲大量數據。 (嘗試這樣做並沒有什麼壞處)。

答案2

抱歉這麼晚才讀到這個問題。

恢復對遺失的 4092 行有效的內容會很容易:

0xC5651400 <remaining-size> ?

在哪裡:

  • 0xC5651400是新區塊的起始位置,將第 4091 行處的前一個區塊的開始位置0xC5651200與該區塊的大小相加而得到0x00000200
  • ?這意味著這些區塊從0xC5651400尚未嘗試的位置開始,因此必須嘗試對其進行克隆。
  • <remaining size>: 見下文。

如何計算 的值<remaining size>

  • 如果日誌檔案中有第 4093 行:第 4093 行的起始偏移量與第 4092 行提到的計算起始偏移量(即0xC5651400)之間的差異(以十六進位表示)
  • 或者,如果沒有第 4093 行:dev/sdb3分區大小與第 4092 行的起始偏移量之間的差異(即0xC5651400)。

分割區的大小dev/sdb3可以透過終端機命令來了解,例如fdisk -l或透過啟動到不同映像檔的複製過程,並且在沒有日誌檔案的情況下使用不同的日誌檔案。 ddrescue 應顯示類似「About to copy N bytes」的訊息。您可能必須按磁區大小(例如 512)進行分割並轉換為十六進位。

相關內容