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

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

古き良き方法を使用して、ハードドライブをランダムなデータで上書きしていますdd:

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

これは 2TB アレイですが、私の MacBook (Linux を実行しています) は、約 3.7MB/秒でしかデータを書き込めません。自宅のデスクトップでは 20MB/秒だったのに、これはかなり残念なことです。今夜家に帰ったら、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

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

あなたの場合、それは確かに に渡す必要があるブロック値です。おそらく、速度を向上できるかどうかを確認するために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

これを再開するには、次の 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最初の例では、ではなく を使用する理由は59012、 が、59011中断される前に完全にコピーされたブロック サイズのレコードの数であるためです。(レコード出力)。

答え4

可能であれば、

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

ログ ファイルを from または to のどちらにも入れないでください。Ctrl + C などを押す必要がある場合は、ddrescue が独自のログ ファイルを読み取り、自動的に再開します。また、最初にすべてを簡単にコピーし、ログ ファイルから再開できるため、他の部分については「戻ってもっと頑張る」ように指示できます。

関連情報