This is an old revision of the document!
Table of Contents
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.
