恢復 dd 並讀取錯誤,跳過/查找數字

恢復 dd 並讀取錯誤,跳過/查找數字

我正在嘗試使用以下命令從損壞嚴重的 CD 上複製資料:

dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress

但是,「of」裝置已斷開連接,並且 dd 停止了(輸出如下)。

...
dd: error reading '/dev/sr1': Input/output error
1074889+17746 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s
dd: writing to 'IDT.img': Input/output error
1074889+17747 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s

我可以繼續:

dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress seek=1092635 skip=1092635

或者查找/跳過數字應該是兩者1092636,或者跳過/查找應該彼此不同,或者完全不同?

PS 我知道我可能使用了錯誤的命令,例如 ddrescue 可能更好。但我現在可能被 dd 困住了(?)。我預計輸出文件方面不會再出現任何錯誤。

答案1

您遇到了讀取錯誤,因此這些選項conv=sync,noerror幾乎肯定會更改資料流,不幸的是使您的輸出檔案毫無價值或至少是不準確的副本。

每次輸入出現錯誤讀取(短讀取)時,該conv=sync選項都會以 NUL 位元組填滿該區塊。該dd命令將嘗試從中斷處繼續輸入流,但輸出現在插入了未知數量的 NUL 位元組。

您應該停止使用dd並使用ddrescue,它是為了從壞媒體中恢復資料而創建的。

類似主題的參考答案

答案2

使用解救。它可以讀取損壞的介質並「保留」損壞的部分,而 dd 則不能。

想像一下你的原始數據:

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c d e f g h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

損壞後 ( X) 它們看起來像這樣:

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c X X X X h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

dd conv=sync,noerror 將讀取以下內容:

  +-+-+-+-+-+-+-+-+
  |a b c h i j k l|
  +-+-+-+-+-+-+-+-+

ddrescue 將讀取什麼內容。

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c 0 0 0 0 h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

正如您所看到的,dd 讀取的原始訊息是傾斜的,如果您以這種方式產生檔案系統映像,它將變得不可用。您可以安裝 Ddrescue 映像而不會出現任何問題,這將幫助您像往常一樣存取未損壞的數據,並且可以輕鬆地將損壞的數據放在一邊並進行下一步處理。

相關內容