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


21

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

私の質問は:

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

そして

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


ドライブまたはパーティションのサイズに完全に均等に分割する必要があると考えました。したがって、ターゲットパーティションの正確なバイトサイズを決定し、素因数を取得し、それらの主要な要因のいくつか...
PP。

回答:


18

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

4
OS Xでは、「1M ... 8M」は「1m ... 8m」に小文字にする必要があります。
マットベックマン

1
あなたは... IOを待って過ごし、どのような量を実際の作業であった時間の何量にadditionnalに関する情報を持っているために、DDの前で「時間」を追加することができます
オリヴィエ・デュラック

1
@lain /dev/zeroが生成され、ディスクから読み取る必要はありません。dd if=/dev/zero ibs=1M count=32 obs=$bs of=/var/tmp/outfile@ olivier-dulacをうまく使えば、ddすでに速度を印刷できます。私は価値のある情報を追加time(または/usr/bin/time)するとは思わない。
BUFH

1

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

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

「完璧なサイズ」は、ほぼ常に2のべき乗です。


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.