
我正在嘗試使用 dd 對硬碟進行映像,但出現 I/O 錯誤。因此,我添加了“noerror”參數,但我想追蹤錯誤以便嘗試恢復。
我目前的嘗試如下:
sudo dd if=/dev/sdb bs=1M conv=sync,noerror of=output.img 2>&1 | tee output.log
這樣,output.img和output.log都被創建,但大小都是0位元組,並且當終止dd時,沒有輸出回顯到終端。
我更願意在使用 ddrescue 等工具之前嘗試使用“noerror”選項進行 dd,因為我對 dd 更熟悉。
此外,該磁碟機包含單一 NTFS 分割區,因此我們將不勝感激有關如何恢復遺失位元的 NTFS 分割區的指導(該磁碟機為 500GB,我遇到的第一個錯誤約為 30GB)。
謝謝!
答案1
我強烈建議你使用ddrescue
- 不要迴避適合該工作的工具,運行它並不難,而且會給自己減輕一些壓力。
調用很簡單:
第一次運行:
-p
- 預先分配空間-b 4M
- 使用大扇區來提高速度
ddrescue -p -b 4M ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}
後續運行:(與 不同的是dd
,您可以多次運行它,並且它將通過引用日誌文件從中斷處繼續)
-b 512
- 使用較小的磁區大小來嘗試填補空白-r 10
- 使用多次重試
ddrescue -b 512 -r 10 ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}
具有讀取錯誤的部分將(預設)包含零,並且您最終將獲得類似於以下內容的日誌檔案:
# pos size status
0x00000000 0x00014E00 +
0x00014E00 0x00000200 -
0x00015000 0x00005800 +
0x0001A800 0x00000200 -
0x0001AA00 0x00028000 +
0x00042A00 0x00000200 -
0x00042C00 0x00125400 +
標記的線+
是沒有錯誤的區域,標記的線-
是有錯誤的區域。
您可能需要查看以下一些選項,具體取決於讀取錯誤的性質:
-d, --direct
use direct disc access for input file
-K, --skip-size=<min>[,<max>]
initial size to skip on read error [64 KiB]
-M, --retrim
mark all failed blocks as non-trimmed
-O, --reopen-on-error
reopen input file after every read error
-r, --retry-passes=<n>
exit after <n> retry passes (-1=infinity) [0]
-R, --reverse
reverse the direction of all passes
直接回答你的問題:
- 您可能遇到了緩衝問題...您可能會看到很多行同時出現,然後就什麼都沒有了 - 看看
unbuffer
sudo
可能會要求輸入密碼,但您將提示重定向走了......所以什麼也沒有發生。