dd コマンドに最適なバイト サイズを決定する方法

dd コマンドに最適なバイト サイズを決定する方法

私はdd if=/dev/hda of=/dev/hdbハードドライブのディープコピーオプションを使用して、一度に読み書きされるバイト数 (デフォルト: 512)を増やすことで、プロセスを高速化できたという話を聞いたことがあります。bs

私の質問は次のとおりです:

  • ハードドライブからコピーする場合の理想的なバイト サイズを決定するものは何ですか?

そして

  • なぜ理想的なバイト サイズが決まるのでしょうか?

答え1

としてクリス・S書いたこの答え最適なブロック サイズはハードウェアに依存します。私の経験では、常にデフォルトの 512 バイトよりも大きくなります。raw デバイスで作業している場合、その上にあるファイル システム ジオメトリは影響しません。dd のブロック サイズを「最適化」するために、以下のスクリプトを使用しました。

#!/bin/bash
#
#create a file to work with
#
echo "creating a file to work with"
dd if=/dev/zero of=/var/tmp/infile count=1175000

for bs in  1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1M 2M 4M 8M 
 
do
        echo "Testing block size  = $bs"
        dd if=/var/tmp/infile of=/var/tmp/outfile bs=$bs
        echo ""
done
rm /var/tmp/infile /var/tmp/outfile

答え2

残念ながら、最適なサイズは、システム バス、ハード ドライブ コントローラ、特定のドライブ自体、およびそれぞれのドライバによって異なります。最適なサイズを見つける唯一の方法は、さまざまなサイズを試し続けることです。一部のデバイスは 1 つのブロック サイズしかサポートしていないことに注意してください。これはまれですが、通常はドライバが違いを補います。

私の場合、Adaptec SAS RAID コントローラ、4x PCIe、64 ビット FreeBSD 8.0-STABLE に接続された WDC (8 MB キャッシュ) SATA ドライブでは、ブロック サイズ 2^15 または 2^16 が最適であることがわかりました。ただし、私の安価な古いサム ドライブでは、サイズ 2^10 が最も高速であるようです。

「完璧なサイズ」は、ほとんどの場合、2 の累乗です。

答え3

時間を無駄にする前に、使用中のデバイスでテストを実行して結果を測定することのメリットを保証できます。愚かにも私は気にせず、測定した後、ブロック サイズを調整して、590Gb 転送の DD 期間を半分に削減しました。同じ BS 値でも、別のキャディ/ドライブの組み合わせを使用すると、時間は 20% しか短縮されませんでした。

関連情報