So ermitteln Sie die beste Bytegröße für den Befehl dd

21

Ich weiß, dass das Ausführen einer dd if = / dev / hda von = / dev / hdb eine tiefe Festplattenkopie bewirkt. Ich habe gehört, dass die Benutzer den Prozess beschleunigen konnten, indem sie die Anzahl der gleichzeitig gelesenen und geschriebenen Bytes (512) mit der Option "bs" erhöhten.

Meine Frage ist:

Was bestimmt die ideale Bytegröße für das Kopieren von einer Festplatte?

und

Warum bestimmt das die ideale Bytegröße?

James T
quelle
Ich dachte, dass es sich perfekt gleichmäßig in die Größe des Laufwerks oder der Partition aufteilen müsste: Daher habe ich versucht, die genaue Bytegröße der Zielpartition zu bestimmen, die Primfaktoren zu ermitteln und einen einigermaßen großen Block zu bestimmen, der ein Vielfaches von ist einige dieser Hauptfaktoren ...
PP.

Antworten:

18

Wie Chris S sagt, ist die optimale Blockgröße hardwareabhängig. Nach meiner Erfahrung ist es immer größer als die Standard 512 Bytes. Wenn Sie mit Raw-Geräten arbeiten, hat die darüber liegende Dateisystemgeometrie keine Auswirkungen. Ich habe das folgende Skript verwendet, um die Blockgröße von dd zu optimieren.

#!/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
user9517 unterstützt GoFundMonica
quelle
4
In OS X sollte "1M ... 8M" auf "1m ... 8m" gesenkt werden.
Matt Beckman
1
Sie können eine "Zeit" vor dd einfügen, um zusätzliche Informationen darüber zu erhalten, wie viel Zeit auf IO gewartet wurde und was echte Arbeit ist ...
Olivier Dulac,
1
@lain /dev/zerowird generiert, Sie müssen es nicht von der Festplatte lesen. du könntest dd if=/dev/zero ibs=1M count=32 obs=$bs of=/var/tmp/outfile@ olivier-dulac auch ddschon die geschwindigkeit drucken; Ich glaube nicht, dass time(oder /usr/bin/time) irgendwelche Informationen wert sind.
Bufh
1

Leider hängt die perfekte Größe von Ihrem Systembus, dem Festplattencontroller, dem jeweiligen Laufwerk selbst und den Treibern für jedes Laufwerk ab. Die einzige Möglichkeit, die perfekte Größe zu finden, besteht darin, verschiedene Größen auszuprobieren. Faire Warnung, dass einige Geräte nur eine Blockgröße unterstützen, obwohl dies selten ist, und in der Regel machen Treiber den Unterschied trotzdem aus.

Ich finde, dass eine Blockgröße von 2 ^ 15 oder 2 ^ 16 am besten für meine WDC-SATA-Laufwerke (8 MB Cache) geeignet ist, die an einen Adaptec SAS-RAID-Controller, 4x PCIe, 64-Bit-FreeBSD 8.0-STABLE angeschlossen sind. Aber für meinen billigen alten USB-Stick scheinen Größen von 2 ^ 10 am schnellsten zu sein.

Die "perfekte Größe" ist fast immer eine Zweierpotenz.

Chris S
quelle
0

Ich kann für das Verdienst bürgen, das Ergebnis der Durchführung eines Tests an dem verwendeten Gerät zu messen, bevor Zeit verschwendet wird. Ich habe mich dummerweise nicht darum gekümmert, und nach dem Messen und Anpassen der Blockgröße habe ich die DD-Dauer einer 590-GB-Übertragung halbiert. Derselbe BS-Wert hätte nur die Zeit um 20% reduziert, wenn eine andere Caddy / Drive-Kombination verwendet worden wäre.

Bernster
quelle