恢復整個磁碟的DD

恢復整個磁碟的DD

我正在使用舊的隨機數據覆蓋我的硬碟dd

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512

這是一個2TB 陣列,而我的MacBook(運行Linux,好嗎?)只能以3.7MB/s 左右的速度寫入數據,這非常可悲,因為我看到我家裡的桌上型電腦的寫入速度為20MB/s。今晚回家的時候,我想停下dd這裡的跑步,把它帶回家,看看用更強大的機器一夜之間能取得什麼樣的進步。

我一直在使用一個簡單的循環來監控進度:

while true; do kill -USR1 $PID ; sleep 10 ; done

輸出如下圖所示:

464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s

dd如果我在家恢復通行證,我該如何重新啟動?我知道這個seek參數,但是我應該將它指向什麼,記錄號碼還是位元組數?

答案1

正如@don_crissti 已經評論的那樣,只需使用seek=即可恢復。

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971

GNU dd也支援以位元組為單位查找,因此無論區塊大小如何,您都可以準確恢復:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
   seek=238048755782 oflag=seek_bytes

即使對於像/dev/urandom.

如果您正在尋找更快的替代方案,您可以cryptsetup plainOpen使用隨機密鑰並將其歸零,它應該快/dev/urandom一個數量級(不使用 AES-NI),甚至全速運行(使用 AES-NI)。

shred -n 1如果偽隨機資料足以滿足您的用例,您也可以使用。shred即使在非常慢的機器上,也應該能夠利用完整的磁碟速度。

答案2

只是提醒那些想要複製而不只是隨機化磁碟的人(這不是common) : 你可以用它skip=BLOCKS來啟動閱讀在適當的位置,並seek=BLOCKS開始寫作在正確的位置。兩個選項都使用區塊,而不是位元組。中斷/重新啟動時,建議刪除一堆塊以防萬一。通常值得將bs數值提高到 512 以上,因為如果連續讀取大量數據,可以獲得更好的效能。

就您而言,它確實是您需要傳遞給的區塊值seek。也許您應該嘗試調整bs以查看是否可以提高速度,因為/dev/random應該很快(當沒有可用熵時,偽隨機和非阻塞)

答案3

克隆磁碟:

擴展於從這個線程回答,這就是克隆整個磁碟並恢復的方式:

此範例針對從 5400rpm 旋轉磁碟機複製到特定係統上的 SSD 進行了最佳化。 gdd代表GNU dd

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

我可以透過以下兩種方式之一恢復此操作:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

或者:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

59011在第一個範例中,我們使用and not 的原因59012是因為59011有多少區塊大小的記錄在中斷之前被完全複製。 (記錄出來)。

答案4

如果可以的話,使用

#ddrescue from to logfile
ddrescue /dev/sda /dev/sdb logfile

保持日誌檔案遠離 from 或 to...,如果您必須按 ctrl-c 或其他鍵,ddrescue 將讀取自己的日誌檔案並自動復原。它還首先簡單地複製所有內容,並且由於它可以從日誌檔案中恢復,因此您可以告訴它「返回並更努力地嘗試」其他內容。

相關內容