ddを使用してドライブを1で埋める方法

ddを使用してドライブを1で埋める方法

ドライブを埋めるのは/dev/urandom非常に遅いようで、次の内容でファイルを作成しましたFF

dd if=/dev/zero ibs=1k count=1000 | tr "\000" "\377" >ff.bin

ドライブをファイルのコピーで埋めたいのですが、次のコマンドは一度だけ書き込みます。

dd if=ff.bin of=/dev/sdb count=10000

ファイルのコピーでドライブを埋める方法やドライブを埋めるより速い方法はありますか?1の?

答え1

以下を実行してください。

tr '\0' '\377' < /dev/zero > /dev/sdb

ドライブがいっぱいになると、エラーで中断されます。

ここで使用することは意味がありませんdd。これを使用して、dd読み取りと書き込みが特定のサイズを持つようにすることができます。ここではそうする理由はありません。tr4または8kiBの読み取り/書き込みを実行すると十分です。

答え2

より速い選択肢のために(疑似ランダムが大丈夫な場合)、またはランダムキーを使用してそれをゼロにする方法(暗号化の場合は0)が/dev/urandomあります。 AES加速がなくてもスピードを簡単に進めることができます。shred -v -n 1cryptsetup/dev/urandom

trそうでなければ、どれだけ早くできるかはわかりませんdd if= | tr | dd of=

ファイルをパターンソースとして使用する方法は次のとおりです。

(while [ 1 ]; do cat file; done) | dd of=...

リモートで効率的に使用するには、ファイルサイズがかなり大きくなければなりません。

重要な場合は、コマンドにcount=追加してください。部分読取りが可能であり、これにより部分ブロックが全ブロックとして計算される。特に大きなブロックサイズ(たとえば)を使用するときに速度が必要な場合は、これを行う必要があります。iflag=fullblockddbs=1M

答え3

不良ブロック -v -w -s -b物理ブロックサイズ-t 0xff /dev/デバイス

ffすべてを4KベースのHDDに書き込んで/dev/sdb再読み込みして、各ffブロックが実際に書き込まれていることを確認する例:

$ sudo badblocks -v -w -s -b 4096 -t 0xff /dev/sdb

答え4

SSD速度をテストするために、コマンドラインで提供されているブロックデバイスに0、1、または英数字を書き込む小さなPerlプログラムを作成しました。人形を呼び出さずにdd直接書き込んで同期します。ここで役に立つかもしれません:

https://github.com/dtonhofer/wild_block_device_filler

ただ次のように実行してください。

wildly_fill_block_device.pl --dev=sdX1 --fillpat 1 --chunksize=1024P --sync

fdatasync() の使用中、各書き込み後にデータをディスクに同期している間、"1024 個の物理ブロック" ブロックとして /dev/sdX1 (バッファリングされていない、Perl の syswrite() を使用) に 0xFF を書き込みます。私のSSDでは約70MiB / sで動作します。

パーティションまたはディスク攻撃を続行する前に確実であるかどうかを尋ねるメッセージが表示されます。

関連情報