Linux / Befehl dd: Daten blockweise kopieren und konvertieren
dd kopiert und konvertiert Daten mit expliziten Eingabe-, Ausgabe- und Blockgrößenangaben. Ein falsches of=-Ziel kann eine Datei oder ein Gerät überschreiben. Prüfen Sie deshalb zuerst Richtung und Geräteidentität und kontrollieren Sie das Ergebnis anschließend.
Die Beispiele verwenden das Verhalten von GNU Coreutils. Prüfen Sie dd --help, man dd und die Dokumentation Ihrer Distribution, wenn Portabilität oder eine versionsspezifische Option wichtig ist.
Ergänzende Befehle und Anwendungsfälle finden Sie in Wesentliche Linux-Befehle: Eine praktische Referenz nach Aufgaben.
Was ist der dd-Befehl?
dd liest Eingaben und schreibt Ausgaben in Blöcken, während Größen-, Offset-, Konvertierungs- und I/O-Flags unterstützt werden. Seine Hauptoperanden verwenden die name=value-Syntax ohne Leerzeichen um das Gleichzeichen. Ein falscher of= kann sofort eine Datei oder ein Blockgerät überschreiben.
Grundlegende Syntax
dd [OPERAND]...
Setzen Sie Anführungszeichen um Pfade, die Leerzeichen enthalten. Wenn unterstützt, setzen Sie -- vor Operanden, die mit einem Bindestrich beginnen, damit sie nicht als Optionen interpretiert werden.
Grundlegende dd-Nutzung
Eine Datei in eine andere kopieren
if bezeichnet die Eingabe und of bezeichnet die Ausgabe. Verwenden Sie cp für gewöhnliche Dateikopien und dd, wenn Blockebenenkontrolle erforderlich ist.
dd if=source.img of=copy.img bs=4M status=progress
Erstellen Sie eine Datei fester Größe, die mit Nullen gefüllt ist
Das Lesen von /dev/zero schreibt echte Null-Daten und verbraucht Schreibbandbreite und zugewiesenen Speicherplatz, im Gegensatz zu einer Sparse-truncate-Operation.
dd if=/dev/zero of=test.bin bs=1M count=100 status=progress
Erstellen Sie ein Festplattenabbild
Ein Abbild eines aktiven, sich ändernden Dateisystems kann inkonsistent sein. Bevorzugen Sie ein unmontiertes Gerät, einen Snapshot oder ein anwendungsbewusstes Backup und überprüfen Sie die Identität des Eingabegeräts.
sudo dd if=/dev/sdb of=/backup/disk-sdb.img bs=16M status=progress conv=fsync
Überprüfen Sie Kopierergebnisse mit einer kleinen Datei anstelle eines Geräts
dd kopiert Eingabe (if=) in Ausgabe (of=) in Bytes. Wenn Sie den Gerätepfad falsch angeben, können Sie Daten überschreiben, daher sollten Sie zuerst mit einer kleinen normalen Datei verstehen, wie es funktioniert.
printf 'ABC' > source.bin dd if=source.bin of=copy.bin bs=1 status=none cmp -s source.bin copy.bin echo $?
Beispielausgabe 0 bedeutet, dass der Byte-Inhalt der beiden Dateien identisch ist. status=none versteckt die Fortschrittszusammenfassung von dd. Für Geräte-Image-Operationen sollten Sie zusätzlich die Zielgröße, den Einbindestatus und die Sicherung prüfen.
Wichtige Optionen
| Option | Zweck |
|---|---|
if=FILE |
Wählen Sie die Eingabedatei oder das Eingabegerät. |
of=FILE |
Wählen Sie die Ausgabedatei oder das Ausgabegerät. |
bs=SIZE |
Legen Sie sowohl die Blockgröße für Eingabe als auch Ausgabe fest. |
count=N |
Begrenzen Sie die Anzahl der kopierten Eingabeblöcke. |
skip=N |
Überspringen Sie Eingabeblöcke vor dem Lesen. |
seek=N |
Überspringen Sie Ausgabeblöcke vor dem Schreiben. |
status=progress |
Zeigen Sie den Übertragungsfortschritt periodisch an. |
conv=noerror,sync |
Fortfahren nach Lesefehlern und kurze Blöcke auffüllen. |
conv=fsync |
Synchronisieren Sie Ausgabedaten und Metadaten vor dem Abschluss. |
iflag=fullblock |
Kumulieren Sie kurze Lesevorgänge, um Eingabeblöcke bei Bedarf aufzufüllen. |
Lange Optionen machen überprüfte Skripte oft leichter verständlich. Wenn ein Skript auf Nicht-GNU-Systemen laufen muss, überprüfen Sie jede nicht-POSIX-Option auf der Zielplattform.
Praktische Beispiele
Überprüfen Sie ein Gerät, bevor Sie ein Image wiederherstellen.
Das Wiederherstellen eines Images überschreibt die vorhandenen Daten und Partitionsstrukturen des Ziels. Bestätigen Sie Modell, Seriennummer, Größe, Mount-Status und Richtung unmittelbar vor der Ausführung.
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS findmnt sudo dd if=/backup/disk.img of=/dev/sdc bs=16M status=progress conv=fsync
Einen Bereich aus einem Image extrahieren.
skip und count werden in den Einheiten des ausgewählten Eingabeblocks gemessen. GNU-Byte-orientierte Flags können feinere Steuerung bieten, wenn sie unterstützt werden.
dd if=disk.img of=segment.bin bs=1M skip=100 count=20 status=progress
Kopierten Output überprüfen
Wählen Sie die Überprüfung entsprechend dem Risiko: vergleichen Sie Größen, Partitions-Metadaten oder Prüfsummen und berücksichtigen Sie zwischengespeicherte Schreibvorgänge, bevor Sie ein Gerät trennen.
sha256sum source.img copy.img stat -c '%s %n' source.img copy.img sync
dd und verwandte Befehle
| Befehl oder Methode | Hauptrolle | Geeignet für |
|---|---|---|
dd |
Blockorientiertes Kopieren und Konvertieren | Images und offset-basierte Arbeiten |
cp |
Dateisystemebene Dateikopieren | Gewöhnliche Dateien und Verzeichnisse |
rsync |
Inkrementelle und Remote-Synchronisation | Wiederholte Backups und Netzwerkkopien |
GNU ddrescue |
Beschädigte Medien erneut lesen und zuordnen | So viel wie möglich von einer ausfallenden Festplatte wiederherstellen |
Wichtige Hinweise
Ein Umkehren von if und of kann die Quelle zerstören
Der of-Operand ist das Schreibziel. Überprüfen Sie Richtung und Geräteidentität sofort vor dem Ausführen des Befehls erneut.
Eine größere Blockgröße ist nicht immer besser
Die beste Größe hängt vom Gerät und der Arbeitslast ab. Sehr große Blöcke können den Speicherverbrauch erhöhen und die Fehlerbehebung grober machen.
Verwenden Sie ein speziell für die Wiederherstellung entwickeltes Tool für fehlerhafte Medien
conv=noerror,sync ist begrenzt. GNU ddrescue ist für Wiederholungsstrategien, Fortschrittskarten und abbruchsichere Wiederherstellungen konzipiert.
FAQ
Was bedeuten if und of?
if ist die Eingabe zum Lesen; of ist die Ausgabe zum Überschreiben.
Wie zeige ich den Fortschritt an?
Fügen Sie status=progress mit GNU dd hinzu.
Soll ein Abbild der gesamten Festplatte auf einen Partitionspfad geschrieben werden?
Oft zielt ein Abbild der gesamten Festplatte auf das gesamte Gerät, aber folgen Sie den Anweisungen des Abbildanbieters und überprüfen Sie das Ziel.
Kann dd eine Festplatte mit Lesefehlern wiederherstellen?
Es kann lesbare Daten kopieren, aber GNU ddrescue ist normalerweise besser für beschädigte Medien und fortsetzbare Wiederherstellungen geeignet.
Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Coreutils dd Dokumentation und GNU Coreutils-Handbuch.




