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.
| Parameter | Bedeutung | Typischer Einsatz | Risiko oder Hinweis |
|---|---|---|---|
if= | Eingabequelle | Datei, Partition, Laufwerk oder optisches Laufwerk lesen | Quelle sorgfältig prüfen |
of= | Ausgabeziel | Image-Datei, Partition oder Laufwerk beschreiben | Das Ziel wird direkt überschrieben |
bs= | Größe der Ein- und Ausgabeblöcke | bs=4M für viele normale Kopiervorgänge | Verändert die Blockgröße, nicht automatisch die Datenmenge |
ibs= | Größe der Eingabeblöcke | Eingabe- und Ausgabegröße getrennt festlegen | Wird von bs= gemeinsam gesetzt |
obs= | Größe der Ausgabeblöcke | Schreibverhalten getrennt von der Eingabe steuern | Wird von bs= gemeinsam gesetzt |
count= | Anzahl der zu kopierenden Eingabeblöcke | Nur einen begrenzten Bereich kopieren | Mit bs= ergibt sich die maximale Datenmenge |
status=progress | Zeigt laufenden Fortschritt an | Große Images und Klone beobachten | Nur Anzeige, keine zusätzliche Sicherung |
conv=fsync | Fordert vor dem Ende das Schreiben gepufferter Daten an | Schreibvorgänge auf Images und Geräten abschließen | Kann das Ende des Befehls verzögern |
conv=noerror,sync | Bei Lesefehlern weiterarbeiten und fehlerhafte Blöcke auffüllen | Einfache Behandlung beschädigter Medien | Das 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üfschritt | Beispielwerkzeug oder Befehl | Warum er wichtig ist |
|---|---|---|
| Geräte identifizieren | lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS | Zeigt Laufwerke, Partitionen, Größen und Mountpoints |
| Größe vergleichen | lsblk | Verhindert ein zu kleines Zielmedium |
| Einhängungen prüfen | mount oder die Mountpoint-Spalte von lsblk | Zeigt, ob ein Gerät gerade verwendet wird |
| Ziel aushängen | sudo umount /dev/sdd1 | Verhindert konkurrierende Zugriffe auf das Ziel |
| Prüfsumme nach dem Backup erstellen | sha256sum /pfad/zu/sdc1.img | Ermö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.
| Quelltyp | Was kopiert wird | Typischer Anwendungsfall | Speicher- oder Größenanforderung |
|---|---|---|---|
| Einzelne Datei | Die Bytes dieser Datei | Rohdaten oder eine vorhandene Image-Datei kopieren | Entspricht typischerweise der Dateigröße |
| Partition | Partition inklusive Metadaten und freien Bereichen | Partitionsimage für Sicherung oder Wiederherstellung | Ziel muss die vollständige Partitionsgröße aufnehmen |
| Gesamter Datenträger | Partitionstabelle, Bootdaten und alle Partitionen | Kompletter Klon oder Laufwerksimage | Ziel muss mindestens so groß wie der Quelldatenträger sein |
| CD/DVD | Rohdaten des optischen Datenträgers | ISO-Abbild erstellen | Speicherplatz für die gesamte Datenträgerkapazität |
| Image-Datei auf Zielgerät | Die Image-Bytes auf Partition oder Laufwerk | Bootmedium oder Sicherung wiederherstellen | Zielbereich 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
- Identifiziere Quelle und Ziel mit
lsblk,blkidund gegebenenfallsmount. - Vergleiche Modell, Größe und Partitionsnummern mit deiner Planung.
- Prüfe, dass
if=wirklich die Quelle undof=wirklich das Ziel ist. - Hänge die zu überschreibenden Partitionen aus.
- Beende Programme, die auf dem Zielmedium arbeiten.
- Stelle sicher, dass das Ziel mindestens die erforderliche Größe besitzt.
- Führe den Befehl mit möglichst eindeutigen Pfaden und bewusst eingesetzten Root-Rechten aus.
- Warte auf das Ende, führe bei Bedarf
syncaus und entferne das Medium erst danach. - 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/sdc1bezeichnet eine Partition;/dev/sdcbezeichnet 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,syncsetzt 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.