User Tools

Site Tools


linux:dd

This is an old revision of the document!


dd

Bei dd handelt es sich um ein Programm für die Kommandozeile, das in jedem Linux/Unix vorhanden ist und zum Kopieren und Konvertieren von Daten verwendet werden kann. Gemäß dem Unix-Grundsatz “everything is a file” können sowohl blockorientierte Geräte wie Festplatten oder Partitionen sowie zeichenbasierte Daten wie Images oder simple Dateien kopiert werden. Dabei ist jedoch insofern Vorsicht geboten, da sich bei falscher Anwendung ganze Datenträger unwiderruflich löschen lassen.

Anwendungsbeispiele

dd kann sowohl zum Sichern von Partitionen verwendet werden

dd if=/dev/sda1 of=/tmp/sda1.img

als auch zum Löschen eines Datenträgers, indem er mit zufälligen Zeichen überschrieben wird:

dd if=/dev/urandom of=/dev/sdb

Ebenfalls möglich ist z. B. das Vorbereiten eines USB-Sticks als Bootmedium mit einer Live-CD einer Linux-Distribution:

dd if=/tmp/linux.iso of=/dev/sdb

Backup mit dd zippen

Wenn dd als Backup-Tool verwendet wird, kann es von Interesse sein, das erstellte Image zu komprimieren. Dazu können die gelesenen Blöcke in gzip gepiped werden:

dd if=/dev/sda bs=1M | gzip > /media/backup.img.gz

Das ganze lässt sich mittels

gunzip -c /media/backup.img.gz | dd of=/dev/sda bs=1M

wieder zurück auf die Festplatte spielen.

Forschrittsanzeige mit dd und Bordmitteln

Da dd von sich aus erst nach Abschluss des Prozesses Informationen ausgibt, kann schnell der Wunsch nach einer Ausgabe des Fortschritts aufkommen, insbesondere beim Kopieren großer Datenmengen. Erhält dd ein SIGINT Signal, gibt es über die Standard-Fehlerausgabe (stderr) eine Statusmeldung aus. Dazu kann mittels des kill-Befehls das Signal SIGUSR1 (user defined signal 1) an dd übermittelt werden:

sudo kill -USR1 $(pgrep ^dd)

Alternativ ist es auch möglich mit watch regelmäßige Ausgaben zu erhalten, z. B. alle 5 Sekunden:

watch -n 5 'sudo kill -USR1 $(pgrep ^dd)'

Fortschritt mit pipe viewer

Eine weitere Möglichkeit ist die Verwendung von pv (pipe viewer). Mit diesem Programm ist es möglich, die aktuell verstrichene Zeit sowie Geschwindigkeit angezeigt zu bekommen. Da pv nicht erkennt, wie groß die zu kopierenden Daten sind, kann mit der Option --size oder kurz -s zusätzlich angegeben werden, welche Größe die Daten haben, um eine Prozentanzeige sowie ETA zu erhalten:

dd if=/dev/urandom bs=1M | pv -s 1g | dd of=/tmp/test.img

Ebenfalls nutzbar ist es zur Ausgabe auf stdout:

pv /path/to/big_file | md5sum

Hierbei erkennt pv die Größe automatisch.

linux/dd.1445888991.txt.gz · Last modified: by sascha