ドライブを埋めるのは/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
読み取りと書き込みが特定のサイズを持つようにすることができます。ここではそうする理由はありません。tr
4または8kiBの読み取り/書き込みを実行すると十分です。
答え2
より速い選択肢のために(疑似ランダムが大丈夫な場合)、またはランダムキーを使用してそれをゼロにする方法(暗号化の場合は0)が/dev/urandom
あります。 AES加速がなくてもスピードを簡単に進めることができます。shred -v -n 1
cryptsetup
/dev/urandom
tr
そうでなければ、どれだけ早くできるかはわかりませんdd if= | tr | dd of=
。
ファイルをパターンソースとして使用する方法は次のとおりです。
(while [ 1 ]; do cat file; done) | dd of=...
リモートで効率的に使用するには、ファイルサイズがかなり大きくなければなりません。
重要な場合は、コマンドにcount=
追加してください。部分読取りが可能であり、これにより部分ブロックが全ブロックとして計算される。特に大きなブロックサイズ(たとえば)を使用するときに速度が必要な場合は、これを行う必要があります。iflag=fullblock
dd
bs=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で動作します。
パーティションまたはディスク攻撃を続行する前に確実であるかどうかを尋ねるメッセージが表示されます。