Linux Deutsch

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.

ParameterZweckTypischer EinsatzSicherheits- oder Praxishinweis
if=EingabequellePartition, Datenträger, ISO-DateiQuelle sorgfältig prüfen; ein vertauschtes if= kann Datenverlust verursachen.
of=AusgabezielImage-Datei, Partition, DatenträgerDas Ziel wird überschrieben; vorhandene Daten können sofort verloren gehen.
bs=Größe eines Ein- und Ausgabeblocksbs=4M für große KopiervorgängeEine 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öckeBegrenzter Test- oder TeilbereichMit bs=1M count=10 werden beispielsweise 10 MiB verarbeitet.
skip=Blöcke vor dem Lesen überspringenVersetztes Lesen eines EingabebereichsDie Position bezieht sich auf die gewählte Blockgröße.
seek=Blöcke vor dem Schreiben überspringenVersetztes Schreiben in ein ZielDas Ziel muss groß genug sein; falsche Werte können Datenbereiche überschreiben.
status=progressLaufende FortschrittsanzeigeAnzeige übertragener Daten und GeschwindigkeitBei GNU dd verfügbar; ohne diese Option wirkt der Befehl oft längere Zeit still.
conv=fsyncVor dem Beenden Schreibpuffer synchronisierenSchreiben auf externe MedienZusätzlich kann danach sync ausgeführt werden.
conv=noerror,syncBei Lesefehlern fortfahren und fehlende Blöcke auffüllenBegrenzt bei problematischen MedienBeschä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,SERIAL
sudo blkid
findmnt

Optional 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=fsync

Die 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/sdc1

Das 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=fsync

Die 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/sdc1

Die 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=fsync

In 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.

AufgabeQuelltypZieltypWas wird übernommenGrößenanforderungBesonderheiten
Partitions-ImagePartition, z. B. /dev/sdc1Image-DateiGesamter adressierter PartitionsbereichSpeicher für die PartitionsgrößePartitionstabelle des Laufwerks wird nicht mitgesichert.
Partitions-WiederherstellungImage-DateiPartitionImage-InhaltZielpartition mindestens so großQuelle und Ziel im Befehl umkehren.
Vollständiges LaufwerksklonenGesamtes BlockgerätGesamtes BlockgerätPartitionstabelle, Bootdaten und PartitionenZieldatenträger mindestens so großKann identische UUIDs erzeugen.
ISO-Abbild lesenOptisches Laufwerk, z. B. /dev/sr0ISO-DateiAdressierter Inhalt des optischen DatenträgersFreier Speicher für das ImageDatenträger während des Lesens nicht wechseln.
ISO auf USB schreibenISO-DateiGesamter USB-DatenträgerISO einschließlich BootstrukturUSB-Ziel mindestens groß genugDer 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=progress

Ein 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:

sync

Belegter 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.gz

Wiederherstellung eines gzip-komprimierten Images:

gzip -dc /pfad/zu/sdc1.img.gz | sudo dd of=/dev/sdc1 bs=4M status=progress conv=fsync

Die 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/fstab prü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 sync ausfü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=progress

Fortschritt, 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,sync

Diese 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/sdc1
sha256sum /pfad/zu/sdc1.img

Die 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

WerkzeugGeeignet fürVorteilEinschränkung
ddBlockgeräte, Partitionen, Images, ISO-AbbilderEinfach, universell und blockgenauKennt belegte Blöcke nicht; falsche Ziele verursachen sofortigen Schaden.
tarDateiarchiveDateibewusst, gut für ausgewählte VerzeichnisseKeine sektorweise Kopie von Partitionstabellen oder Bootbereichen.
rsyncDateibasierte Sicherungen und SynchronisationÜberträgt nur UnterschiedeBenötigt ein zugängliches Dateisystem und bildet keine Rohsektoren ab.
partcloneImages unterstützter DateisystemeKann belegte Blöcke berücksichtigenNicht für jedes Dateisystem und jede Rohdatenaufgabe geeignet.
fsarchiverDateisystembasierte SicherungenFlexibler bei Wiederherstellung und PartitionsgrößenKein identischer Klon jedes einzelnen Sektors.
ddrescueBeschädigte DatenträgerRobuster Umgang mit Lesefehlern und WiederholungenFü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

  1. Quelle und Ziel eindeutig mit lsblk und blkid identifizieren.
  2. Prüfen, ob eine Partition oder das gesamte Laufwerk kopiert werden soll.
  3. Quell- und Ziel-Dateisysteme aushängen, sofern möglich.
  4. Image- oder Zielgröße kontrollieren.
  5. Den Befehl mit korrekt gesetztem if= und of= ausführen.
  6. Fortschritt beobachten und den Abschluss abwarten.
  7. sync ausführen.
  8. 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.