我正在嘗試使用以下命令從損壞嚴重的 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 映像而不會出現任何問題,這將幫助您像往常一樣存取未損壞的數據,並且可以輕鬆地將損壞的數據放在一邊並進行下一步處理。