ddのコマンドオプションbs=1024 count=1とbs=1 count=1024の違いは何ですか?

ddのコマンドオプションbs=1024 count=1とbs=1 count=1024の違いは何ですか?

1KBのダムファイルを作成する次の2つのコマンドを考えてみましょう。

dd if=/dev/urandom of=test.file bs=1024 count=1

dd if=/dev/urandom of=test.file bs=1 count=1024

最初のコマンドはブロック サイズ 1024 バイトとブロック数 1 を使用し、2 番目のコマンドはその逆を使用します。

私の推測では、違いはなく、ブロック サイズの制限は RAM 関連の問題です。つまり、使用可能なメモリよりも大きいブロック サイズを持つことはできません。

2 番目のケースよりも 1 番目のケースを使用したい、または使用しなければならない特別なケースはありますか? またその逆はどうですか?

答え1

基本的に理解されているように、最初のバージョンでは 1024 バイトの読み取りを 1 回実行し、その後、読み取りから返されたバイト数を書き込みますが、2 番目のバージョンでは 1 バイトずつの読み取りと書き込みを 1024 回実行します。通常のファイルをコピーする場合、ブロック サイズが大きいほど (I/O の数が少なくなるため)、わずかに効率が良くなる可能性があります。これは、に/dev/urandomも当てはまる可能性があります。

しかし、特殊なファイル(デバイスなど)で使用する場合は注意が必要ですdd。例えば、

dd if=(どんな入力でも)  の=(磁気テープ装置)  bs=1024 カウント=1

は、1024 バイトのテープ ブロックを 1 つ書き込みます。 は、 dd … bs=1 count=10241 バイトずつのブロックを 1024 個書き込みます。 これらは同じではありません。レコード間のギャップがあるため、1024 個の小さなブロックは 1 つの大きなブロックよりもテープ上で多くのスペースを占め、テープの読み取りで問題が発生する可能性があります。 ご質問に関連して、if=から ( )を読み取ると/dev/random、使用可能な高エントロピー バイト数のみが返されます。 したがって、最初のバージョンでは、1024 バイト未満になる可能性があります。 ただし、1 バイトを読み取ろうとしたときにエントロピー プールが空の場合、読み取りはデータが使用可能になるまでブロック (つまり待機) されるため、2 番目のバージョンでは 1024 バイトが取得されることが保証されます (ただし、任意の長い時間がかかる場合があります)。

テープ ドライブに関する点を詳しく説明します。

dd if=(適切な入力)  の=(磁気テープ装置)  bs=512 カウント=2

512バイトのテープブロックを2つ書き込みます。その後

dd if=(磁気テープ装置)  の=(何でも)  bs=1024 カウント=1

最初のブロック、つまり最初の 512 バイトのみを読み取る可能性があります。

また、(名前付き) パイプでも同じ問題が発生する可能性があります/dev/random。つまり、大きな読み取りでは、使用可能なバイト数のみが返されます。したがって、最初のバージョンでは、1024 バイト未満しか取得できない可能性があります。ただし、一度に 1 バイトずつ読み取ろうとすると、読み取りはデータが使用可能になるまで待機するため、2 番目のバージョンでは 1024 バイト (または少なくとも EOF まで読み取られる) が取得されることが保証されます。

関連情報