ddコマンドで「bs」、「count」、「seek」の違いは何ですか?

ddコマンドで「bs」、「count」、「seek」の違いは何ですか?

私はそれを使用する方法を説明する多くのガイドとフォーラムの記事を読んでいますddが、私が注目したことの1つは、人々が常にbs=count=およびスイッチにseek=異なる値を使用することです。

誰かがこれらのスイッチの機能が正確に何であるかを説明し(ページがそれほど詳細ではない)、またはファイル作成、パーティション、および外部ドライブの上書きなど、さまざまなタスクに最適な設定が何であるmanかを説明できますか?/dev/random/dev/zero

答え1

私はこれをマニュアルページよりもよく説明する方法を本当に知りません。

bs=ブロックサイズを設定します(例:bs=1M1MiBブロックサイズ)。

count=このブロック数だけをコピーします(デフォルトは、ddが永久に続くか、入力が使い果たされるまで続きます)。理想的には、ブロックは特定のサイズですが、不完全なbs=読み取りが発生する可能性があるため、特定のcount=量のデータをコピーするために()を使用する場合は、そのcount*bsブロックも提供する必要がありますiflag=fullblock

seek=出力デバイスの先頭に書き込むのではなく、出力でこのブロック数を見つけます。

たとえば、これにより、1MiBのコンテンツがy\n8MiBの出力ファイルにコピーされます。したがって、合計ファイルサイズは9MiBになります。

$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun  3 21:02 outputfile
$ hexdump -C outputfile
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00900000

/dev/randomパーティションに言及して上書きしたので...遅すぎる/dev/randomので時間がかかります。/dev/urandom直接使用することができ、shred -v -n 1迅速かつ一般的にどこでも動作します。

答え2

ddまあ、マニュアルページが詳細ではないと言われたので、移動する人(彼の名前は)に対する理解しやすいたとえ話を使ってその意味を説明します。

   bs=BYTES
          read and write up to BYTES bytes at a time

dd物(箱、花瓶、ベッド、米など)を拾い、必要な場所に移動してから下に置きます。彼は箱の中身を置くまで他の何も選びません。つまり、別のアイテムの山を含む別のボックスを意味します。

今、あなたが旅行当たりの箱にどれだけのものを入れるべきかを彼に正確に知らせなければならないときにすべきことは次のとおりですbs。彼が読み書きするデータ量を設定します。これは、すべての便利で一般的なコマンドでほぼ必須です。

   count=N
          copy only N input blocks

これは彼が移動するボックスの総数を決定します。この場合、ボックスは次のようになります。ディスクのブロック。箱5個を移してもらうと、箱が5個以上であっても箱5個だけ移動することになります。 (箱が5個未満の場合は箱の横にある花瓶を持ってきて合算します。)dd5個だけ話してcountどこかに書けば、彼は自分が見た最初の5個のブロックをコピーして好きなところに使います。

   seek=N skip N obs-sized blocks at start of output

この人は通常、負荷を落とすことができる最初の場所(通常はディスクの先頭)を見つけ、最後まで埋め続けます。まあ、これはddホールで始まるよりも遠い場所、つまりより内側の部屋で始まるという意味です。ただスタートブロックを「スキップする」だけです。

現在行っている作業に応じて、ソースとターゲット、およびそれらを読み書きする形式に応じて、さまざまな組み合わせが必要です。個別に検索してみることをお勧めします。

答え3

たとえば、これまでに記載されていなかった重要な事項の1つは、dd bs=16G使用可能なRAMが16 GB以上でなければならないという要件です。ただし、そうでない場合は、より小さいチャンクサイズbs(例2G:)を使用してからcounts1より大きい数値に設定することで、複数のラウンドを実行できます。 (この場合、8[入力に応じて][最大]16GBの出力が達成されます。)

だから:

 bs x count = data size
2GB x   8   = 16GB

関連情報