dd (disk dump) dient zum bit-genauen Kopieren von Festplatten, Partitionen oder Dateien. "Bit-genaues" Kopieren bedeutet, dass der Datenträger Bit-für-Bit bzw. Byte-für-Byte ausgelesen und beschrieben wird, unabhängig von dessen Inhalt und Belegung. dd ignoriert Dateisysteme und funktioniert mit allen blockorientierten Datenträgern, also auch mit Daten-CDs/DVDs.
Dieser Artikel beschreibt die Kommandozeilenversion. Wer lieber mit einer grafischen Benutzeroberfläche arbeitet, kann gdiskdump nutzen.
Achtung!
- dd wird ohne weitere Rückfragen bzw. Sicherheitsabfragen ausgeführt. Bei unachtsamen Aufrufen könnten evtl. vorhandene Daten überschrieben werden!
- Bevor man eine Partition oder komplette Platte sichert sollte diese ausgehängt werden, um sicherzustellen, dass während des Sicherungsvorgangs keine Daten auf die zu sicherende Platte geschrieben werden.
- Zur Übernahme eines bestehenden Systems auf eine SSD (Solid-State-Drive) sollte dd nur mit äußerster Vorsicht genutzt werden. In den Standardeinstellungen verwendet dd eine Blockgröße von 512 Bytes, was bei modernen SSD zu unnötigen Schreibprozessen führt. Verwendet man unter Benutzung des Parameters bs= eine Blockgrößenangabe die der Blockgröße oder einem Vielfachen davon der SSD entspricht, besteht diese Gefahr nicht. Des Weiteren sollte man beachten, dass das Alignment eingehalten wird, was ohne weitere Parameter höchstwahrscheinlich nicht der Fall ist.
Installation
Das Programm befindet sich im Paket
coreutils
Verwendung
Die allgemeine Syntax lautet:
dd if=Quelle of=Ziel <Optionen>
- if steht für "Input File", kann ein komplettes Gerät (z.B. /dev/sda), eine Partition oder eine Datei sein.
- of steht für "Output File", kann ein komplettes Gerät (z.B. /dev/sdb), eine Partition oder eine Datei sein.
dd kann ohne Root-Rechte aufgerufen werden. Man benötigt nur dann Root-Rechte, wenn von einem Gerät bzw. einer Partition gelesen bzw. darauf geschrieben werden soll, auf die nur Root Zugriff hat. Beim Lesen von CD/DVDs muss dd grundsätzlich mit Root-Rechten aufgerufen werden.
Optionen
Typ | Beschreibung |
obs=BYTES | Es wird in Blöcken mit der Größe BYTES geschrieben. |
ibs=BYTES | Es werden Blöcke der Größe BYTES gelesen. |
bs=BYTES | Es werden Blöcke mit der Größe BYTES gelesen und geschrieben. Wird bs als Option benutzt, so ist ibs = obs = bs. |
count=BLOCKS | BLOCKS gibt an, wie viele Blöcke mit der durch bs / obs / ids festgelegten Größe gelesen und / oder geschrieben werden. |
seek=BLOCKS | BLOCKS gibt an, wie viele Blöcke der mit obs oder bs festgelegten Größe zu Beginn des Schreibvorgangs übersprungen werden. |
skip=BLOCKS | BLOCKS gibt an, wie viele Blöcke der mit ibs oder bs festgelegten Größe zu Beginn des Lesevorgangs übersprungen werden sollen. |
status=noxfer | Unterdrückt die Ausgabe von Statusinformationen während des Kopiervorgangs. Durch kill -SIGUSR1 <dd-prozess-id> wird der laufende dd manuell dazu veranlasst, Statusinformationen auszugeben. |
status=progress | Zeigt während des Kopiervorgangs einen Fortschrittsbalken an. |
Weitere Parameter
Für die Angaben BYTES und BLOCKS gilt:
BYTES muss ganzzahlig sein. Ohne weiteres Suffix wird die Größe der Zahl BYTES in Byte interpretiert.
BLOCKS muss ganzzahlig sein.
Des Weiteren kennt dd noch verschiedene andere Optionen, insbesondere zum Konvertieren der Daten zwischen Einlesen und Ausgabe. Diese werden bei "normaler" Benutzung eher selten gebraucht, können aber in den Manpages von dd nachgelesen werden.
Suffixe für BYTES
Typ | Beschreibung |
KB | 1000 (d.h. 1KB entspricht 1000 Byte) |
K | 1024 (d.h. 1K entspricht 1024 Byte) |
MB | 1000000 (= 1000 * 1000, d.h. 1MB entspricht 1000000 Byte) |
M | 1048576 (= 1024 * 1024, d.h. 1M entspricht 1048576 Byte) |
GB | 1000000000 (= 1000 * 1000 * 1000, d.h. 1GB entspricht 1000000000 Byte) |
G | 1073741824 (= 1024 * 1024 * 1024, d,h, 1G entspricht 1073741824 Byte) |
Gemäß dem in der Tabelle aufgezeigten Schema gibt es auch die Suffixe TB, T, PB, P, EB, E, ZB, Z, YB, Y - für alle, die wirklich große Datenmengen kopieren müssen.Die gleichen Suffixe gelten auch für BLOCKS, d.h. z.B. mit count=1K werden 1024 Blöcke gelesen/geschrieben, mit count=1MB 1000000 Blöcke, usw.
Live USB-Stick erstellen
Mit dd lässt sich auch auf einfache Art und Weise ein Live USB-Stick (als Ersatz für eine Live-DVD/CD) erstellen.
Zum „brennen“ des ISO-Abbilds auf den USB-Stick muss man dessen Gerätedatei (so etwas wie beispielsweise /dev/sdc) kennen. Diesen kann man mit folgender Prozedur ermitteln:
1. Man wartet nach dem Start des Betriebssystems einige Minuten und startet dann ein Terminal.
2. Dann erst steckt man den zu beschreibenden USB-Stick ein.
3. Im Terminal führt man diesen Befehl aus:
ls -lt /dev/sd* | head
Man erhält eine Ausgabe der Gerätedateien, die jüngsten angelegten gehören zum USB-Stick. Mindestens sollte eine Datei nach dem Muster /dev/sdx (der Kleinbuchstabe „x“ variiert je nach Situation) angezeigt werden; eventuell auch eine oder mehrere weitere nach dem Muster /dev/sdxN mit Ziffer(n) am Ende, diese gehören zu bereits angelegten Partitionen auf dem Stick.
Es ist auch möglich, dass der Datenträger nicht vom SCSI/SATA-Treiber, sondern vom NVMe-Treiber verwaltet wird – dann muss man natürlich nach Gerätedateien mit dem Muster /dev/nvme* suchen.
Diese Anleitung verwendet im folgenden /dev/sdX bzw. /dev/sdXN, vor Ausführung der folgenden Befehle müssen diese Bezeichnungen durch die selbst ermittelten ersetzt werden!Der Stick wird von Ubuntu beim Einstecken meist automatisch eingehangen, deshalb müssen dessen Dateisysteme zuerst ausgehangen werden (aber bitte nicht auswerfen oder "sicher entfernen"). Dies kann über die GUI erfolgen oder mit diesem Befehl, der für jede Partition angewendet werden muss:
sudo umount /dev/sdXN # X und N individuell ersetzen!
Zuletzt muss man noch bei Sticks ohne Partitionstabelle den Stick selbst aushängen:
sudo umount /dev/sdX # X individuell ersetzen!
Die beiden Befehle zum Aushängen können Fehler werfen, wenn zwar die Partitionen existieren, aber nicht formatiert sind; man kann diese ignorieren.Wenn der Stick eine GPT-Partitionstabelle (mit Backup-Tabelle am Ende des Speicherbereichs) aufweist, sollte man diese mit gdisk entfernen:
sudo sgdisk -Z /dev/sdX # X individuell ersetzen!
Nach diesen Vorbereitungen kopiert der nächste Befehl dann das Live-Medium-Abbild auf den Stick. Alle Daten auf dem Stick werden dabei überschrieben oder mindestens unzugänglich. Ein weiteres Hinzufügen von Dateien darauf ist nicht möglich.
sudo dd if=NAME_ISO-ABBBILD of=/dev/sdX bs=4M status=progress conv=fdatasync
Dabei ist natürlich für NAME_ISO_ABBILD der eigene Dateiname einzusetzen.Dabei beachten, dass statt /dev/sdX die richtige Geräte-Datei zum mit of= bezeichneten Ziel angegeben wird (z.B. /dev/sdc) und nicht eine zu einer Partition (z.B. sdc1).Den Parameter bs=4M kann man auch weglassen, aber er beschleunigt den Kopiervorgang und verlängert die Lebensdauer des Flash-Speichers.
Festplatte klonen
Der folgende Befehl klont (kopiert) die komplette Festplatte /dev/sda inklusive aller Partitionen, MBR und Partitionstabelle auf die eine zweite Festplatte /dev/sdb:
dd if=/dev/sda of=/dev/sdb
Festplatte (sicher) löschen
Der folgende Befehl löscht die komplette Festplatte /dev/sdX durch Überschreiben mit Nullen:
dd bs=1M if=/dev/zero of=/dev/sdX
Der folgende Befehl löscht die komplette Festplatte /dev/sdX durch Überschreiben mit Zufallsdaten:
dd bs=1M if=/dev/urandom of=/dev/sdX