VMware ESXi and vSphere Cluster Management

dd-Befehl unter Linux: Bitgenaue Images, Backups und Datenträgerklone erstellen

Lerne den Linux-Befehl dd sicher zu verwenden: Partitionen und Laufwerke sichern, Images wiederherstellen, Datenträger klonen und Fehler vermeiden.

Der Linux-Befehl dd kopiert Daten blockweise zwischen Dateien und Geräten. Damit lassen sich Partitionen und komplette Datenträger als Image sichern, Images wiederherstellen, Laufwerke klonen sowie CDs und DVDs einlesen. Gleichzeitig ist dd gefährlich: Das Ausgabeziel wird ohne Rückfrage überschrieben.

Voraussetzungen und Grundbegriffe

Für die Beispiele solltest du Linux-Pfade, sudo, Gerätedateien unter /dev sowie das Ein- und Aushängen von Dateisystemen kennen. Ein Blockgerät ist eine Gerätedatei, über die ein Datenträger oder eine Partition blockweise angesprochen wird, zum Beispiel /dev/sdc oder /dev/sdc1.

  • Eine Partition ist ein abgegrenzter Bereich eines Datenträgers, etwa /dev/sdc1.
  • Ein vollständiger Datenträger wird ohne Partitionsnummer angesprochen, etwa /dev/sdc.
  • Ein Image ist das Abbild einer Partition oder eines Datenträgers in Form einer Datei.
  • Eine Partitionstabelle beschreibt die Aufteilung eines Laufwerks in Partitionen.
  • MBR bezeichnet ein älteres Partitions- und Bootsektorformat am Anfang eines Datenträgers.
  • Unmount bedeutet, ein Dateisystem auszuhängen, damit es nicht gleichzeitig vom System verwendet wird.

Was macht dd?

dd arbeitet block- beziehungsweise sektororientiert. Es liest Daten aus einer Quelle, teilt sie in Blöcke ein und schreibt diese Blöcke in ein Ziel. Die Quelle kann eine reguläre Datei, eine Partition, ein komplettes Laufwerk, ein optisches Laufwerk oder eine Image-Datei sein. Das Ziel kann ebenfalls eine Datei, eine Partition oder ein Laufwerk sein.

Beim logischen Kopieren mit Werkzeugen wie cp werden Dateien und Verzeichnisse interpretiert. Ein Rohkopierer wie dd interpretiert den Inhalt dagegen nicht als Dateisystem. Er kopiert den ausgewählten Bereich byteweise. Dadurch können auch Dateisystemmetadaten, Bootsektoren, Partitionstabellen und ungenutzte Bereiche im Ergebnis enthalten sein.

Eine Kopie von /dev/sdc1 enthält deshalb die gesamte Partition. Eine Kopie von /dev/sdc umfasst zusätzlich die Partitionstabelle, Bootinformationen und alle Partitionen des Datenträgers.

Grundsyntax und wichtige Parameter

Die Grundform lautet:

dd if=EINGABE of=AUSGABE [OPTIONEN]

if steht für input file und legt die Eingabequelle fest. of steht für output file und legt das Ausgabeziel fest. Die Optionen werden bei dd typischerweise als name=wert angegeben, also ohne die sonst häufig verwendeten Bindestriche wie bei ls -l.

ParameterBedeutungTypischer EinsatzRisiko oder Hinweis
if=EingabequelleDatei, Partition, Laufwerk oder optisches Laufwerk lesenQuelle sorgfältig prüfen
of=AusgabezielImage-Datei, Partition oder Laufwerk beschreibenDas Ziel wird direkt überschrieben
bs=Größe der Ein- und Ausgabeblöckebs=4M für viele normale KopiervorgängeVerändert die Blockgröße, nicht automatisch die Datenmenge
ibs=Größe der EingabeblöckeEingabe- und Ausgabegröße getrennt festlegenWird von bs= gemeinsam gesetzt
obs=Größe der AusgabeblöckeSchreibverhalten getrennt von der Eingabe steuernWird von bs= gemeinsam gesetzt
count=Anzahl der zu kopierenden EingabeblöckeNur einen begrenzten Bereich kopierenMit bs= ergibt sich die maximale Datenmenge
status=progressZeigt laufenden Fortschritt anGroße Images und Klone beobachtenNur Anzeige, keine zusätzliche Sicherung
conv=fsyncFordert vor dem Ende das Schreiben gepufferter Daten anSchreibvorgänge auf Images und Geräten abschließenKann das Ende des Befehls verzögern
conv=noerror,syncBei Lesefehlern weiterarbeiten und fehlerhafte Blöcke auffüllenEinfache Behandlung beschädigter MedienDas Ergebnis kann Lücken oder aufgefüllte Blöcke enthalten

