web-dev-qa-db-ja.com

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

Dd if =/dev/hda of =/dev/hdbを実行すると、ハードドライブの深いコピーができることを知っています。 「bs」オプションを使用して一度に読み書きされるバイト数(512)を増やすことで、プロセスを高速化できると聞いたことがあります。

私の質問は:

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

そして

なぜそれが理想的なバイトサイズを決定するのですか?

23
James T

Chris 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
19
user9517

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

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

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

1
Chris S

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

0
Bernster