Welche Blocksize für dd command?


05.12.2021, 19:42

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.

Woher ich das weiß:Berufserfahrung – Privat und beruflich damit zu tun

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.

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

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.

Woher ich das weiß:eigene Erfahrung – Nutze Linux täglich, sowohl auf Server als auch Desktop
guenterhalt  05.12.2021, 20:05
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.

1

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.