Das gute alte dd-Kommando ist ein leistungsfähiges Werkzeug zum Erstellen von Disk-Images oder zum Übertragen von Images auf neue Datenträger. Wer eine neue Distribution für den Raspberry Pi ausprobieren, Daten von einer defekten Festplatte retten oder den Rechner von einer HDD auf eine SSD umrüsten möchte, kommt mit dd ans Ziel. Allerdings hat dd einen kleinen Nachteil: Es gibt keine Fortschrittsanzeige. Besonders beim Sichern oder Beschreiben großer Partitionen kann das stören – man weiß nie, wie weit der Vorgang ist oder wie lange er noch dauert. Eine Lösung bietet hier das dd aus dem Department of Defense Computer Forensics Lab.

Ganz auf eine Fortschrittsanzeige muss man bei dd nicht verzichten – mit ein paar Tricks lassen sich Informationen ausgeben. Das ist jedoch mit etwas Aufwand verbunden. Einfacher ist es, direkt eine Alternative wie dcfldd zu verwenden. Das Programm basiert auf dem Quellcode von dd, bringt aber zusätzliche Funktionen mit, die vor allem für die Computer-Forensik nützlich sind – daher stammt es auch aus dem Umfeld des Defense Computer Forensics Lab.

Mit dcfldd lassen sich zum Beispiel während des Kopiervorgangs Hashsummen berechnen, um sicherzustellen, dass Original und Kopie identisch sind. Wer möchte, kann diese Funktion nutzen – muss aber nicht. dcfldd lässt sich auch einfach als Ersatz für dd mit integrierter Fortschrittsanzeige einsetzen. Die Installation ist unkompliziert, da das Tool unter Arch Linux, Debian und Ubuntu direkt aus den offiziellen Paketquellen verfügbar ist.

### dcfldd unter Arch Linux installieren
$ sudo pacman -S dcfldd

### dcfldd unter Debian oder Ubuntu installieren
$ sudo apt install dcfldd

Im folgenden Beispiel sichere ich eine SD-Karte eines Raspberry Pi mit dcfldd auf die Festplatte. Zum Schluss lasse ich mir die MD5-Summe anzeigen. Diese könnte alternativ auch mit md5log=md5.txt in eine Datei geschrieben werden – oder man verzichtet ganz darauf. Während des gesamten Vorgangs zeigt dcfldd laufend den Fortschritt an. Wie ihr seht, ist die Syntax nahezu identisch zu dd – ein Umstieg fällt also leicht.

sudo dcfldd if=/dev/sdd of=~/raspberry-pi.img hash=md5
27136 blocks (848Mb) written.
...
242432 blocks (7576Mb) written. Total (md5): af51683036143ff104f658e1798d447d

242560+0 records in
242560+0 records out

Update: Lange Zeit bot dd keine Möglichkeit, den Fortschritt eines laufenden Kopiervorgangs anzuzeigen – das hat sich inzwischen geändert. Seit Version 8.24 der GNU Coreutils (veröffentlicht 2016) unterstützt dd den Parameter status=progress. Damit zeigt das Tool während der Ausführung regelmäßig an, wie viele Bytes bereits verarbeitet wurden. So erhält man auch beim klassischen dd eine einfache, aber effektive Fortschrittsanzeige. Weitere Informationen zur Funktion findet ihr in diesem Beitrag.

7 Kommentare

  1. Ich verwende für solche Sachen immer ddrescue. Das besitzt auch eine Fortschrittsanzeige und außerdem noch die Möglichkeit eine log-Datei anzugeben. Anhand derer kann man auch eine Wiederherstellung oder eine Kopie von Partitionen einfach fortsetzen, ohne wieder komplett von vorne beginnen zu müssen.
    Zu installieren ist es unter Ubuntu per
    sudo apt-get install gddrescue
    unter Arch per
    sudo pacman -S ddrescue

    PS: Das Setzen von code mit dem ‚pre‘-Tag scheint nicht zu funktionieren…

  2. Au sehr gut! Gerade wenn man viel und oft riesige Odroid- oder RPi-Images schreibt, war das bisher immer „Hmm hab ich noch Zeit für nen Kaffee oder ist’s gleich fertig?“ 🙂

  3. Department of Defense? Hat sich da mal jemand den Code angeschaut um sicher zu gehen dass nicht noch jemand anderes Statusupdates bekommt?

  4. Danke für den ‚cv‘ Tipp. Ich wollte für den gleichen Zweckgerade pv (pipeviewer) vorschlagen, der auch recht viel kann (wenn Größe bekannt ist auch prozentuale Fortschrittsanzeige, verbleibende Zeit, auch für cat, copy, move einrichtbar.
    dd if=/dev/input | pv -brt | dd of=/dev/output

    Mehr dazu siehe z.B. hier: http://www.catonmat.net/blog/unix-utilities-pipe-viewer/ oder Kommentare hier: http://blog.christophersmart.com/2009/11/28/checking-the-progress-of-dd/#comment-5453

  5. Mit pv (pipeviewer) mach ich jetzt so meine zufall-dateien für luks container, mit „wann-fertig-Anzeige“ (ETA):

    size=500; # size in MiB
    dd if=/dev/urandom bs=1M count=$size 2&>/dev/null | pv -tpreb -s ${size}M | dd of=filecontainer_or_BlockDev 2&>/dev/null

  6. Ich habe eine kurze Frage:
    wie kann ich dcflss dazu überreden, die angezeigten Daten aus der Console in ein log zu schreiben.
    Mit einem ergänzten „>/var/log/backup.log“ tut er es bei mir nicht!
    Besten Dank für einen tipp!

Kommentiere den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein