Wer gerne und viel mit dem Raspberry Pi arbeitet, schreibt mit Sicherheit des Öfteren Images mittels dd
auf eine SD-Karte. Bei kleineren Systemen und einem USB-3.0-tauglichen Kartenleser dauert der Datentransfer in der Regel nur wenige Momente. Beim Schreiben größerer Images mit einem einfachen USB-2.0-Kartenleser kann der Vorgang jedoch schnell 15 Minuten oder länger dauern. Da dd
bislang keine Statusausgabe bot, mussten Ungeduldige zur Anzeige des Fortschritts entweder ein pkill -USR1 -x dd
an den Prozess senden oder Tools wie pv oder progress verwenden. Mit der frisch veröffentlichten Version 8.24 der Coreutils – zu diesem Paket gehört auch dd
– erhält das Kommandozeilenwerkzeug nun endlich eine native Fortschrittsanzeige.
dd mit Fortschrittsanzeige
Die entsprechende Version der Coreutils ist bislang nur in wenigen Linux-Distributionen enthalten. Arch Linux und dessen Derivate liefern sie in der Regel bereits aus. Debian Sid führt derzeit noch coreutils in Version 8.23-4 in den Paketquellen, ein Update dürfte jedoch bald folgen. Ist auf Ihrem System eine ausreichend aktuelle Version der Coreutils installiert, genügt es, an den üblichen dd
-Befehl die Option status=progress
anzuhängen. Das Kommando zeigt dann die bereits kopierte Datenmenge, die verstrichene Zeit und die aktuelle Übertragungsrate an.
$ 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, muss auf die kommende Ubuntu-Version „Xenial Xerus“ 16.04 warten – erst diese bringt eine ausreichend aktuelle Version des Pakets mit. Ältere Ubuntu-Ausgaben werden ein Update eines derart zentralen Pakets wie coreutils mit großer Wahrscheinlichkeit nicht erhalten. Wer coreutils 8.24 dennoch manuell unter Debian oder Ubuntu installieren möchte, kann dies mit den folgenden Kommandos tun. Ich persönlich würde jedoch davon abraten: Zwar verlief ein Test unter Ubuntu 15.10 in einer virtuellen Maschine problemlos, langfristig kann eine manuelle Installation dieser Art jedoch zu unerwarteten Problemen führen.
$ 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
– unabhängig davon, ob mit oder ohne Fortschrittsanzeige – empfiehlt sich generell der Pipe Viewer, kurz pv
. Das Programm ist in den Paketquellen aller gängigen Linux-Distributionen enthalten und bietet im Gegensatz zur aktualisierten dd
-Version zusätzlich einen grafischen Fortschrittsbalken. So sehen Sie auf einen Blick, wie lange der Kopiervorgang noch dauert – selbst ohne die Größe der Imagedatei zu kennen. Außerdem wählt pv
automatisch eine sinnvolle Blockgröße, sodass der Kopiervorgang effizient abläuft. Bei dd
hingegen sollte die Option bs=1M
nicht weggelassen werden.
### Pipe Viewer unter Debian, Ubuntu oder Linux Mint installieren
$ sudo apt 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