ディスク全体のDDを再開する


10

古き良きものを使用してハードドライブをランダムデータで上書きしています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
レコード番号を使用しますか?それはブロック書き込み数と同じですか?
Naftuli Kay、2015

2
ブロック数=合計バイト数/ブロックサイズ、理論的には238048755782/512 = 464938976ですが、一部のレコードがいくつかあるので、安全のために数からいくつかのブロックを差し引きます。例seek=464938960
don_crissti

回答:


8

@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非常に遅いマシンでも、ディスク全体の速度を利用できるはずです。


plainOpen今まで知りませんでした。すごい!2TBドライブのスクランブルは、12 GBを超えるドライブでは256GB /dev/urandomでしたが、を使用すると約4時間で完了しました。
Naftuli Kay、2015

3

(ないだけでランダム化するディスクではなく、コピーしたい人のためだけのリマインダーことをあなたが使用することができます。一般的な)skip=BLOCKSを開始するために読んで適切な位置に、そしてseek=BLOCKS開始する書き込みを正しい位置に。どちらのオプションも、バイトではなくブロックを使用します。中断/再起動する場合は、念のため、一連のブロックを削除することをお勧めします。bs連続して大量のデータを読み取るとパフォーマンスが向上するため、通常は512を超える値を増やす価値があります。

あなたの場合、それは確かにあなたが渡す必要があるブロック値ですseek。おそらくbs、速度を上げることができるかどうか、速度を上げることができるかどうかを調整するように調整する/dev/random必要があります(使用可能なエントロピーがない場合は、疑似ランダムで非ブロッキング)。


0

dd512バイトのような小さなブロックサイズでは、ディスクの最大スループットよりもかなり遅くなる可能性があります。良好なパフォーマンスを得るには、より大きなブロックサイズを使用します(ちょっとしたことを考えれば、数MB)。または、使用しますcat。Linuxでは、単一のディスクが関与する場合、最適なブロックサイズと同じくらい高速であることがわかりましcatdd(OSXでも同様かどうかはわかりません)。

どこまでcat到達したかを確認するにはlsof -p1234、1234がプロセスのプロセスIDであるところをcat実行します。

ポジションから再開するには、

{ dd bs=1 seek=123456; cat /dev/urandom; } >/dev/disk/…

ここで、123456はバイト単位のオフセットです。


0

ディスクのクローン:

このスレッドからのこの答えを拡張すると、これはディスク全体を複製して再開する方法です:

この例は、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

これを再開するには、次の2つの方法があります。

> 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なくを使用する理由は5901259011中断される前に完全にコピーされたブロックサイズのレコードの数です。(記録)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.