時々オンラインで「デフォルトで '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
!