dd (Unix)

dd (Unix)

dd ist ein Unix-Befehl, der zum Kopieren und Beschneiden von Datenströmen dient.

Inhaltsverzeichnis

Hintergrund

dd dient zum Umleiten von Datenströmen.

dd erweitert die Funktionalität von cp und cat. Während cp mit Dateien umgeht und diese kopiert, kann dd Daten aus Datenströmen ausschneiden (beispielsweise erst bei Byteposition 5.000 anfangen zu lesen). dd wird sehr häufig zum Kopieren von Inhalten von Datenträgern per Gerätedateien benutzt. Allerdings unterscheidet sich die Verwendung von dd für diese Art von Kopieraktionen praktisch nicht von der Verwendung von cp. Beide Programme nutzen die POSIX-Funktionen open (), read (), write () und close (). Technisch gesehen verhalten sich cp und dd in den einfachen Verwendungsarten also identisch. So ist beispielsweise die Zeile

$ dd if=/dev/hda of=hda.dump

äquivalent zu jeder einzelnen der folgenden Zeilen (mit der Ausnahme, dass bei den Umleitungsoperatoren die Geräte und Dateien mit der Shell geöffnet werden):

$ cp /dev/hda hda.dump
$ dd </dev/hda >hda.dump
$ cat </dev/hda >hda.dump

Geschichte

dd wurde in den 1970er Jahren eingeführt. Der Name spielt auf die DD-Anweisung („DD“ für englisch „data definition“) aus der Job Control Language an. Der Name sollte eigentlich auf „cc“ lauten, was als Kürzel für „Copy and Convert“ stehen sollte, das Programmkürzel war aber schon an den C-Compiler vergeben. Weiterhin hatten ältere IBM-Betriebssysteme für Großrechner ein Programm namens „DDR“ („Disk Dump and Restore“), von dem das dd-Kommando inspiriert wurde. Es etablierte sich als Standard-Werkzeug von Unix-Umgebungen und wurde oft nachgebaut. Eine wichtige Implementierung ist die des GNU-Projektes, die ursprünglich von Paul Rubin, David MacKenzie und Stuart Kemp geschrieben wurde und sich in praktisch allen GNU/Linux-Distributionen findet. Neben Implementierungen des selben Funktionsumfanges gibt es auch zahlreiche angepasste Fassungen, die zum Beispiel auf die Anwendung zur Datenrettung und Forensik spezialisiert sind. Die Software Ghost sowie deren Klone und Erben bauten auf das Konzept von dd auf und erweiterten es. [1]

Benutzung

Die Syntax zum Aufruf von dd unterscheidet sich deutlich von der anderer Unix-Kommandos, zum Beispiel cp. So werden als Argumente für dd (beliebig viele) Operanden erwartet.

dd [Operand]...

Operanden

Option Erläuterung
if=Datei Der Datenstrom, der umgeleitet werden soll (input file). Das kann eine Datei oder ein Datenstrom (ohne Angabe wird vom Standardeingabestrom gelesen), aber auch eine Festplatte oder ein anderes Gerät (Gerätedatei, everything is a file) sein.
of=Datei Die Datei, auf die geschrieben werden soll (output file). Dies kann wieder eine Datei (auch eine Gerätedatei) sein. Wird of weggelassen, schreibt dd auf die Standardausgabe und kann wiederum ebenfalls in eine (Geräte-)Datei umgeleitet werden.
ibs=Bytes Eingabe-Blockgröße (input block size), gibt an, wie viele Bytes auf einmal gelesen werden sollen.
obs=Bytes Ausgabe-Blockgröße (output block size), gibt an, wie viele Bytes auf einmal geschrieben werden sollen.
bs=Bytes Kurzschreibweise für ibs=Bytes obs=Bytes. Der Standardwert bei Nichtangabe ist 512 Bytes (bei cp ist die Standardblockgröße 8192 Byte).

Beim Auslesen von Festplatten wird für eine bessere Leistung hier der Wert „2K“ für 2048 Byte empfohlen.

