我正在使用舊的隨機數據覆蓋我的硬碟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 將讀取自己的日誌檔案並自動復原。它還首先簡單地複製所有內容,並且由於它可以從日誌檔案中恢復,因此您可以告訴它「返回並更努力地嘗試」其他內容。