Dd: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung  | 
				|||
| Zeile 8: | Zeile 8: | ||
; Bit-Genau  | ; Bit-Genau  | ||
Bit-für-Bit   | Bit-für-Bit ausgelesen und schreiben  | ||
* unabhängig von Inhalt oder Belegung  | |||
*   | |||
unabhängig von Inhalt oder Belegung  | |||
; Flexiebles Werkzeug  | ; Flexiebles Werkzeug  | ||
* liest ab einem Startpunkt eine bestimmte Menge ''roher'' Daten    | * liest ab einem Startpunkt eine bestimmte Menge ''roher'' Daten    | ||
* diese werden 1:1 in eine Zieldatei oder auf ein Zielgerät geschreiben  | * diese werden 1:1 in eine Zieldatei oder auf ein Zielgerät geschreiben  | ||
| Zeile 66: | Zeile 63: | ||
Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben  | Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben  | ||
<syntaxhighlight lang="bash" highlight="1" line copy>  | <syntaxhighlight lang="bash" highlight="1" line copy>  | ||
sudo kill -10 $pid  | |||
<!--  | |||
dd if=/dev/zero of=/dev/null count=10MB & pid=$!  | |||
-->  | |||
</syntaxhighlight>  | </syntaxhighlight>  | ||
Version vom 3. September 2025, 10:49 Uhr
dd - Datei blockweise lesen und schreiben
Beschreibung
- dd (disk dump) - Bit-genaue Kopie einer Datei
 
Dateien jeder Art
- Bit-Genau
 
Bit-für-Bit ausgelesen und schreiben
- unabhängig von Inhalt oder Belegung
 
- Flexiebles Werkzeug
 
- liest ab einem Startpunkt eine bestimmte Menge roher Daten
 - diese werden 1:1 in eine Zieldatei oder auf ein Zielgerät geschreiben
 
- Konvertierung
 
dd kann Daten konvertieren
- Backup
 
Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, auch 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 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
sudo 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