Select Page

Mac OS X: dd schneller und mit Fortschrittsanzeige

by | May 5, 2015 | Mac

Wenn ich weiß, dass die Hardware eigentlich deutlich mehr hergeben sollte, gehört Geduld nicht unbedingt zu meinen großen Stärken.
Konkret bestand die Aufgabe darin, eine Raspbian-Installation von einer SD-Karte auf zwei andere zu transferieren. Da mein Mac nur (oder immerhin noch) einen SD-Kartenslot hat und kein externer Kartenleser zur Verfügung stand, musste der Umweg über das Ziehen eines Images von der Originalkarte und anschließendes Schreiben desselbigen auf die neuen Karten her. Das altbekannte dd ist hierfür das perfekte Werkzeug.
Vorher wird die Karte aber erst mal ausgehängt. In meinem Fall ist das /dev/disk2:

diskutil umountDisk /dev/disk2

Dann geht es mit dd weiter:

dd if=/dev/disk2 of=Image.dd

Da dd von Haus aus keine Fortschrittsanzeige mitbringt, kann man sich unter anderem durch Drücken von “CTRL+t” einen Zwischenstand ausgeben lassen. Die Ausgabe umfasst die aktuelle Systemlast, den Namen und die PID des aktuell im Vordergrund laufenden Prozesses, sowie seine Kernel- und User-Zeiten und im Falle von dd eben auch den aktuellen Fortschritt.
Das sieht dann zum Beispiel so aus:

load: 1.69 cmd: dd 69334 uninterruptible 0.00u 1.97s
13+0 records in
13+0 records out
109051904 bytes transferred in 17.182351 secs (6346739 bytes/sec)

Circa 6 MB/s von einer Class10-SD-Karte? Das muss doch schneller gehen.
Aus der Linuxwelt kommend versuchte ich also als Erstes, per Angabe der Blockgröße (bs=8M) mehr Durchsatz zu erzwingen. Der Lerneffekt hierbei war, dass die BSD-Version von dd unter Mac OS X die Angabe der Einheit nur kleingeschrieben schluckt. Also:

dd if=/dev/disk2 of=raspiImage.dd bs=8m

Damit änderte sich am Tempo aber so gut wie nichts. Bei einer zum Vergleich hergenommenen Class6-Karte macht der Parameter aber doch einen wesentlichen Unterschied. Also wird er beibehalten und fix noch mal das globale Wissen angezapft,  wo sich der Tip findet, anstelle von /dev/diskX doch besser /dev/rdiskX zu verwenden.

dd if=/dev/rdisk2 of=test.dd bs=8m

Kontrolle mit CTRL+t:

load: 1.77  cmd: dd 70036 uninterruptible 0.00u 7.38s
886+0 records in
886+0 records out
7432306688 bytes transferred in 166.815176 secs (44554140 bytes/sec)

Etwas mehr als 42 MB/s. Das ist schon eher die Antwort, die ich suchte 😉
Da das häufige Drücken von CTRL+t und anschließende Umrechnen der Byteangaben in eine menschenverständliche grobe Abschätzung der zu erwartenden Dauer eine Sache ist, die der Computer viel besser und schneller machen kann, bietet sich hierfür das Kommando “pv” an.
Zum Lesen von einer Karte (-s 16g an die Größe der Karte anpassen):

dd if=/dev/rdisk2 bs=8m | pv -petra -s 16g > Image.dd

Um das Image auf eine Karte zurückzuschreiben:

pv -tpreb Image.dd | dd of=/dev/rdisk2 bs=8m

Natürlich gelten die hier gemachten Vorschläge nicht nur für SD-Karten und gegebenenfalls mit Abwandlungen auch für Linuxer 🙂
Quellen:

Solution: dd too slow on Mac OS X


Progress while copying an img file to/from an SD card with OSX/Linux
http://hints.macworld.com/article.php?story=20110810112318227

More posts on the topicMac

Sync pictures older than one year between iPhone and Photo

I don't use the cloud to store my pictures so I have to sync the pictures between my Mac and my iPhone on a regular basis. No big hassle, because usually it works like a charm. The problem I have is that I want more pictures than last year, also I don't want to sync...

Von Fackeln, elektrischen Schafen und Datenpunkten

Hallo und Willkommen im Jahr 2021! Damit sind wir offiziell 2 Jahre nach dem originalen Zeitablauf von Blade Runner welcher 2019 spielt. Hmm, nirgends sind Nexus 6 Modelle die Rumlaufen und von elektrischen Schafen träumen. (Auch keine Flugautos) *seufz*. Egal !!...

Überspringen von Online-Werbung in Videos mit dem Mac

Ich nutze seit vielen Jahren Magnet auf dem Mac um verschiedene Fenster schnell zu positionieren. Was bei vielen anderen Betriebssystemen einfach geht, kann man mit Magnet Add-on einfach nachrüsten. Bei der Neuinstallation von Magnet bin ich auf eine andere App der...

Terraform Changes

Hallo! Was vielen von unseren Lesern entgeht, ist das wir auch in unserem Alltag zwischen der ganzen Softwareschreiber- und Kompilier- Tätigkeiten auch ganz viele virtuelle Maschinen und Container zum testen selbiger Software rauf und runter installieren müssen, und...

Veranstaltungen

Tue 18

Icinga 2 Fundamentals Training | Online

May 18 @ 09:00 - May 21 @ 17:00
Jun 15

stackconf online

June 15 - June 17
Jun 22

Ansible Fundamentals Training | Online

June 22 @ 09:00 - June 24 @ 17:00
Jun 22

Kubernetes Quick Start | Online

June 22 @ 09:00 - 17:00
Jun 25

Ansible AWX (Tower) Training | Online

June 25 @ 09:00 - 17:00