Wer gerne und viel mit dem Raspberry Pi arbeitet, der schreibt mit Sicherheit des Öfteren Images via dd auf eine SD-Karte. Bei kleineren Systemen und mit einem USB 3.0 tauglichen Kartenlesern nimmt der Datentransfer in der Regel nur wenige Momente in Anspruch, schreibt man jedoch ein größeres Image mit nur einem USB-2.0-Kartenleser, dann braucht der Vorgang schnell mal 15 Minuten. Da dd bisher keine Statusausgabe kannte, mussten Ungeduldige für Informationen zum Fortschritt ein pkill -USR1 -x dd an den Prozess senden oder Tools wie pv oder progress nutzen. Mit den frisch veröffentlichten Coreutils 8.24, zu diesem Paket gehört dd, bekommt das Kommandozeilenwerkzeug nun aber endlich eine native Statusanzeige.

Dd mit Fortschrittsanzeige

Die entsprechende Version der Coreutils gibt es bisher nur in wenigen Linux-Distributionen: Arch Linux und die diversen Arch-Derivate bringen diese Version in der Regel schon jetzt mit. Debian Sid führt hingegen aktuell noch coreutils 8.23-4 in seinen Paketquellen, das Update wird jedoch mit Sicherheit bald kommen. Ist auf eurem System eine ausreichend aktuelle Version der Coreutils installiert, müsst ihr für die fortlaufend aktualisierte Statusausgabe an den üblichen Aufruf von dd lediglich die Option status=progress hängen. Das Kommando gibt das die bereits kopierte Datenmenge, die verstrichene Zeit und die aktuelle Datenrate aus.

$ dd --version
dd (coreutils) 8.24
[...]
$ sudo dd if=beispiel.img of=/dev/sdd bs=1M status=progress
461373440 Bytes (461 MB) kopiert, 28,875167 s, 16,0 MB/s

Wer mit Ubuntu unterwegs ist, der muss auf die kommende Ubuntu-Version „Xenial Xerus“ 16.04 warten, erst diese wird eine ausreichend aktuelle Version des Pakets mitbringen — ältere Ausgaben von Ubuntu werden das Update eines solch zentralen Pakets mit Sicherheit nicht verpasst bekommen. Wer auf seinem Debian/Ubuntu-Version coreutils-8.24 unbedingt installieren möchte, der könnte dies entsprechend den nachfolgenden Kommandos tun — Ich persönlich würde davon jedoch abraten: Im Test auf einem virtuellen Ubuntu 15.10 gab es keine Probleme, langfristig könnte man sich mit dieser Aktion jedoch durchaus Ärger einhandeln.

$ wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xz
$ tar -xf coreutils-8.24.tar.xz
$ cd coreutils-8.24
$ ./configure && make -j $(nproc) && sudo make install
$ dd --version
dd (coreutils) 8.24
Copyright © 2015 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.

Geschrieben von Paul Rubin, David MacKenzie und Stuart Kemp.

pv als Alternative zu dd

Dd aus Coreutils 8.24 zeigt wie beispielsweise auch pv beim Kopieren von Images eine Fortschrittsanzeige.
Dd aus Coreutils 8.24 zeigt wie beispielsweise auch pv beim Kopieren von Images eine Fortschrittsanzeige.

Als Alternative zu Dd (egal ob mit oder ohne Fortschrittsanzeige) bietet sich generell Pipe Viewer oder kurz pv an. Das Programm ist bei allen gängigen Linux-Distributionen in den Paketquellen enthalten und bietet im Gegensatz zum aktualisierten Dd-Kommando einen Fortschrittsbalken an. So seht ihr auf einen Blick, wie lange der Kopiervorgang noch dauert, ohne die Dateigröße der übertragenen Imagedatei zu kennen. Zudem wählt pv automatisch und ohne weitere Parameter eine ordentliche Blockgröße aus, sodass der Kopiervorgang möglichst wenig Zeit in Anspruch nimmt. Bei dd solltet ihr die Option bs=1M hingegen nicht übergehen.

### Pipe Viewer unter Debian, Ubuntu oder Linux Mint installieren
$ sudo apt-get install pv
### Pipe Viewer unter Arch Linux, Manjaro oder Antergos installieren
$ sudo pacman -S pv
### Mit Pipe Viewer eine Imagedatei kopieren
$ pv < 2015-11-21-raspbian-jessie.img > /dev/sdd
1,63GiB 0:01:48 [12,5MiB/s] [=============> ] 44% ETA 0:02:14

8 Kommentare

  1. Danke, ein sehr interessantes Feature von dem ich noch nicht wusste. Und das obwohl coreutils 8.24 bei mir bereits seit Juli 2015 installiert ist (Arch Linux).

  2. Endlich! Wie lange ich auf dieses Feature gewartet habe. Danke 🙂

    Zuvor musste man sich immer mit pv und zwei Pipes helfen. Zum Glück gehört das jetzt der Vergangenheit an:

    $ dd if=/dev/urandom | pv | dd of=/dev/sda1
  3. Bitte beachten, um die Coreutils installieren zu können, muss ein compiler da sein beispielsweise gcc und das libc6-dev package, ansonsten läuft make ins leere

Kommentieren Sie den Artikel

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