ddのbsパラメータに最適な値を決定する方法はありますか?

ddのbsパラメータに最適な値を決定する方法はありますか?

時々オンラインで「デフォルトで 'bs='を設定すると時間がかかりすぎるので必ず設定してください。」などの非科学的な経験に基づいて、「この方法は他の方法より時間がかかるようです」などコメントを表示します。 「先週の時間」がこれを確認しているようです。したがって、「dd」(通常1〜2 GBの範囲)を使用するたびに、指定された値からコピーしたオンラインガイドを半分程度使用します。残りの時間には、「fdisk -l」リストから、遅いと思われるメディア(書き込み中のSDカードなど)の意味のある数字を選択します。

特定の状況(メディアタイプ、バスサイズ、またはその他の重要な要因)の「最適」値を決定する方法はありますか?判断しやすいですか?そうでなければ、90〜95%の目標を達成する簡単な方法はありますか?それとも「512より大きいものを選択してください」は正解ですか?

この実験を直接してみるつもりはしてみましたが(手が多いという点に加えて)どんな要因が答えに影響を及ぼすのかよく分からないので、どうすれば良い実験をデザインできるのかわかりません。

ベストアンサー1

最適なブロックサイズを決定する方法は1つだけで、それがベンチマークです。私はすぐにベンチマークを行いました。テストマシンは、カーネル2.6.32とcoreutils 8.5を搭載したDebian GNU / Linuxを実行しているPCです。関連する2つのファイルシステムは、ハードディスクパーティションのLVMボリュームにあるext3です。ソースファイルサイズは2GB(正確には2040000kB)です。キャッシュとバッファリングを有効にします。私は毎回実行する前にキャッシュクリアを使用しますsync; echo 1 >|/proc/sys/vm/drop_caches。ランタイムにはsyncバッファの最終フラッシュは含まれません。最終sync時間は約1秒です。

実行はsame同じファイルシステムのコピーであり、実行はdiff別のハードドライブ上のファイルシステムのコピーです。一貫性のために報告された時間は、timeユーティリティによって取得された壁時計の時間(秒単位)です。各コマンドを一度だけ実行したので、時間にどれだけ違いがあるのか​​わかりません。

             same   diff
             t (s)  t (s)
dd bs=64M    71.1   51.3
dd bs=1M     73.9   41.8
dd bs=4k     79.6   48.5
dd bs=512    85.3   48.9
cat          76.2   41.7
cp           77.8   45.3

結論として:大きなチャンクサイズ(数メガバイト)が役に立ちますが、それほど変わりはありません(同じドライブのコピーに期待したものよりはるかに小さい)。そしてあまりにも不都合なcatパフォーマンスを出さないでください。この数字は問題を引き起こす価値がcpないと思います。dd一緒に行きましょうcat

おすすめ記事