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


Ich weiß, dass eine dd if = / dev / hda = / dev / hdb eine tiefe Festplatte kopiert. Ich habe gehört, dass die Leute in der Lage waren, den Prozess zu beschleunigen, indem sie die Anzahl der Bytes, die gleichzeitig gelesen und geschrieben werden (512), mit der Option "bs" erhöht haben.

Meine Frage ist:

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

und

Warum bestimmt das die ideale Byte-Größe?


21
2018-06-03 17:43


Ursprung


Ich dachte, dass es perfekt gleichmäßig in die Größe des Laufwerks oder der Partition aufgeteilt werden müsste: Daher habe ich versucht, die genaue Byte-Größe der Zielpartition zu bestimmen, die Primfaktoren zu ermitteln und einen relativ großen Block zu bestimmen, der ein Vielfaches von ist einige dieser Primfaktoren ... - PP.
serverfault.com/questions/147935/... || unix.stackexchange.com/questions/9432/ ... || superuser.com/questions/234199/ ... - Ciro Santilli 新疆改造中心 六四事件 法轮功


Antworten:


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

17
2018-06-03 17:54



In OS X sollte "1M ... 8M" auf "1m ... 8m" niedriger sein. - Matt Beckman
Sie könnten eine "Zeit" vor dd hinzufügen, um zusätzliche Informationen darüber zu erhalten, wie viel Zeit Sie damit verbracht haben, auf IO zu warten, und welcher Betrag eine echte Arbeit ist ... - Olivier Dulac
@lain /dev/zero generiert wird, keine Notwendigkeit, es von der Festplatte zu lesen; du könntest dd if=/dev/zero ibs=1M count=32 obs=$bs of=/var/tmp/outfile @ Olivier-Dulac gut, dd schon die Geschwindigkeit drucken; Ich denke nicht time (oder /usr/bin/time) fügen Sie irgendwelche Informationen hinzu. - bufh


Leider hängt die perfekte Größe von Ihrem Systembus, dem Festplattencontroller, dem jeweiligen Laufwerk und den Treibern für jeden einzelnen ab. Der einzige Weg, die perfekte Größe zu finden, besteht darin, verschiedene Größen auszuprobieren. Gute Warnung, dass einige Geräte nur eine Blockgröße unterstützen, obwohl dies selten ist, und normalerweise machen Treiber den Unterschied aus.

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

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


1
2018-02-19 14:22





Ich kann mich dafür verbürgen, das Ergebnis der Durchführung eines Tests auf dem verwendeten Gerät zu messen, bevor es irgendwann verschwendet wird. Ich habe mich dummerweise nicht darum gekümmert und nach dem Messen, dann habe ich die Blockgröße meiner DD-Dauer einer 590Gb-Übertragung halbiert. Derselbe BS-Wert hätte die Zeit nur um 20% verringert, wenn eine andere Caddy / Laufwerk-Kombination verwendet wird.


0