Ohne count= läuft dd normalerweise bis zum Ende der Eingabe oder bis ein Fehler auftritt. Bei count=10 und bs=1M werden höchstens zehn Eingabeblöcke, also ungefähr 10 MiB, kopiert.

Datenträger vor dem Kopieren identifizieren

Gerätenamen wie /dev/sdc können sich nach einem Neustart oder beim Anstecken weiterer Geräte ändern. Prüfe deshalb vor jedem Auftrag Modell, Größe, Dateisystem und Einhängungen:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
sudo blkid
mount
PrüfschrittBeispielwerkzeug oder BefehlWarum er wichtig ist
Geräte identifizierenlsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTSZeigt Laufwerke, Partitionen, Größen und Mountpoints
Größe vergleichenlsblkVerhindert ein zu kleines Zielmedium
Einhängungen prüfenmount oder die Mountpoint-Spalte von lsblkZeigt, ob ein Gerät gerade verwendet wird
Ziel aushängensudo umount /dev/sdd1Verhindert konkurrierende Zugriffe auf das Ziel
Prüfsumme nach dem Backup erstellensha256sum /pfad/zu/sdc1.imgErmöglicht eine spätere Integritätsprüfung

Das zu sichernde Dateisystem sollte möglichst nicht beschreibbar eingehängt sein. Bei einer Systempartition ist ein Live-System oft die sicherste Umgebung. Vor dem Überschreiben eines Ziels müssen alle darauf eingehängten Partitionen ausgehängt werden. Root-Rechte sind für viele Zugriffe auf /dev erforderlich; sudo gibt dem Befehl weitreichende Rechte und macht eine falsche Geräteauswahl besonders folgenreich.

Eine Partition als Image sichern

Das folgende Beispiel liest die gesamte Partition /dev/sdc1 und schreibt sie in eine Datei:

sudo dd if=/dev/sdc1 of=/pfad/zu/sdc1.img bs=4M status=progress conv=fsync

Die Image-Datei sollte auf einem anderen, ausreichend großen Datenträger liegen. Verwende einen eindeutigen Namen, der Quelle und Zweck erkennen lässt. Der benötigte Platz orientiert sich an der vollständigen Größe der Partition, nicht an der Menge der aktuell belegten Dateien.

Nach Abschluss kannst du den Schreibpuffer zusätzlich leeren und die Dateigröße prüfen:

sync
ls -lh /pfad/zu/sdc1.img

Ein Partitionsimage wiederherstellen

Für die Wiederherstellung werden Quelle und Ziel gegenüber dem Sicherungsvorgang vertauscht:

sudo dd if=/pfad/zu/sdc1.img of=/dev/sdc1 bs=4M status=progress conv=fsync

Prüfe vorher, ob /dev/sdc1 wirklich die gewünschte Zielpartition ist und ob sie mindestens die Größe des Images besitzt. Alle vorhandenen Daten auf dem Ziel werden überschrieben. Hänge die Zielpartition aus, bevor du schreibst:

sudo umount /dev/sdc1

Nach der Wiederherstellung kannst du mit lsblk und gegebenenfalls blkid kontrollieren, ob die Partition und ihr Dateisystem wieder erkannt werden.

Ein komplettes Laufwerk klonen

Ein Laufwerksklon kopiert den gesamten Datenträger einschließlich Partitionstabelle, Partitionen, Bootinformationen und ungenutzter Bereiche:

sudo dd if=/dev/sdc of=/dev/sdd bs=4M status=progress conv=fsync

Der Unterschied zwischen /dev/sdc1 und /dev/sdc ist entscheidend: Die erste Schreibweise bezeichnet eine einzelne Partition, die zweite das gesamte Laufwerk. Das Ziellaufwerk /dev/sdd muss mindestens so groß wie die Quelle sein. Alle Daten auf dem Ziel gehen verloren.

