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 |