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. Der Name sollte früher Copy and Convert bedeuten, das Programmkürzel cc war aber schon an den C-Compiler vergeben. Daher kam es zu dd, als Kürzel für data definition.

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 Devices und Dateien mit der Shell geöffnet werden):

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

Benutzung

Die Syntax zum Aufruf von dd unterscheidet sich deutlich von der anderer Unix-Kommandos, z.B. 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. 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. 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 ein Mal gelesen werden sollen.
obs=Bytes Ausgabe-Blockgröße (output block size), gibt an, wie viele Bytes auf ein Mal 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 Performance 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 Blocks 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 ein Mal.

Messung des Fortschrittes und Durchsatzes

Oft wird das Fehlen einer Fortschrittsleiste bzw. von Ausgaben von dd bemängelt. Implementierungen von dd sind jedoch daran gehalten, beim Empfangen des Signals USR1 eine solche Statusausgabe auszugeben. Indem der Anwender das Programm kill nutzt, kann er sich dementsprechend über den Fortschritt von dd informieren:

Beispiel
In einem Terminal In einem anderen Terminal
$ dd if=/dev/dvd of=image.iso

262+1 Datensätze ein
262+1 Datensätze aus
551077888 Bytes (551 MB) kopiert, 173,859 s, 3,2 MB/s
 
$ kill -USR1 `pidof dd`

Bei jedem Empfang des USR1-Signals gibt dd eine solche Statusmeldung aus.

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 gesamte Festplatte hda auf eine andere (hdb)
dd if=/dev/hda3 of=./hda3.img cp /dev/hda3 ./hda3.img Erstellt ein Image 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 auch oft an Stellen eingesetzt, wo Stream-Umleitungen 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 ein mit gzip komprimiertes Image einer Festplattenpartition.
Die Benutzung von dd ist hier völlig ü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. Dies ist auch ressourcenschonender, weil weniger neue Prozesse laufen müssen.
gunzip -c /tmp/partition_image.gz | dd of=/dev/hdc7 gunzip -c /tmp/partition_image.gz > /dev/hdc7 Dekomprimiert und lädt das Image 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 beinhalten 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=sourcefile of=targetfile conv=notrunc dd ersetzt den Beginn der Datei targetfile durch den kompletten Inhalt von sourcefile. Mit anderen Worten: dd schreibt den Inhalt von sourcefile in targetfile, ohne targetfile abzuschneiden, falls dieses Größer als die Quelldatei ist. Der Rest von targetfile bleibt in diesem also erhalten. Auf diese Weise kann man beispielsweise den Bootsektor eines Plattenimages ersetzen.

Weblinks


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”