dd
dd - Datei blockweise lesen und schreiben
Beschreibung
dd (disk dump) - Bit-genaue Kopie einer Datei
- Dateien jeder Art
- Datenträger
- Partition
- Bit-Genau
Bit-für-Bit bzw. Byte-für-Byte
- ausgelesen
- geschrieben
unabhängig von Inhalt oder Belegung
- Flexiebles Werkzeug
Diskdump ist ein flexiebles Werkzeug
- ab einem bestimmten Startpunkt eine bestimmte Menge roher Daten liest
- diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt
- Konvertierung
dd kann gelesen auch Daten konvertieren
- Backup
Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, selbst wenn Linux diese nicht lesen kann
sudo dd if=QUELLE of=ZIEL [OPTIONEN]
- QUELLE und ZIEL
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
sudo dd if=/dev/sda of=/dev/sdc
- Beispiel
Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/sda) des Systems auf die dritte (/dev/sdc) 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
sudo dd if=/dev/sda 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
sudo dd if=/dev/sda 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
# kill -10 $pid
# dd if=/dev/zero of=/dev/null count=10MB & 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
- Info-Page
Links
Projekt
Weblinks