Das gute alte Dd-Kommando ist ein leistungsfähiges Werkzeug zum Erzeugen von Diskimages oder zum Einspielen von Images auf einem neuen Datenträger. Wer eine neue Distribution für den Raspberry Pi ausprobieren, Daten von einer kaputten Festplatte retten oder seinen Rechner von einer Festplatte auf eine SSD umrüsten möchte, der kommt mit Dd zum Ziel. Nun hat Dd jedoch einen kleinen Nachteil: Das Programm kennt keine Fortschrittsanzeige, was besonders beim Sichern oder Schreiben großer Partitionen ein Problem darstellen kann. Man weiß nie, wie weit Dd schon ist und wie lange der Prozess noch dauern kann. Diese bietet allerdings das Dd vom Department of Defense Computer Forensics Lab.

Ganz auf eine Fortschrittsanzeige muss man bei Dd aber auch nicht verzichten, mit ein paar Tricks lassen sich die Infos Dd herauskitzeln. Allerdings ist dies immer mit einem zusätzlichen Aufwand verbunden. Von daher bietet es sich an, gleich auf eine Dd-Alternative wie Dcfldd zu setzen. Das Programm setzt auf den Quellcode von Dd auf, baut allerdings ein paar Funktionen ein, die für Computer-Forensiker nützlich sind — aus diesem Grunde stammt es auch aus dem Dunstkreis des Defense Computer Forensics Lab.

So kann man sich zum Beispiel on-the-fly Hashsummern erzeugen lassen und so nachweislich sicher stellen, dass Original und Kopie identisch sind und nicht verändert wurden. Den ganzen zusätzlichen Spaß könnt ihr allerdings auch weglassen und Dcfldd einfach nur als Ersatz für Dd mit Fortschrittsanzeige verwenden. Die Installation ist mit wenig Aufwand verbunden, da ihr das Programm bei Arch Linux und auch bei Debian oder Ubuntu generell direkt aus den Paketquellen bekommt.

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

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

Als Beispiel sichere ich hier eine Speicherkarte eines Raspberry Pi mit Dcfldd auf die Festplatte. Zu Demonstrationszecken lasse ich mir abschließend noch die MD5-Summe ausgeben, ihr könntet sie allerdings auch noch mittels md5log=md5.txt auf die Festplatte schreiben lassen oder eben aber ganz weglassen. Während des ganzen Prozess zeigt Dcfldd fortwährend an, wo das Programm gerade steht. Wie ihr seht ist die Syntax von Dcfldd im großen und ganzen identisch zu Dd, ihr braucht also nicht groß umlernen.

$ 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

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!

Kommentieren Sie den Artikel

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