dd
dd - Bit-genaue Kopie einer Datei erstellen
Beschreibung
disk dump erstellt bit-genaue Kopien von Datenträgern, Partitionen oder Dateien
- Bit-genau
Bit-für-Bit bzw. Byte-für-Byte ausgelesen und beschrieben wird, unabhängig von dessen Inhalt und Belegung
- flexiebles Werkzeug
Diskdump ist ein sehr flexiebles Werkzeug, das ab einem bestimmten Startpunkt eine bestimmte Menge »roher« Daten liest und diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt. Zusätzlich kann dd die gelesen Daten konvertieren.
Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, selbst wenn Linux diese nicht lesen kann.
dd if=QUELLE of=ZIEL [OPTIONEN]
QUELLE und ZIEL können hierbei sowohl ein Device als auch eine Datei sein. Werden keine weiteren Optionen angegeben, so werden alle Daten aus QUELLE gelesen. Handelt es sich bei QUELLE um eine Partition, wird deren gesamter Inhalt kopiert:
# dd if=/dev/hda of=/dev/hdc
Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/hda) des Systems auf die dritte (/dev/hdc) kopiert. Es sollte jedem bewusst sein, dass der alte Inhalt der dritten Festplatte damit überschrieben wird. Auch sollte diese über die gleiche Kapazität wie die erste Platte verfügen (sonst muss man sich die Anzahl der kopierten Bytes merken). Um die Daten später zurückzuspielen, vertauscht man die Angaben von QUELLE und ZIEL.
Ist das Ziel einer Kopieraktion eine Datei, könnte bei Kernel-Versionen <2.4 die Beschränkung der Dateigröße von 2 GB unser Vorhaben zunichte machen, in einem solchen Fall muss die QUELLE auf mehrere Zieldateien aufgeteilt werden. Hierzu benötigt dd mehrere Optionen. Mit bs=BYTES muss die Anzahl Bytes, die in einem Schritt zu lesen oder schreiben sind, angegeben werden. Wieviele Schritte getätigt werden sollen, legt die Option count=ANZAHL fest. Um bspw. den Masterbootsektor (Mbr) der ersten Festplatte in eine Datei zu schreiben, könnte man folgenden Aufruf verwenden:
# dd if=/dev/hda of=/tmp/mbr.save bs=512 count=1
Um jetzt den Superblock (1 k groß) der ersten Partition zu sichern, müssen sowohl Mbr als auch der 512 Bytes lange Bootsektor (also zwei Blöcke) übersprungen werden. Hierzu verwendet man die Option skip=ANZAHL.
# dd if=/dev/hda of=/dev/superblock.save bs=512 count=2 skip=2
Wenn dd seine Arbeit verrichtet hat, gibt es eine Statistik aus:
3385223+0 records in 3385223+0 records out 1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben:
# dd if=/dev/zero of=/dev/null count=10MB & pid=$! # kill -10 $pid
Installation
dd ist Teil des Pakets Coreutils
Aufruf
$ dd [Option] if=Inputfile of=Outputfile
Optionen
bs=bytes | Erzwingen von ibs=bytes und obs=bytes. |
cbs=bytes | Konvertieren von bytes Bytes auf einmal. |
conv=schlüsselwörter | Konvertieren der Datei gemäß der kommagetrennten Liste von Schlüsselwörtern. |
count=blöcke | Nur blöcke Eingabeblöcke kopieren. |
ibs=bytes | Lesen von bytes Bytes auf einmal. |
if=datei | Lesen aus datei statt von der Standardeingabe. |
obs=bytes | Schreiben von bytes Bytes zur Zeit. |
of=datei | Schreiben in datei statt in die Standardausgabe. |
seek=blöcke | Überspringen von blöcke Blöcken der Größe von obs beim Beginn der Ausgabe. |
skip=blöcke | Überspringen von blöcke Blöcken der Größe von ibs beim Beginn der Eingabe. |
bytes können folgende multiplikativen Endungen tragen: xM M, c 1, w 2, b 512, kD 1000, k 1024. MD 1.000.000, M 1.048.576, GD 1.000.000, G 1.073.741.824, und so weiter für T, P, E, Z, Y.
Schlüsselwörter
ascii | von EBCDIC in ASCII. |
ebcdic | von ASCII in EBCDIC. |
ibm | von ASCII in alternatives EBCDIC. |
block | Auffüllen von mit Zeilenumbrüchen terminierten Datensätzen durch Leerzeichen bis zur cbs-Größe. |
unblock | Ersetzen von nachlaufenden Leerzeichen in Datensätzen von cbs-Größe mit Zeilenumbrüchen. |
lcase | Ändern von Großbuchstaben in Kleinbuchstaben. |
notrunc | Kein Abschneiden der Ausgabedatei. |
ucase | Ändern von Kleinbuchstaben in Großbuchstaben. |
swab | Jedes Paar von Eingabebytes vertauschen. |
noerror | Nach Lesefehlern fortfahren. |
sync | Jeden Eingabeblock mit NULLen zur ibs-Größe auffüllen; wenn mit block oder unblock benutzt, stattdessen mit Leerzeichen. |
Argumente
Umgebung
Rückgabewert
Anhang
Siehe auch
Dokumentation
- Man-Page
- dd
- Info-Page
Links
Projekt
Weblinks