dd Zauberei

Bei der Arbeit mit eingebetteten Systemen kommt des des Öfteren vor, dass man SD-Karten komplett sichern oder aus einem Image wiederherstellen darf. Dazu kommt in vielen Fällen das kleine Tool dd zum Einsatz. Dessen Basisaufruf sieht klassisch so aus:

dd if=sd-card-backup.img of=/dev/disk3

An vielen Stellen findet man zusätzlich den Parameter bs, der die Größe eines pro Schritt zu lesenden/schreibenden Blocks angibt.

dd if=sd-card-backup.img of=/dev/disk3 bs=128k

Die Wahl des richtigen Wertes hat wesentlichen Einfluss auf die Lese-/Schreibgeschwindigkeit. Da es bei SD-Karten und den zugehörigen Lesegeräten nicht gerade einfach ist, die geeignete Blockgröße aus den technischen Daten zu ermitteln, habe ich dies empirisch getan1 und die Ergebnisse nachfolgend zusammengefasst.

Als Testgeräte nutzte ich den internen Reader eins MacBook Pro 5,5 und einen externen Reader via USB am MacBook und an einem Embedded-PC mit Intel i915-Chipsatz. Die Ergebnisse konnte ich auch auf einem MacBook Pro 11,1 nachvollziehen. Die Testdatei hat eine Größe von 2962227200 Byte. Als SD-Karte nutzte ich ein 8GB-Modell von SandDisk2.

Ergebnisse#

Zuerst meine Empfehlung. Details dann weiter unten.

Reader Blockgröße
MacBook intern =64k
MacBook extern =128k
Linux-PC extern ≥4k

Einzelmessungen#

In der Tabelle ist jeweils die Zeit für das Schreiben der 2962227200 Byte angegeben.

Blockgröße Mac intern Mac extern Linux-PC
64m 204,554
32m 240,991870
256k 197,484939
132k 198,999506
128k 225,306702 157,124544 202,456
96k 239,637887
64k 161,723193 159,997837 202,252
32k 183,919347
16k 361,240283 201,689
12k 202,348
8k 201,564
4k 200,869

  1. Vorerst nur für das Schreiben auf eine SD-Karte. ↩︎

  2. SanDisk Ultra SDHC ↩︎