限られたサイズのデバイスをコピーするときにブロックサイズを指定するのはなぜですか?

限られたサイズのデバイスをコピーするときにブロックサイズを指定するのはなぜですか?

オンラインチュートリアルでは、CDROMをISOイメージにコピーするために次のコマンドを使用することをお勧めします。

$ dd if=/dev/dvd of=foobar.iso bs=2048

ブロックサイズを指定する必要があるのはなぜですか?わかると、実は2048年はCDROMイメージの標準論理ブロックサイズしかし、それは指定も有効でもddないようです。bs=count=

どのような状況で問題が発生しますか?いいえ限られたサイズのデバイスで指定またはbs=コピーするとき。count=

答え1

ddはいつデータのコピーに適していますか? (またはread()とwrite()が部分的な場合)使用時に重要な注意事項に注意してくださいcountdd部分チャンクがコピーされる可能性があるため、指定された場合、一部のチャンクがcount不完全であっても、指定されたチャンク数の後に停止します。したがって、bs * countコピーされたバイト数は、指定しない限りバイト数より少なくなる可能性がありますiflag=fullblock

デフォルトのブロックサイズは次のとおりです。DD512バイトです。countあなたの質問が示すように、限られたサイズのデバイスをコピーする必要はなく、実際にはデバイスの一部だけをコピーすることです。

ここで考慮すべき2つの側面は、パフォーマンスとデータ復旧だと思います。

パフォーマンスの観点から、理想的には、ブロックサイズが少なくともデフォルトの物理ブロックサイズ(CD-ROMを読み取るときは2048バイト)と同じか、その倍数になることをお勧めします。実際、デフォルトのキャッシュシステムがコンテンツをバッファリングできるように、より大きなブロックサイズを指定することもできます。ただし、ブロックサイズを増やすにはddより多くのメモリを使用する必要があり、パケットの断片化のためにネットワーク経由でコピーする場合は非生産的になる可能性があります。

データ復旧に関する限り、より小さなブロックサイズを使用すると、故障したハードドライブからより多くのデータを取得できます。これはdd-rescue、このようなプログラムが自動的に実行する操作です。最初は大きなチャンクを読みますが、チャンクにエラーが発生した場合は、より小さいブロックサイズで読み直してください。ddそうしないとブロック全体が失敗するだけです。

答え2

少しの貨物崇拝が歩き回っていますdd。最初は2つのバグがcp原因で問題が発生しました。報告されたブロックサイズが512(Linuxではブロックサイズ1024を使用)ではない場合、ファイルがリーンであると誤って検出され、ターゲットの空のブロックターゲットからコピーしたときに消去されませんでした。デバイスをブロックするスパースファイル。

これに関する参考資料は以下にあります。初期Linuxメーリングリストのアーカイブ

そのため、人々はddがディスクイメージを処理する正しい方法であることに慣れており、cpは途中から除外されました。 ddはデフォルトのブロックサイズ512を使用するため、遅くなります(最新システムのcpよりも遅い)。しかし、どのブロックサイズを使用すべきかは不明です。おそらくあなたの場合、誰かが2048がCD-ROMの「自然な」ブロックサイズであることを読んでください(つまり、CD-ROMは2,352バイトのセクタに分割されており、これには2,048バイトのデータとエラー訂正情報が含まれています)一緒に決めたでしょう。 ddで使用する「正しい」サイズ。実際には(通常)より大きなブロックサイズを使用すると、より速い結果が得られます。実際、GNU cpはこの理由でデフォルトのブロックサイズである64kを使用します。

簡単に言うと: cp /dev/dvd foobar.isoうまくいくでしょう。デフォルトのブロックサイズはdd512です。ほとんどの最新環境でこれを使用しない場合の唯一の影響は、おそらく複製プロセスが遅くなることです。

答え3

ブロックサイズを変更することは、バッファリング量または読み取り/書き込み量を一度に変更するのに最適な方法です。

実際のブロックデバイスか無限/仮想ブロックデバイスかは関係ありません。dd書き込み前にメモリにどれだけ保存したいかについてです。 (一度に読み込むデータ量)と(一度に書き込むデータ量)をbs=設定します。値が高いほど、十分なデータがターゲットに書き込まれ始める前に、より多くの反復が必要です。ibs=obs=obs=ibs=dd

count=また、あなたがしたいこと以外は他に何にも依存しません。ジョブが完了したと見なされるibs=までにかかる「チャンク」(測定基準)の数を制御します。dd

答え4

これ学士=読み書きするブロックサイズを示します。フィールドをそのままにしたり指定したりしないと、同じコピー操作を実行しているように見えますが、それを使用するには隠された事実があります。例えば、

  • 10000000000000000個のファイルがあり、各ファイルのサイズは1〜10kbに過ぎません。
  • 10GBの単一ファイルを保持

最初のケースでは、より小さいブロックサイズを使用するとコピー速度が速くなることがわかりました。後者の場合、ブロックサイズが大きいほどセクタサイズが増え、より少ないsector change数の命令が残り、一般的にI / Oの動作速度が速くなるため、より良い選択です。

関連情報