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
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
Ich nutze grundsätzlich das gesprächigere dcfldd
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).
SD Karten schreiben geht auch bei USB 2.0 schnell, so lange man bs=4M setzt. Ohne die Option wird jeder Block 8x beschrieben.
ddrescue…
danke 🙂
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:
DDrescue bringt so etwas schon lange und auch die Lese und Schreibraten werden angezeigt
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