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.