將 dd 的控制台輸出複製到檔案以及控制台

將 dd 的控制台輸出複製到檔案以及控制台

我正在嘗試使用 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

直接回答你的問題:

  1. 您可能遇到了緩衝問題...您可能會看到很多行同時出現,然後就什麼都沒有了 - 看看unbuffer
  2. sudo可能會要求輸入密碼,但您將提示重定向走了......所以什麼也沒有發生。

相關內容