Mahlzeit,
Dann liest und schreibt dd immer 1MB "am Stück", andernfalls nur sehr kleine Blöcke (512 Byte, also ein Sektor). Und viele kleine Blöcke dauern länger als wenige große.
Warum dann nur 1MB und nicht z.B. 10MB oder 100MB das wäre doch dann noch schneller.
So simpel ist das nicht.
Ich versuche mal eine sehr volkstümliche Erklärung.
deine Ausführungen sind zwar korrekt, haben aber nichts mit der tatsächlichen, physikalischen Sektorgröße einer Festplatte zu tun.
Kommen jetzt die Daten in Blöcken, die zu groß sind, dann muss er diese aufteilen, hat also damit Arbeit.
Nur bedingt. Diese Arbeit erledigen nämlich schon die Treiber für die Festplatte und das Dateisystem.
Welche Blockgröße die richtige ist hängt insbesondere von dem Gerät ab, welches zu beschreiben ist
Genau hier liegt dein Trugschluss, weil die Blockgröße für dd nicht direkt mit der Blockgröße des Speichermediums zu tun hat. Es ist, um es mal salopp zu beschreiben, nur die Größe der Kiste, die ich benutze, um Akten von einem Büro ins andere zu bringen: Benutze ich eine kleine Kiste, muss ich oft hin- und hergehen, das kostet Zeit. Benutze ich eine große Kiste, spare ich Weg ein und kann unterm Strich schneller sein. Das hat aber nichts damit zu tun, wie die Akten in die Fächer im Schrank passen.
dd if=bigfile of=outfile bs=512 204800+0 Datensätze ein 204800+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 6,58058 s, 15,9 MB/s dd if=bigfile of=outfile bs=1024 102400+0 Datensätze ein 102400+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 3,37245 s, 31,1 MB/s dd if=bigfile of=outfile bs=2048 51200+0 Datensätze ein 51200+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 1,77845 s, 59,0 MB/s dd if=bigfile of=outfile bs=4096 25600+0 Datensätze ein 25600+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 0,963437 s, 109 MB/s dd if=bigfile of=outfile bs=8192 12800+0 Datensätze ein 12800+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 0,936332 s, 112 MB/s dd if=bigfile of=outfile bs=16384 6400+0 Datensätze ein 6400+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 0,928353 s, 113 MB/s dd if=bigfile of=outfile bs=32768 3200+0 Datensätze ein 3200+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 0,913329 s, 115 MB/s *** dd if=bigfile of=outfile bs=65536 1600+0 Datensätze ein 1600+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 0,910148 s, 115 MB/s rm bigfile outfile
Wenn du die Blockgröße weiter erhöhst, wirst du feststellen, dass die Brutto-Transferrate noch minimal weiter zunimmt; sie wird asymptotisch gegen einen Idealwert laufen. Nach deiner These müsste aber die Transferrate wieder einbrechen, wenn die Blockgröße deutlich über der des Speichermediums liegt.
Dennoch ein Tipp: Bei modernen Platten würde ich mit einer Blockgröße von 8192 Byte testen, dann halbieren, dann verdoppeln.
Die meisten Festplatten neueren Datums haben AFAIK 4kB große Sektoren.
Also sollte der Test realitätsnäher stattfinden. Wenn man also nicht eine Datei (in ein Dateisystem) schreibt sondern Rohdaten direkt auf die Platte, dann können diese Werte ebenfalls stark abweichen. Sogar von denen, die gemessen werden wenn auf die gleiche Platte in ein Dateisystem geschrieben wird.
Logisch, denn der Dateisystem-Overhead spielt auch eine wichtige Rolle.
Beispiel: Eine USB-Festplatte (USB 2.0) mit 1TB war lange Zeit in FAT32 formatiert. Sie erreichte typische Übertragungsraten von rund 30MB/s. Irgendwann habe ich sie neu mit ext3 formatiert, und plötzlich lag die Transferrate derselben Platte bei etwa 36MB/s.
So long,
Martin
Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
- Douglas Adams, The Hitchhiker's Guide To The Galaxy