Dieser Vorgang eignet sich beispielsweise, um eine Installation auf gleichartigen Datenträgern zu vervielfältigen. Nach dem Klonen kann ein größerer Datenträger zunächst die alte Partitionsstruktur enthalten; zusätzlichen Platz musst du anschließend mit geeigneten Partitionierungs- und Dateisystemwerkzeugen nutzen.

CDs, DVDs und ISO-Images

Ein optisches Laufwerk wird unter Linux häufig als /dev/sr0 angezeigt. Ein vollständiges Abbild einer CD oder DVD kannst du so lesen:

dd if=/dev/sr0 of=/pfad/zu/datentraeger.iso bs=4M status=progress

Der konkrete Gerätename kann abweichen. Ein ISO-Image lässt sich als Rohdaten auf ein geeignetes USB-Zielgerät schreiben:

sudo dd if=/pfad/zu/system.iso of=/dev/sdd bs=4M status=progress conv=fsync

Speicherbedarf und Grenzen

dd kennt den freien Bereich eines Dateisystems nicht als „unnötig“. Es liest jeden Block des gewählten Quellbereichs, auch wenn dieser keine aktuellen Dateien enthält. Eine 500-GB-Partition mit nur 20 GB belegten Daten erzeugt daher grundsätzlich ein Image, das sich an der gesamten Partitionsgröße orientiert.

QuelltypWas kopiert wirdTypischer AnwendungsfallSpeicher- oder Größenanforderung
Einzelne DateiDie Bytes dieser DateiRohdaten oder eine vorhandene Image-Datei kopierenEntspricht typischerweise der Dateigröße
PartitionPartition inklusive Metadaten und freien BereichenPartitionsimage für Sicherung oder WiederherstellungZiel muss die vollständige Partitionsgröße aufnehmen
Gesamter DatenträgerPartitionstabelle, Bootdaten und alle PartitionenKompletter Klon oder LaufwerksimageZiel muss mindestens so groß wie der Quelldatenträger sein
CD/DVDRohdaten des optischen DatenträgersISO-Abbild erstellenSpeicherplatz für die gesamte Datenträgerkapazität
Image-Datei auf ZielgerätDie Image-Bytes auf Partition oder LaufwerkBootmedium oder Sicherung wiederherstellenZielbereich muss groß genug sein; vorhandene Daten werden überschrieben

dd bietet keine eingebaute Komprimierung und keine inkrementelle Sicherung. Für platzsparende Backups sind dateibasierte Verfahren wie rsync oder tar oft geeigneter. Ein Image kann nachträglich mit Werkzeugen wie gzip oder xz komprimiert werden, das Lesen der gesamten Rohquelle erfolgt aber zunächst trotzdem.

Integrität und Überprüfung

Erzeuge nach dem Sichern eine SHA-256-Prüfsumme:

sha256sum /pfad/zu/sdc1.img > /pfad/zu/sdc1.img.sha256
sha256sum -c /pfad/zu/sdc1.img.sha256

Eine SHA-256-Prüfsumme ist ein Prüfwert. Stimmen die später berechnete und die gespeicherte Prüfsumme überein, ist das Image mit hoher Wahrscheinlichkeit unverändert. Zusätzlich solltest du die Dateigröße kontrollieren und nach einer Wiederherstellung mit lsblk und blkid prüfen, ob Partitionen und Dateisysteme erkannt werden.

Bei passenden, nicht eingehängten Geräten ist auch ein direkter Vergleich möglich:

sudo cmp /dev/sdc /dev/sdd

Dieser Vergleich liest beide Geräte vollständig und kann lange dauern. Setze ihn nur ein, wenn Quelle und Ziel dieselbe erwartete Größe und denselben Inhalt haben und kein System darauf arbeitet. Für kritische Backups ist ein praktischer Wiederherstellungstest auf einem separaten Datenträger aussagekräftiger als eine reine Dateiprüfsumme.

Beschädigte Medien und Lesefehler

