Dd – DebianforumWiki
发布时间:2026-09-19 | 浏览:1
Dieser Artikel wurde für Debian Wheezy 7.0 getestet.
dd 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 funktioniert grundsätzlich mit allen Dateisystemen auf die Debian / Linux zugreifen kann (z.B. ext2/3, reiserfs, vfat, ntfs etc.). Es funktioniert auch mit CD/DVD-Dateisystemen, allerdings nur für Daten-CDs/DVDs.
Inhaltsverzeichnis
4 Suffixe für BYTES
5 Anwendungen 5.1 Einige allgemeine Beispiele 5.2 Festplatte klonen 5.3 Festplatte (sicher) löschen 5.4 Partitionen klonen 5.5 Image einer Partition sichern 5.6 Dateigröße des Images begrenzen 5.7 MBR: Boot-Loader und Partitionstabelle sichern
5.1 Einige allgemeine Beispiele
5.2 Festplatte klonen
5.3 Festplatte (sicher) löschen
5.4 Partitionen klonen
5.5 Image einer Partition sichern
5.6 Dateigröße des Images begrenzen
5.7 MBR: Boot-Loader und Partitionstabelle sichern
6 Mit dd erstellte Images einbinden 6.1 Image einer Partition einbinden 6.2 Partition aus einem Image der gesamten Platte einbinden
6.1 Image einer Partition einbinden
6.2 Partition aus einem Image der gesamten Platte einbinden
7 Image im Netzwerk speichern 7.1 gzip-komprimiert und ssh-verschlüsselt 7.2 bzip2-komprimiert und nicht verschlüsselt 7.3 FTP mit gzip Komprimierung und nicht verschlüsselt
7.1 gzip-komprimiert und ssh-verschlüsselt
7.2 bzip2-komprimiert und nicht verschlüsselt
7.3 FTP mit gzip Komprimierung und nicht verschlüsselt
8 Den Fortschritt von dd abfragen 8.1 Einmalige oder regelmäßige Abfrage mittels senden des Signals -USR1
8.1 Einmalige oder regelmäßige Abfrage mittels senden des Signals -USR1
9 Live USB-Stick erstellen
10 Alternativen
Das Programm befindet sich im Paket
und ist in jeder Debian-Installation bereits enthalten.
dd wird ohne weitere Rückfragen bzw. Sicherheitsabfragen ausgeführt. Bei unachtsamen Aufrufen könnten evtl. vorhanden 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 der SSD oder einem Vielfachen davon 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.
Syntaxaufruf für die Verwendung in der Shell
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.
Wird if bzw. of weggelassen, so liest dd von der Standardeingabe bzw. schreibt auf die Standardausgabe. Dies ist dann nützlich, wenn dd in Kombination mit dem Pipe-Operator genutzt wird.
dd kann zwar grundsätzlich auch Dateien kopieren, allerdings ist hier in der Regel der Befehl cp komfortabler.
Der Befehl dd kennt u.a. die folgenden Optionen:
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
Wie oben bereits erwähnt wird die Größe der Zahl BYTES standardmäßig in Byte interpretiert. Diese kann durch Hinzufügen von Suffixes geändert werden.
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.
Einige allgemeine Beispiele
Im folgenden ein paar allgemeine Beispiele für die Syntax und die Optionen von dd:
Es wird die komplette fünfte Partition von /dev/sda in die erste Partition von /dev/sdb kopiert:
Es werden die ersten zehn 1024 Byte großen Blöcke von der erste Partition von /dev/sdb auf die zweite Partition von /dev/sdc kopiert:
Es werden 2000 Byte große Blöcke von der dritten Partition von /dev/sda auf die vierte Partition von /dev/sda kopiert, wobei beim Einlesen die ersten 50 Blöcke (in diesen Fall 50 * 2000 = 100.000 Byte) übersprungen werden, d.h. der Lesevorgang fängt bei Byte 100.001 an:
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:
Falls man plant beide Platten gleichzeitig im selben PC zu betreiben, ist darauf zu achten, dass die UUID s der geklonten Platte geändert werden, da es sonst zu Konflikten kommt.
Komprimiert man ein solches Festplattenimage, wie im folgenden Absatz beschrieben, noch zusätzlich mit gzip, so sollte man vorher die Ausgabe von fdisk -lu speichern und mit der gesicherten Imagedatei zusammen aufheben. Alternativ kann man die Startpositionen der Partitionen auch - sehr zeitaufwändig - aus dem gepackten Image auslesen.
Festplatte (sicher) löschen
Der folgende Befehl löscht die komplette Festplatte /dev/sda durch Überschreiben mit Nullen:
Der folgende Befehl löscht die komplette Festplatte /dev/sda durch Überschreiben mit Zufallszahlen (zeitintensiv):
Für die Festplatte sda mit 8 MiB BufferSize sieht dass dann so aus:
Um nun die Fortschrittsanzeige auszugeben, kann folgendes Kommando auf der selben Konsole eingegeben werden:
Partitionen klonen
Der folgende Befehl klont (kopiert) die komplette Partition /dev/sda1 auf die Partition /dev/sdb1:
Image einer Partition sichern
Der folgende Befehl erstellt ein Image von /dev/sda1 in die Datei image_sda1.img , welche im Heimatverzeichnis gespeichert wird:
Diese Art der Sicherung ist nicht wirklich zu empfehlen, da die Image-Datei die gleiche Größe wie die gesicherte Partition hat. Daher ist es sinnvoller, das Image zu komprimieren. Der folgende Befehl erstellt ein komprimiertes Image der Partition /dev/sda1 und speichert dieses in die Datei image-compress_sda1.img.gz im Heimatverzeichnis. Durch das Weglassen von of im Befehlsaufruf werden die Daten auf die Standardausgabe geschrieben, wo sie dann per Pipe-Operator an gzip weitergeleitet werden:
Auch wenn das Image von gzip mit der höchsten Kompressionsstufe komprimiert wird, kann die Ausgabedatei unter Umständen trotzdem sehr groß werden. Man sollte also auf ausreichend Platz auf dem Zieldatenträger achten!
Um das so erzeugte komprimierte Image wieder zurückzusichern, kann man folgenden Befehl verwenden:
Dateigröße des Images begrenzen
Für den Fall, dass zum Beispiel das Dateisystem des Ziellaufwerkes eine Dateigrößenbeschränkung hat, besteht die Möglichkeit zum Splitten der Imagedatei. Auf einem FAT32-Laufwerk beispielsweise ist die Dateigröße auf 4 GiB (1 GiB = 1024 * 1024 * 1024 Byte) beschränkt.
In folgendem Beispiel wird das Image an split übergeben und in Teile von je 3500 MiB (1 MiB = 1024 * 1024 Byte) gespeichert. Hierbei werden die jeweiligen Teile nummerisch beschriftet.
image_sda1.img.00
image_sda1.img.01
image_sda1.img.02
image_sda1.img.03
Zurückgespielt wird dann, indem das Image durch cat automatisch wieder zusammengefügt und an dd übergeben wird.
MBR: Boot-Loader und Partitionstabelle sichern
Der MasterBootRecord (MBR) beherbergt den Boot-Loader, die Partitionstabelle und die MBR-Signatur. Der MBR ist exakt 512 Bytes lang und liegt am Beginn der Festplatte. Der Boot-Loader belegt die ersten 446 Bytes des MBR, dann folgen die Partitionstabelle (64 Bytes) und die MBR-Signatur, und, Achtung, zumindest GRUB(2) nutzt je nach Konfiguration meist noch einige weitere Sektoren im sog. verborgenen Bereich vor der ersten Partition.
Zur Sicherung ist ein geeignetes Medium notwendig. Nutzer einer LiveCD müssen zunächst ein Medium verfügbar machen:
zeigt die Bezeichnungen der eigenen Festplatten an und dient als Orientierunghilfe für folgende Kommandos. Nun erstellt man einen Ordner im Dateisystem der Live-CD und hängt dort eine Partition ein, auf welcher die Sicherung des MBR erstellt wird.
Es kann sich hierbei auch um einen USB-Stick, eine Netzwerkfreigabe oder ein anderes Medium handeln, auf welches man jederzeit Zugriff hat. Jetzt kann mit dem eigentlichen Sichern begonnen werden.
mit dem MBR nur die primären Einträge der Partitionstabelle (Bytes 446..509) gesichert werden. Die Einträge zu den logischen Partitionen stehen in den kaskadierten BRs (BootRecords) der erweiterten Partition, und fehlen damit hier komplett.
beim Einsatz einer GPT (GPT) überhaupt keine Sicherung der Partitionstabelle erfolgt. Außerdem wird der Bootloader in eine eigene Boot-Partitionen installiert.
Um immer auf der sicheren Seite zu sein, empfiehlt es sich nach jeder Partitionsänderung die entsprechenden Tabellen neu zu sichern. Bei der MBR-Partitionstabelle kann man dazu das Programm sfdisk und bei der GUID-Partitionstabelle das Programm sgdisk nutzen. Wer es noch einfacher möchte, der kann das Skript Partitionstabellen sichern dazu nutzen. Spielt man eine alte MBR-Sicherung (mit alter und somit falscher Partitionstabelle) zurück, kann man auf die komplette Platte höchst wahrscheinlich nicht mehr zugreifen.
Mit dem folgenden Befehlsaufruf würde der Boot-Loader der Festplatte /dev/sda als Datei bootloader_sicherung im aktuellen Verzeichnis gesichert. Die Partitionstabelle (Bytes 446..509) und die MBR-Signatur sind in dieser Sicherung nicht enthalten:
Der folgende Befehl sichert den gesamten MBR (inklusive Partitionstabelle) der Festplatte /dev/sda als Datei mbr_sicherung im aktuellen Verzeichnis:
Bei installiertem Boot-Manager, z.B. GRUB 2, sollte man ggf. auch den sog. verborgenen Bereich hinter dem MBR, falls dieser (Regelfall) dafür verwendet wird, mitsichern und vorher schauen, wie viele Sektoren vor der ersten Partition frei sind:
Bei heutigen Festplatten sind das meist die Sektoren 0 - 62 (erste Partition beginnt also bei 63, seit Windows-Vista aber auch häufig erst bei Sektor 2048 (von der Sektorgröße der Festplatte abhängig)). Dann schaut man noch wie viele Bytes ein Sektor hat (meist 512) und passt den Befehl entsprechend an:
Eine Sicherung des Boot-Loaders wird mit
zurückgespielt. Dieses Kommando kann auch unter Verwendung einer kompletten Sicherung des MBR bzw. obiger mbr+grub_sicherung verwendet werden: Es wird nur der Boot-Loader (Bytes 0..445) wiederhergestellt, die momentane Partitionstabelle (Bytes 446..509) und die MBR-Signatur bleiben dann in jedem Fall erhalten.
Will man den kompletten MBR (also inklusive Partitionstabelle) zurücksichern, so lautet der Befehl wie folgt:
Will man im Fall eines installierten Boot-Managers zusätzlich auch diesen (falls im sog. verborgenen Bereich hinter dem MBR abgelegt) zurücksichern (unter Erhalt des zuvor rückgesicherten Boot-Loaders und der Partitionstabelle), so lautet der Befehl wie folgt (falls die erste Partition bei Sektor 63 beginnt, siehe detaillierteren Hinweis weiter oben):
Mit dd erstellte Images einbinden
Image einer Partition einbinden
Ein mit dd erstelltes Image lässt sich als Loop-Device mit dem Befehl mount einbinden. So kann auf das Image wie auf ein normales Laufwerk zugegriffen werden. Dazu erstellt man als erstes ein Image, hier z.B. vom Device /dev/sda1 , gespeichert in der Datei loop_image.img im Heimatverzeichnis:
Dann erzeugt man einen Einhängpunkt, z.B. /media/loop_mount :
Jetzt kann man das mit dd erzeugt Image mit mount einbinden:
Nun kann man auf alle Dateien, Verzeichnisse etc. des Images wie auf ein reguläres Laufwerk zugreifen. Nach der Benutzung muss man das Image dann wieder mit umount aushängen:
Bei Bedarf kann das (bearbeitete) Image jetzt auch wieder zurück gesichert werden.
Partition aus einem Image der gesamten Platte einbinden
Hat man nicht nur eine Partition, sondern die gesamte Festplatte inclusive MBR gesichert, braucht man den Offset der jeweiligen Partition. Diesen kann man mit dem Befehl
herausfinden. Die Ausgabe sieht bei 3 primären Partitionen ungefähr so aus:
255 Köpfe, 63 Sektoren/Spuren, 0 Zylinder, zusammen 0 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Disk identifier: 0xd53d826f
/Pfad/zum/Image.img1 * 63 104872319 52436128+ 7 HPFS/NTFS Partition 1 hat unterschiedliche phys./log. Enden:
/Pfad/zum/Image.img2 104872320 109065284 2096482+ 82 Linux Swap / Solaris Partition 2 hat unterschiedliche phys./log. Anfänge (nicht-Linux?):
Partition 2 hat unterschiedliche phys./log. Enden:
/Pfad/zum/Image.img3 109065285 156296384 23615550 83 Linux Partition 3 hat unterschiedliche phys./log. Anfänge (nicht-Linux?):
Partition 3 hat unterschiedliche phys./log. Enden:
Der Wert hinter der entsprechende Partition unter Anfang, ist der Offset, dieser muss jedoch noch mit der weiter oben angegebenen Sektorgröße multipliziert werden (hier 512). Der Offset für die 3. Partition wäre also 109065285 * 512 = 55841425920. Nun Folgt der Mountbefehl mit dem entsprechenden Offset (hier wieder am Beispiel der 3. Partition):
Zum Schluss wird das Image wieder freigegeben mit:
Image im Netzwerk speichern
Ein mit dd erstelltes Image muss nicht zwangsläufig lokal gespeichert werden, sondern kann auch auf einen anderen Rechner im Netzwerk gesichert werden. Im folgenden Beispiel wird mit dd ein Image von /dev/sda1 erstellt, welches dann ssh-verschlüsselt auf den Rechner mit der IP-Adresse 192.168.0.100 übertragen und dort im Verzeichnis /home/BENUTZER in der Datei image_sda1.img gespeichert wird. Damit dies funktioniert, muss "BENUTZER" ein Benutzerkonto auf dem entsprechenden Rechner haben und man selbst die notwendigen Rechte, um dort zu schreiben. Der Befehlsaufruf lautet:
gzip-komprimiert und ssh-verschlüsselt
Um das Image zurückzusichern (z.B. auf den Rechner mit der IP-Adresse 192.168.0.50), gibt man folgenden Befehl ein:
bzip2-komprimiert und nicht verschlüsselt
Alternativ mit bzip komprimiert, aber im Transfer nicht: Auf dem Zielrechner
Auf dem Quellrechner
FTP mit gzip Komprimierung und nicht verschlüsselt
Erstellen eines Images über FTP:
Und zum Einspielen vom erstellten Images:
Den Fortschritt von dd abfragen
Einmalige oder regelmäßige Abfrage mittels senden des Signals -USR1
Informationen zum ermitteln von Prozessen siehe ps, pgrep oder pidof und zum senden von Signalen kill, pkill oder killall. Wenn das dd-Kommando einmal abgesetzt wurde, wünscht man sich bei größeren Kopiervorgängen eine Kontrollmöglichkeit über den Fortschritt. Dies erreicht man indem man dem dd-Prozess das Signal -USR1 sendet. mit ps und kill In einem zweiten Terminal, ermittelt man die Prozessnummer, z.B. mit
und setzt ein Signal -USR1 ab.
Die bisher kopierte Datenmenge wird dann in dem Terminal angezeigt, in dem dd gestartet wurde. Mit einer Kombination aus dd und einer Schleife kann man dies auch automatisieren.
mit pkill Sofern nur ein Prozess mit dem Namen dd läuft kann man dies auch über den Prozessnamen.
In einer Schleife kann das so aussehen:
mit pv. Als Alternative zur oben beschriebenen Vorgehensweise kann man auch den Befehl pv verwenden, um sich den Fortschritt anzeigen zu lassen (pv muss vorher aus den Quellen installiert worden sein. Dabei wird pv mittels einer Pipe dazwischengeschaltet, als Beispiel wird hier Festplatte klonen angenommen.
Um sich anzeigen zu lassen, wie weit der Vorgang fortgeschritten ist und wann er voraussichtlich beendet sein wird, muss man allerdings die Größe der Partition bzw. der Festplatte kennen. Im folgenden Beispiel wird eine Festplatte mit 60 GB unterstellt und in eine Image-Datei geschrieben:
Die Ausgabe kann dann so aussehen:
ETA zeigt dabei die verbleibende Zeit an, bis die Operation (bei aktueller Geschwindigkeit) voraussichtlich fertig sein wird.
Live USB-Stick erstellen
Mit dd lässt sich auch auf einfachste Art und Weise ein Live USB-Stick (als Ersatz für eine Live-CD) erstellen. Zwingende Voraussetzung ist allerdings ein entsprechendes Hybrid ISO-Image. Darunter fallen die Live-CD's von Debian und die Net.Iso's. Im folgenden Beispiel wird davon ausgegangen, dass der USB-Stick als /dev/sdb erkannt wurde und nicht eingebunden ist (aber bitte nicht auswerfen bzw. "sicher entfernen"):
Den Parameter bs=4M kann man auch weglassen, aber er beschleunigt den Kopiervorgang. Nach dem Befehl
kann das Medium entfernt werden.
Wer lieber mit einer Benutzeroberfläche arbeitet, kann zur Datensicherung auch partimage oder air-imager nutzen.
Seiten mit dem veralteten source-Tag
Seiten mit veraltetem enclose-Attribut
Standardprogramme Office und Co
Navigationsmenü