count=Blocks Angabe, um nur eine begrenzte Menge Blöcke zu kopieren.
skip=Blocks Angabe, um eine Anzahl Blöcke zu überspringen.
seek=blocks Überspringt diese Anzahl Blöcke beim Schreiben auf die Ausgabe.
conv=Schlüsselwörter Wandelt die Datei entsprechend einer kommagetrennten Liste von Schlüsselwörtern um.
cbs=Bytes Umwandlungs-Blockgröße (convert block size): Größe der Blöcke zum Umwandeln auf einmal.

Messung des Fortschrittes und Durchsatzes

Oft wird das Fehlen eines Fortschrittsbalkens bzw. von Ausgaben von dd bemängelt. Die meisten Implementierungen von dd geben jedoch beim Empfang eines bestimmten Signals (USR1 bei GNU-dd oder SIGINFO bei den Implementierungen unter *BSD und Mac OS X) eine Statusausgabe aus. Indem der Anwender das Programm kill nutzt, kann er sich dementsprechend über den Fortschritt von dd informieren:

Beispiel
Zeit In einem Terminal In einem anderen Terminal
t1 $ dd if=/dev/dvd of=image.iso
t2 $ killall -USR1 dd
Mac: sudo kill -siginfo Prozess-ID von DD
t3

262+1 Datensätze ein
262+1 Datensätze aus
551077888 Bytes (551 MB) kopiert, 173,859 s, 3,2 MB/s

Bei jedem Empfang des USR1 bzw. SIGINFO-Signals gibt dd eine solche Statusmeldung aus. Das kill-Programm selbst gibt hingegen bei Erfolg gar keine Ausgaben aus. Selbstverständlich kann das kill-Kommando mehrmals aufgerufen werden, auch automatisiert (zum Beispiel wiederholt $ watch -n N kill -USR1 `pidof dd` den Aufruf alle N Sekunden.)

Beispiele

Einige einfache Beispiele zum Verdeutlichen der Funktionalität. Diese ließen sich ebenfalls allein mit cp umsetzen, der äquivalente Befehl ist daher in der zweiten Spalte angegeben.

mit dd mit cp Erläuterung
dd if=/dev/urandom of=/dev/hda cp /dev/urandom /dev/hda Überschreibt die Festplatte hda mit Pseudozufallszahlen
dd if=/dev/hda of=/dev/hdb cp /dev/hda /dev/hdb Kopiert eine komplette Festplatte (hda) auf eine andere (hdb)
dd if=/dev/hda3 of=./hda3.img cp /dev/hda3 ./hda3.img Erstellt ein Abbild der Festplattenpartition

Vor allem im Zusammenhang mit der zunehmenden Verbreitung des Unix-Derivates Linux auf dem Desktop wird dd von unerfahrenen Benutzern oft überbewertet. Neben Aufgaben, die sich ebenso mit cp umsetzen lassen, wird dd oft an Stellen eingesetzt, wo Streamumleitungen sowie Pipes eine wesentlich einfachere und elegantere Lösung darstellen würden.

mit dd eleganter mit Umleitungen Erläuterung
dd if=/dev/hda1 | gzip > /tmp/partition_image.gz gzip -c < /dev/hda1 > /tmp/partition_image.gz Erstellt eine mit gzip komprimierte Abbilddatei einer Festplattenpartition.

Bei der Verwendung des gepufferten Gerätes ist die Benutzung von dd ist hier überflüssig und hätte denselben Effekt wie die unnötige Nutzung von cat /dev/hda1 | .... Durch Benutzung von < und > können allerdings die Ein-/Ausgabedateien direkt umgeleitet werden. Das ist auch ressourcenschonender, weil weniger neue Prozesse laufen müssen. Bei ungepufferten Geräten muss allerdings sichergestellt werden, dass jede Leseoperation mit Ganzzahligen Vielfachen der Sektorgröße arbeitet.
Beachte, dass gzip nur einen Prozessor verwendet. Um mehrere Prozessoren bei der Kompression zu verwenden, kann beispielsweise pigz verwendet werden.

gunzip -c /tmp/partition_image.gz | dd of=/dev/hdc7 gunzip -c /tmp/partition_image.gz > /dev/hdc7 Dekomprimiert und lädt die Abbilddatei auf eine Partition.

Auch hier ist der dd-Befehl überflüssig.

