Welche Blocksize für dd command?
Der default liegt bei 512, jedoch sind bei manchen Anleitungen die Blocksize immer anders mal 4k, mal 1024 etc., da 512 viel zu lange dauert.
Welches ist denn jetzt der optimale Wert?
Um mein 16GB USB-Stick mit nullen zu überschreiben habe ich die größer auf 4k gestellt, gäbe es bessere Möglichkeiten oder passt das und kann man die optimale größe erechnen?
6 Antworten
Im Arch Wiki sind zu dem BS Parameter folgende Quellen verlinkt, vielleicht helfen sie dir ja.
http://blog.tdg5.com/tuning-dd-block-size/
https://www.mail-archive.com/eug-lug@efn.org/msg12073.html´
Ich probiere es eigentlich meistens einfach aus oder nehme 1M oder so, so oft nutze ich dd nicht das ich mich tiefer damit beschäftigt hätte.
Ich kenne den Code von dd nicht, kann also nur vermuten.
dd wurde entworfen, als die RAM-Größe eines Computers noch in kilo-Byte angegeben wurde.
Man konnte also viel weniger Daten aus einer Quelle in den RAM laden, um sie an dei Senke weiterzugeben.
Um optimal arbeiten zu können wurde also mit der Blocksize eine Anpassung an den Computer geschaffen.
Es gibt auch noch einen weiteren Grund. Mit dd kann man gezielt eine vorgegebene Datenmenge auf eine Senke schreiben.
dd if=/dev/zero of=<Datei> bs=2 count=1 schreibt genau 2 Byte in die <Datei>.
Bei heutigen Computern spielt der RAM keine Rolle mehr.
Jetzt geht es um Zeit. Je größer die Blockgröße, um so weniger Zeit wird benötigt. (Das Programm muss nicht nach jedem Block "neu Luft holen").
Bei kleinen Datenmengen benutze ich die Standard-Einstellungen. Beim Beschreiben eines USB-Sticks mit einem 4GByte ISO benutze ich bs=4096.
Aber auch das bringt bei CPU-Taktfrequenzen im GHerz-Bereich kaum eine spürbare Zeiteinsparung.
Das kommt drauf an, ob du eher viele kleine Dateien oder grosse Dateien drauf speicherst. Hast du eine Blocksize von 4K und schreibst dann eine Datei mit sagen wir mal 10 Byte, so braucht diese Datei trotzdem 4K auf dem Stick. Für grössere Dateien hast du dafür dann aber etwas schnellere Performance, da weniger Blöcke gelesen werden müssen.
Hast du eine Blocksize von 4K und schreibst dann eine Datei mit sagen wir mal 10 Byte, so braucht diese Datei trotzdem 4K auf dem Stick.
das bezweifle ich. dd schreibt dann auch nur die 10 Byte. Die belegen auf dem Datenträger natürlich einen so großen Block, wie durch das Filesystem vorgegeben ist.
Das Problem, es gibt bei USB unterschiedliche Protokolle, sodaß die Ermittlung der optimalen IO-Größe gar nicht so einfach ist.
Du könntest Dir mal im sysfs die Parameter anschauen (nennt sich IO hinting), die Werte könnten aufschlußreich sein.
Ich habs gerade mit einem Script (siehe Link) getestet:
https://github.com/tdg5/blog/blob/master/_includes/scripts/dd_obs_test.sh
block size : transfer rate
512 : 180 MB/s
1024 : 243 MB/s
2048 : 293 MB/s
4096 : 332 MB/s
8192 : 354 MB/s
16384 : 362 MB/s
32768 : 367 MB/s
65536 : 380 MB/s
131072 : 381 MB/s
262144 : 381 MB/s
524288 : 378 MB/s
1048576 : 378 MB/s
2097152 : 379 MB/s
4194304 : 381 MB/s
8388608 : 378 MB/s
16777216 : 368 MB/s
33554432 : 376 MB/s
67108864 : 382 MB/s
Wie man sieht ändert sich die Geschwindigkeit ab 64k (65536) nicht mehr wirklich, d.h. die optimale Blocksize wäre 64k (bei meinem System).
Persönlich habe ich bisher meist 1M oder mehr benutzt.