dd-Befehl unter Linux: Datenträger und Partitionen bitgenau kopieren
Der dd-Befehl unter Linux erklärt: Partitionen und Laufwerke als Image sichern, Datenträger klonen, ISO-Dateien erstellen, Fortschritt prüfen und Datenverlust vermeiden.
Was ist der dd-Befehl?
dd ist ein Unix-Werkzeug zum blockorientierten Kopieren und Umwandeln von Datenströmen. Es liest Daten aus einer Quelle und schreibt sie ohne Rücksicht auf Dateien, Verzeichnisse oder den belegten Speicherplatz in ein Ziel.
Dadurch eignet sich dd für bit- beziehungsweise sektornahe Kopien von regulären Dateien, Partitionen, vollständigen Laufwerken und optischen Datenträgern. Wird ein komplettes Blockgerät kopiert, können neben den Nutzdaten auch Partitionstabellen, Bootinformationen und andere Metadaten erfasst werden.
Beim Kopieren einer einzelnen Datei kennt das Betriebssystem Dateiname, Rechte und Dateiinhalte. Beim Kopieren eines Blockgeräts arbeitet dd dagegen mit den adressierten Datenblöcken. Es interpretiert das Dateisystem nicht.
Grundsyntax und zentrale Operanden
Die grundlegende Syntax lautet:
dd if=QUELLE of=ZIEL [Optionen]if= steht für „input file“ und bezeichnet die Eingabequelle. of= steht für „output file“ und bezeichnet das Ausgabeziel. Beide können Dateien oder Gerätedateien sein.
| Parameter | Zweck | Typischer Einsatz | Sicherheits- oder Praxishinweis |
|---|---|---|---|
if= | Eingabequelle | Partition, Datenträger, ISO-Datei | Quelle sorgfältig prüfen; ein vertauschtes if= kann Datenverlust verursachen. |
of= | Ausgabeziel | Image-Datei, Partition, Datenträger | Das Ziel wird überschrieben; vorhandene Daten können sofort verloren gehen. |
bs= | Größe eines Ein- und Ausgabeblocks | bs=4M für große Kopiervorgänge | Eine größere Blockgröße kann den Vorgang beschleunigen, ist aber kein Ersatz für eine Prüfung der Geräte. |
count= | Anzahl zu verarbeitender Blöcke | Begrenzter Test- oder Teilbereich | Mit bs=1M count=10 werden beispielsweise 10 MiB verarbeitet. |
skip= | Blöcke vor dem Lesen überspringen | Versetztes Lesen eines Eingabebereichs | Die Position bezieht sich auf die gewählte Blockgröße. |
seek= | Blöcke vor dem Schreiben überspringen | Versetztes Schreiben in ein Ziel | Das Ziel muss groß genug sein; falsche Werte können Datenbereiche überschreiben. |
status=progress | Laufende Fortschrittsanzeige | Anzeige übertragener Daten und Geschwindigkeit | Bei GNU dd verfügbar; ohne diese Option wirkt der Befehl oft längere Zeit still. |
conv=fsync | Vor dem Beenden Schreibpuffer synchronisieren | Schreiben auf externe Medien | Zusätzlich kann danach sync ausgeführt werden. |
conv=noerror,sync | Bei Lesefehlern fortfahren und fehlende Blöcke auffüllen | Begrenzt bei problematischen Medien | Beschädigte Daten werden nicht repariert. Für Datenrettung ist meist ddrescue geeigneter. |
Mit count=, skip= und seek= lassen sich Teilbereiche kopieren. Die Werte zählen Blöcke, nicht automatisch Bytes. Bei bs=4M entspricht ein Block ungefähr 4 MiB.
Geräte sicher identifizieren
Linux stellt Datenträger als Gerätedateien unter /dev bereit. Ein vollständiges Laufwerk kann beispielsweise /dev/sdc heißen. Eine Partition auf diesem Laufwerk heißt dann etwa /dev/sdc1. Das Laufwerk und die Partition sind unterschiedliche Ziele:
/dev/sdc: gesamtes Laufwerk einschließlich Partitionstabelle und Bootbereichen/dev/sdc1: nur die erste Partition
Vor jedem Kopiervorgang sollten Geräte, Größen, Dateisysteme, Modelle und Einhängepunkte geprüft werden:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIALsudo blkidfindmntOptional liefert auch fdisk -l Informationen über Partitionstabellen und Größen. Nach Möglichkeit sind stabile Pfade wie /dev/disk/by-id/ besser geeignet als wechselnde Namen wie /dev/sdb oder /dev/sdc.
Partition als Image sichern
Ein Partitions-Image ist eine Datei mit einer blockgenauen Kopie der gewählten Partition. Beispiel für die Sicherung von /dev/sdc1:
sudo dd if=/dev/sdc1 of=/pfad/zu/sdc1.img bs=4M status=progress conv=fsyncDie Image-Datei muss auf einem anderen, ausreichend großen Dateisystem liegen. Idealerweise wird die Quellpartition vorher ausgehängt, damit sich während des Lesens keine Dateien ändern:
sudo umount /dev/sdc1Das Ziel muss mindestens die erforderliche Größe für die Partition besitzen. Bei dd zählt die Größe des kopierten Bereichs, nicht nur die tatsächlich belegte Dateimenge.
Partition aus einem Image wiederherstellen
Zum Wiederherstellen werden Quelle und Ziel umgekehrt. Das Image ist nun die Eingabe und die Partition das Ausgabeziel:
sudo dd if=/pfad/zu/sdc1.img of=/dev/sdc1 bs=4M status=progress conv=fsyncDie Zielpartition muss mindestens so groß sein wie die ursprüngliche Partition beziehungsweise wie der Inhalt des Images. Nach dem Schreiben sollte das Ergebnis geprüft werden. Bei einem ext-Dateisystem kann beispielsweise eine Dateisystemprüfung folgen:
sudo e2fsck -f /dev/sdc1Die Prüfung darf nicht auf einem eingehängten Dateisystem durchgeführt werden. Zusätzlich sind Dateien, Dateisystemgröße und gegebenenfalls die Bootfähigkeit zu kontrollieren.
Ein vollständiges Laufwerk klonen
Beim Klonen des gesamten Laufwerks wird nicht nur eine Partition kopiert. Auch MBR oder GPT, Partitionstabelle, Bootinformationen und sämtliche enthaltenen Partitionen werden übertragen:
sudo dd if=/dev/sdc of=/dev/sdd bs=4M status=progress conv=fsyncIn diesem Beispiel ist /dev/sdc die Quelle und /dev/sdd das Ziel. Das Ziel muss mindestens so groß wie die Quelle sein. Ein gleich großes Laufwerk kann passen; geringfügig unterschiedliche Herstellerangaben oder tatsächlich verfügbare Sektoren können trotzdem Probleme verursachen.
| Aufgabe | Quelltyp | Zieltyp | Was wird übernommen | Größenanforderung | Besonderheiten |
|---|---|---|---|---|---|
| Partitions-Image | Partition, z. B. /dev/sdc1 | Image-Datei | Gesamter adressierter Partitionsbereich | Speicher für die Partitionsgröße | Partitionstabelle des Laufwerks wird nicht mitgesichert. |
| Partitions-Wiederherstellung | Image-Datei | Partition | Image-Inhalt | Zielpartition mindestens so groß | Quelle und Ziel im Befehl umkehren. |
| Vollständiges Laufwerksklonen | Gesamtes Blockgerät | Gesamtes Blockgerät | Partitionstabelle, Bootdaten und Partitionen | Zieldatenträger mindestens so groß | Kann identische UUIDs erzeugen. |
| ISO-Abbild lesen | Optisches Laufwerk, z. B. /dev/sr0 | ISO-Datei | Adressierter Inhalt des optischen Datenträgers | Freier Speicher für das Image | Datenträger während des Lesens nicht wechseln. |
| ISO auf USB schreiben | ISO-Datei | Gesamter USB-Datenträger | ISO einschließlich Bootstruktur | USB-Ziel mindestens groß genug | Der gesamte USB-Stick wird überschrieben. |
UUIDs und geklonte Systeme
Eine UUID ist eine eindeutige Kennung eines Dateisystems oder einer Partition. Ein sektorweiser Klon übernimmt diese Kennung häufig unverändert. Werden Quelle und Klon gleichzeitig angeschlossen oder betrieben, können dadurch Konflikte entstehen, etwa bei Einträgen in /etc/fstab.
Bei mehrfach ausgerollten Linux-Installationen sollten nach dem Klonen außerdem eindeutige Hostnamen, Netzwerkkonfigurationen und gegebenenfalls neue SSH-Host-Schlüssel eingerichtet werden. Prüfe die UUIDs und die Einträge in /etc/fstab, bevor beide Systeme parallel verwendet werden.
Optische Datenträger und ISO-Abbilder
Ein CD- oder DVD-Abbild lässt sich aus einem optischen Laufwerk in eine ISO-Datei lesen:
sudo dd if=/dev/sr0 of=/pfad/zu/datentraeger.iso bs=4M status=progressEin vorhandenes ISO-Abbild kann auf einen geeigneten vollständigen USB-Datenträger geschrieben werden:
sudo dd if=/pfad/zu/system.iso of=/dev/sdX bs=4M status=progress conv=fsync/dev/sdX ist dabei nur ein Platzhalter. Verwende den tatsächlich identifizierten vollständigen USB-Datenträger, nicht eine einzelne Partition wie /dev/sdX1. Alle vorhandenen Daten auf dem Ziel können überschrieben werden. Nach dem Schreiben:
syncBelegter und unbelegter Speicherplatz
dd kopiert jeden Block im adressierten Bereich. Freie Blöcke eines Dateisystems werden nicht automatisch übersprungen. Ein Image einer 20-GB-Partition benötigt deshalb grundsätzlich ungefähr 20 GB, selbst wenn nur 3 GB Dateien enthalten sind.
Das wirkt sich auf Speicherbedarf, Kopierdauer und Übertragungszeit aus. Eine Komprimierung über eine Pipe kann freie oder wiederholte Daten oft gut reduzieren:
sudo dd if=/dev/sdc1 bs=4M status=progress | gzip > /pfad/zu/sdc1.img.gzWiederherstellung eines gzip-komprimierten Images:
gzip -dc /pfad/zu/sdc1.img.gz | sudo dd of=/dev/sdc1 bs=4M status=progress conv=fsyncDie Komprimierung spart Platz, muss aber die Daten weiterhin vollständig lesen. Für dateisystembewusste Sicherungen, die nur belegte Blöcke berücksichtigen, sind partclone oder fsarchiver oft passender. Für Dateiarchive eignen sich beispielsweise tar oder rsync.
Gleichartige Linux-Installationen verteilen
Ein vollständiger Klon ist praktisch, wenn mehrere Systeme identisch konfiguriert werden sollen. Alle Zielmedien müssen mindestens so groß wie das Quellmedium sein. Nach dem Kopieren sind systemspezifische Anpassungen erforderlich:
- eindeutigen Hostnamen setzen
- UUIDs und
/etc/fstabprüfen - Netzwerkidentität und Netzwerkkonfiguration anpassen
- bei Bedarf SSH-Host-Schlüssel regenerieren
- Bootloader und Partitionen auf dem Ziel testen
Für unterschiedliche Zielgrößen oder Installationen, die nur Dateien und nicht jeden freien Block übernehmen sollen, sind dateisystembewusste Werkzeuge meist geeigneter als ein vollständiger Sektor-für-Sektor-Klon.
Sicherheitsmaßnahmen gegen Datenverlust
- Quelle und Ziel mit
lsblk,blkid, Modell, Seriennummer und Größe prüfen. - Quell- und Zielpartitionen vor dem Klonen in der Regel aushängen.
- Niemals auf das aktuell verwendete Systemlaufwerk schreiben.
- Vorher unabhängige Sicherungen wichtiger Daten anlegen.
- Bei Unsicherheit zunächst einen kleinen, ungefährlichen Testlauf mit
count=verwenden. - Nach dem Schreiben
syncausführen und externe Medien erst danach entfernen.
Ein Testlauf kann beispielsweise nur einen kleinen Bereich in eine unkritische Datei lesen:
sudo dd if=/dev/sdc1 of=/tmp/testbereich.img bs=1M count=10 status=progressFortschritt, Fehlerbehandlung und Integrität
status=progress zeigt während des Vorgangs die übertragene Datenmenge an. Ohne diese Option kann ein langer Kopiervorgang scheinbar hängen, obwohl er arbeitet.
conv=noerror,sync lässt dd bei Lesefehlern weiterlaufen und füllt den nicht lesbaren Block auf, damit die Position nachfolgender Blöcke erhalten bleibt:
sudo dd if=/dev/sdc of=/pfad/zu/abbild.img bs=4M status=progress conv=noerror,syncDiese Option stellt beschädigte Daten nicht wieder her. Bei defekten oder instabilen Datenträgern ist ddrescue meist besser geeignet, weil es problematische Bereiche gezielter bearbeitet und den Fortschritt protokollieren kann.
Eine Image-Datei lässt sich durch Prüfsummen mit einer erneuten Lesung der Quelle vergleichen:
sudo sha256sum /dev/sdc1sha256sum /pfad/zu/sdc1.imgDie Quelle sollte während des Vergleichs unverändert bleiben, idealerweise ausgehängt oder schreibgeschützt sein. Bei vollständigen Laufwerken sollten zusätzlich Partitionslayout, Dateisysteme und wichtige Dateien geprüft werden.
dd und Alternativen im Vergleich
| Werkzeug | Geeignet für | Vorteil | Einschränkung |
|---|---|---|---|
dd | Blockgeräte, Partitionen, Images, ISO-Abbilder | Einfach, universell und blockgenau | Kennt belegte Blöcke nicht; falsche Ziele verursachen sofortigen Schaden. |
tar | Dateiarchive | Dateibewusst, gut für ausgewählte Verzeichnisse | Keine sektorweise Kopie von Partitionstabellen oder Bootbereichen. |
rsync | Dateibasierte Sicherungen und Synchronisation | Überträgt nur Unterschiede | Benötigt ein zugängliches Dateisystem und bildet keine Rohsektoren ab. |
partclone | Images unterstützter Dateisysteme | Kann belegte Blöcke berücksichtigen | Nicht für jedes Dateisystem und jede Rohdatenaufgabe geeignet. |
fsarchiver | Dateisystembasierte Sicherungen | Flexibler bei Wiederherstellung und Partitionsgrößen | Kein identischer Klon jedes einzelnen Sektors. |
ddrescue | Beschädigte Datenträger | Robuster Umgang mit Lesefehlern und Wiederholungen | Für einfache fehlerfreie Kopien oft unnötig komplex. |
Typische Probleme und Lösungen
Das falsche Laufwerk wurde gewählt
Gerätenamen können sich nach dem Anschließen von Medien ändern. Beende den Vorgang sofort, wenn er noch läuft. Prüfe anschließend Geräte-ID, Größe, Modell, Seriennummer und Einhängepunkte. Verwende nach Möglichkeit einen Pfad unter /dev/disk/by-id/. Bereits überschriebene Daten sind möglicherweise dauerhaft verloren.
Das Ziel ist kleiner als die Quelle
Ein vollständiges Image oder ein Laufwerksklon passt nicht auf ein kleineres Ziel, auch wenn die Quelle nur wenig belegten Speicher enthält. Verwende ein mindestens gleich großes Ziel oder ein dateisystembewusstes Sicherungswerkzeug.
Das Image ist unerwartet groß
Das ist bei dd normal, weil auch freie Blöcke kopiert werden. Plane Speicher für die vollständige Partitionsgröße ein oder verwende Komprimierung beziehungsweise partclone, fsarchiver, tar oder rsync.
Es erscheint kein Fortschritt
Verwende status=progress. Bei einem bereits laufenden GNU-dd-Prozess kann ein geeignetes Statussignal eine Zwischenmeldung auslösen; die Dokumentation deiner Distribution ist dabei maßgeblich.
Lesefehler treten auf
Lesefehler deuten auf defekte Sektoren oder instabile Hardware hin. Arbeite nicht unkontrolliert wiederholt mit Standard-dd. Sichere zuerst auf ein anderes Medium und verwende für die Datenrettung möglichst ddrescue. conv=noerror,sync kann den Vorgang fortsetzen, repariert aber keine beschädigten Daten.
Das Dateisystem wirkt nach dem Schreiben unvollständig
Schreibpuffer waren möglicherweise noch nicht vollständig übertragen oder das Medium wurde zu früh entfernt. Nutze conv=fsync, führe danach sync aus und hänge das Medium erst anschließend aus oder entferne es.
Prüfung für die Praxis
- Quelle und Ziel eindeutig mit
lsblkundblkididentifizieren. - Prüfen, ob eine Partition oder das gesamte Laufwerk kopiert werden soll.
- Quell- und Ziel-Dateisysteme aushängen, sofern möglich.
- Image- oder Zielgröße kontrollieren.
- Den Befehl mit korrekt gesetztem
if=undof=ausführen. - Fortschritt beobachten und den Abschluss abwarten.
syncausführen.- Prüfsumme, Partitionslayout und Dateisystem prüfen.
Für Grundlagen zu Dateisystemen und Prüfungen helfen die Beiträge Dateisysteminformationen anzeigen, Dateisystemcheck durchführen und fdisk. Für dateibasierte Sicherungen sind Archive mit tar und Datenströme unter Linux passende Ergänzungen.