Erst bei komplexeren Anwendungen von dd zeigt sich dessen wirkliche Überlegenheit gegenüber cp sowie den Stream-Umleitungsoperatoren. Einige exemplarische Beispiele verdeutlichen die Flexibilität und Vielseitigkeit, die sich durch die Kombination von dd mit Streamumleitungen, welche zum Standardfunktionsumfang von Unix-Shells gehören, sowie weiteren traditionellen Unix-Befehlen ergibt.

Kommando Erläuterung
dd if=/dev/random bs=1M count=256 | progressbar >./256-MB-random-data.bin Das dd-Kommando liest 256 mal ein Megabyte Zufallsdaten ein, übergibt sie einem (fiktiven) Programm, welches einen Fortschrittsbalken darstellt. Die Daten werden dann in eine Datei umgeleitet.
dd if=/dev/hda bs=512 count=1 of=./mbr-backup.bin dd liest die ersten 512 Byte der Festplatte hda ein; üblicherweise enthalten diese 512 Byte den Bootsektor (Master Boot Record), inklusive der Partitionstabelle.
dd if=/dev/zero of=sparsefile bs=1 count=0 seek=10M dd erstellt eine Sparse-Datei von 10 MB Größe.
dd if=quelldatei of=zieldatei conv=notrunc dd ersetzt den Beginn der Datei zieldatei durch den kompletten Inhalt von quelldatei. Mit anderen Worten: dd schreibt den Inhalt von quelldatei in zieldatei, ohne zieldatei abzuschneiden, falls dieses größer als die Quelldatei ist. Der Rest von zieldatei bleibt in diesem also erhalten. Auf diese Weise kann man beispielsweise den Bootsektor eines Plattenabbildes ersetzen.

Alternativen

Alternativen sind

Weblinks

Einzelnachweise

  1. http://softpanorama.org/Tools/dd.shtml
  2. http://www.gnu.org/software/ddrescue/ddrescue.html - Bestandteil der coreutils http://www.gnu.org/software/coreutils/
  3. http://sourceforge.net/projects/dc3dd/

Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Unix — (officially trademarked as UNIX, sometimes also written as Unix with small caps) is a computer operating system originally developed in 1969 by a group of AT T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Douglas McIlroy, and… …   Wikipedia

  • UNIX — Ken Thompson und Dennis Ritchie Basisdaten Entwickler …   Deutsch Wikipedia

  • Unix — Kommandozeile (Unix Prompt) Basisdaten Entwickler Ken Thompso …   Deutsch Wikipedia

  • Unix — (registrado oficialmente como UNIX®) es un sistema operativo portable, multitarea y multiusuario; desarrollado, en principio, en 1969 por un grupo de empleados de los laboratorios Bell de AT T, entre los que figuran Ken Thompson, Dennis Ritchie y …   Wikipedia Español

  • UNIX — UNIX, parfois écrit « Unix », avec des petites capitales, est un système d exploitation multitâche et multi utilisateur créé en 1969, conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits outils… …   Wikipédia en Français

  • Unix — (marque déposée officiellement comme UNIX, parfois aussi écrit comme Unix avec les petites capitalisations) est le nom d un système d exploitation multitâche et multi utilisateur créé en 1969, conceptuellement ouvert et fondé sur une approche par …   Wikipédia en Français

  • Unix time — Unix time, or POSIX time, is a system for describing points in time, defined as the number of seconds elapsed since midnight Coordinated Universal Time (UTC) of January 1 1970, not counting leap seconds. It is widely used not only on Unix like… …   Wikipedia

  • Unix-подобная операционная система — Генеалогическое дерево UNIX подобных ОС UNIX подобная операционная система (иногда сокр. *nix)  система, которая образовалась под влиянием UNIX. Термин включает свободные/открытые операционные системы, образованные от UNIX компании …   Википедия

  • UNIX — 〈[ju:nıx] EDV〉 Betriebssystem für Computer, das zum großen Teil in der Programmiersprache C geschrieben ist [engl.] * * * UNIX   [ursprünglich UNICS, Abk. für Uniplexed Information and Computing System, dt. »nicht multiplextes (vielseitiges)… …   Universal-Lexikon

  • UNIX-Kommandos — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix-Befehle — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”