Ein Input/Output-Fehler beim Lesen weist möglicherweise auf beschädigte Sektoren, ein defektes Kabel, ein fehlerhaftes Laufwerk oder ein anderes Hardwareproblem hin. Die Option conv=noerror,sync weist dd an, bei Lesefehlern weiterzulaufen und den fehlerhaften Eingabeblock mit Nullen aufzufüllen:

sudo dd if=/dev/sdc of=/pfad/zu/rettung.img bs=4M status=progress conv=noerror,sync

Das kann den Kopiervorgang abschließen, repariert aber keine Daten. Die aufgefüllten Blöcke stellen keine gültigen Originaldaten dar. Für ernsthafte Datenrettung ist ein spezialisiertes Werkzeug wie ddrescue geeigneter, weil es Fehlerbereiche kontrollierter behandelt, problematische Stellen gezielt erneut liest und den Fortschritt protokollieren kann.

Sicherheitscheck vor jedem Schreibvorgang

  1. Identifiziere Quelle und Ziel mit lsblk, blkid und gegebenenfalls mount.
  2. Vergleiche Modell, Größe und Partitionsnummern mit deiner Planung.
  3. Prüfe, dass if= wirklich die Quelle und of= wirklich das Ziel ist.
  4. Hänge die zu überschreibenden Partitionen aus.
  5. Beende Programme, die auf dem Zielmedium arbeiten.
  6. Stelle sicher, dass das Ziel mindestens die erforderliche Größe besitzt.
  7. Führe den Befehl mit möglichst eindeutigen Pfaden und bewusst eingesetzten Root-Rechten aus.
  8. Warte auf das Ende, führe bei Bedarf sync aus und entferne das Medium erst danach.
  9. Verifiziere Imagegröße, Prüfsumme und erkannte Partitionen.

Typische Fehler und ihre Behebung

Falsches Ziel oder vertauschtes if= und of=

dd besitzt keine interaktive Sicherheitsabfrage. Brich den Vorgang sofort ab, sobald ein falsches Gerät auffällt, und führe keine weiteren Schreibvorgänge aus. Prüfe Gerätenamen, Größe, Modell und Einhängungen erneut mit lsblk. Eine bereits überschriebene Struktur lässt sich nicht zuverlässig mit dd zurückholen.

Nicht genügend Speicherplatz

Das Image enthält auch freie Bereiche der Partition. Verwende ein ausreichend großes Ziel oder ein dateisystembewusstes Backup-Verfahren, wenn nur belegte Dateien gesichert werden sollen.

Das Zielmedium ist kleiner

Ein Rohklon kopiert die vollständige Quellgröße. Ein kleineres Ziel funktioniert daher nicht, selbst wenn auf der Quelle nur wenige Daten belegt sind. Dafür müssten Partition und Dateisystem zuerst mit geeigneten Werkzeugen verkleinert werden; dd erledigt diese Anpassung nicht.

Gerät ist eingehängt oder belegt

Ermittle die Einhängungen mit lsblk oder mount, hänge das betreffende Dateisystem aus und stoppe gegebenenfalls zugreifende Anwendungen. Für die aktive Systempartition solltest du von einem Live-System booten.

Schreibvorgänge scheinen noch nicht abgeschlossen

Zwischengespeicherte Daten können dazu führen, dass Änderungen nicht sofort sichtbar sind. Verwende conv=fsync oder führe nach dem Befehl sync aus. Entferne ein Wechselmedium erst danach.

Prüfungsrelevante Merksätze

  • if= ist die Eingabe, of= ist die Ausgabe.
  • /dev/sdc1 bezeichnet eine Partition; /dev/sdc bezeichnet den vollständigen Datenträger.
  • Ein Rohimage enthält auch freie Bereiche und kann deshalb deutlich größer sein als die belegten Dateien.
  • Ein Laufwerksklon benötigt ein Ziel, das mindestens so groß wie die Quelle ist.
  • conv=noerror,sync setzt bei Lesefehlern fort, garantiert aber keine vollständige Datenrettung.
  • Vor dem Schreiben sind Gerätename, Größe und Mountpoints zu prüfen; nach dem Schreiben sind Puffer und Integrität zu kontrollieren.

Weitere Informationen zum dd-Befehl unter Linux gehören in dieselbe Lernnotiz, da die korrekte Unterscheidung zwischen Partition und vollständigem Laufwerk für jeden Einsatz entscheidend ist.