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


2

次の2つのコマンドで、どちらもダム1KBファイルを作成するとします。

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番目のケースよりも使用したい、または使用しなければならないような特別なケースはありますか?そしてその逆もありますか?

回答:


7

あなたが基本的に理解しているように、最初のバージョンは1024バイトの1つの読み込みをします、 そして、読み込みから戻ってきたバイト数は増えますが、 2番目のバージョンは1024バイトずつ1バイトずつ読み書きします。 通常のファイルをコピーするときは、ブロックサイズが大きくなります(その結果、入出力数が少なくなります)。 わずかに効率的かもしれません。これはおそらく本当です /dev/urandom 同様に。

しかし使用するときあなたは注意する必要があります dd 特殊ファイル(デバイスなど) 例えば、

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

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

テープドライブについて詳しく説明すると、

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

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

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

最初のブロックだけを読むかもしれません。すなわち、最初の512バイトです。

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


この実例として、両方のddコマンドの束をやってみてください。 1つが1つの読み取り/書き込みを行い、もう1つが1024の連続した読み取り/書き込みを行うことを明確に示します。
agtoever
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.