Dd: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „Kategorie:Linux:Coreutils“ durch „Kategorie:Coreutils“
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“
 
(60 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{DISPLAYTITLE:dd}}
{{DISPLAYTITLE:dd}}
'''dd''' ('''d'''isk '''d'''ump) - Bit-genaue Kopie einer Datei erstellen


'''dd''' ('''d'''isk '''d'''ump) erstellt bit-genaue Kopien von Datenträgern, Partitionen oder Dateien. Bit-genau bedeutet, dass Bit-für-Bit bzw. Byte-für-Byte ausgelesen und beschrieben wird, unabhängig von dessen Inhalt und Belegung.
== Beschreibung ==
'''dd''' ('''d'''isk '''d'''ump) erstellt bit-genaue Kopien von Datenträgern, Partitionen oder Dateien.  


= Syntax =
; Bit-genau
dd [Option] if=Inputfile of=Outputfile
bedeutet, dass Bit-für-Bit bzw. Byte-für-Byte ausgelesen und beschrieben wird, unabhängig von dessen Inhalt und Belegung.


=Optionen=
{| class="wikitable"
|-
! Schalter !! Bedeutung
|-
|if=||Steht für Input File, also die Quelle
|-
|of=||Steht für Output File, also das Ziel
|-
|count=||Legt fest wie viele der mit BS festgelegten Blöcke kopiert werden sollen. Z.B.: „count=10“ kopiert genau 10 Blöcker der mit „bs“ angegebenen Größe.
|-
|bs=|| Steht für Block Size. Z.B.: „bs=1M“ beutet das die Blockgröße genau 1 Megabyte ist. Angaben können in K (Kilobyte), M (Megabyte), G (Gigabyte), etc… angegeben werden
|-
|}
=Anwendungen=
==Backup eines MBR erstellen==
dd if=/dev/hda bs=512 count=1 of=/tmp/mbr.bin
==Komprimiertes Archiv einer Partition erstellen==
===Komprimieren===
dd if=/dev/hda1 | gzip > /tmp/image.gz
===Dekomprimieren===
gunzip -c /tmp/image.gz | dd of=/dev/hda1
==Datenträger klonen==
Mit folgendem Befehl, kann man einen Datenträger (sda) auf einen anderen Datenträger klonen. Hierbei gibt man die Blocksize an, um eine bessere Performance zu erreichen.
ACHTUNG: Die Datenträger sollten nicht im Dateisystem gemountet sein. Am besten eine Live CD verwenden.
dd if=/dev/sda of=/dev/sdb bs=2048
== Fortschritt anzeigen ==
dd status=progress if=/dev/hda of=/dev/hdb bs=2048
== Datenträger-Image erstellen ==
dd if=/dev/sda1 | pv -s18G | gzip | ssh -p2227 root@mx10.foxtom.de "dd of=/media/daten/backup/mx50sda1.gz"
==Datenträger mit zufälliger Zeichenfolge überschreiben==
dd if=/dev/urandom of=/dev/sda
==Datei mit fester Größe erstellen==
dd if=/dev/zero of=/mnt/name bs=1M count=500
==Synchrones Schreiben==
Um die Geschwindigkeiten eines Datenträgers zu testen, sollte der Cache des Betriebssystems abgeschaltet werden.
Lese-Cache: iflag=sync
Schreib-Cache: oflag=sync
===Schreibgeschwingigkeit===
dd if=/dev/zero of=/tmp/lesetest bs=1M count=1000 oflag=sync
===Lesegeschwindigkeit===
dd if=/tmp/lesetest of=/dev/null iflag=sync
= Low Level Backup (dd) =
Diskdump ist ein sehr flexiebles Werkzeug, das ab einem bestimmten Startpunkt eine bestimmte Menge »roher« Daten liest und diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt. Zusätzlich kann dd die gelesen Daten konvertieren.
Diskdump ist ein sehr flexiebles Werkzeug, das ab einem bestimmten Startpunkt eine bestimmte Menge »roher« Daten liest und diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt. Zusätzlich kann dd die gelesen Daten konvertieren.


Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, selbst wenn Linux diese nicht lesen kann.
Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, selbst wenn Linux diese nicht lesen kann.


dd if=QUELLE of=ZIEL [OPTIONEN]
dd if=QUELLE of=ZIEL [OPTIONEN]


QUELLE und ZIEL können hierbei sowohl ein Device als auch eine Datei sein. Werden keine weiteren Optionen angegeben, so werden alle Daten aus QUELLE gelesen. Handelt es sich bei QUELLE um eine Partition, wird deren gesamter Inhalt kopiert:  
QUELLE und ZIEL können hierbei sowohl ein Device als auch eine Datei sein. Werden keine weiteren Optionen angegeben, so werden alle Daten aus QUELLE gelesen. Handelt es sich bei QUELLE um eine Partition, wird deren gesamter Inhalt kopiert:


<nowiki># dd if=/dev/hda of=/dev/hdc</nowiki>
<nowiki># dd if=/dev/hda of=/dev/hdc</nowiki>


Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/hda) des Systems auf die dritte (/dev/hdc) kopiert. Es sollte jedem bewusst sein, dass der alte Inhalt der dritten Festplatte damit überschrieben wird. Auch sollte diese über die gleiche Kapazität wie die erste Platte verfügen (sonst muss man sich die Anzahl der kopierten Bytes merken). Um die Daten später zurückzuspielen, vertauscht man die Angaben von QUELLE und ZIEL.  
Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/hda) des Systems auf die dritte (/dev/hdc) kopiert. Es sollte jedem bewusst sein, dass der alte Inhalt der dritten Festplatte damit überschrieben wird. Auch sollte diese über die gleiche Kapazität wie die erste Platte verfügen (sonst muss man sich die Anzahl der kopierten Bytes merken). Um die Daten später zurückzuspielen, vertauscht man die Angaben von QUELLE und ZIEL.


Ist das Ziel einer Kopieraktion eine Datei, könnte bei Kernel-Versionen <2.4 die Beschränkung der Dateigröße von 2 GB unser Vorhaben zunichte machen, in einem solchen Fall muss die QUELLE auf mehrere Zieldateien aufgeteilt werden. Hierzu benötigt dd mehrere Optionen. Mit bs=BYTES muss die Anzahl Bytes, die in einem Schritt zu lesen oder schreiben sind, angegeben werden. Wieviele Schritte getätigt werden sollen, legt die Option count=ANZAHL fest. Um bspw. den Masterbootsektor (Mbr) der ersten Festplatte in eine Datei zu schreiben, könnte man folgenden Aufruf verwenden:  
Ist das Ziel einer Kopieraktion eine Datei, könnte bei Kernel-Versionen <2.4 die Beschränkung der Dateigröße von 2 GB unser Vorhaben zunichte machen, in einem solchen Fall muss die QUELLE auf mehrere Zieldateien aufgeteilt werden. Hierzu benötigt dd mehrere Optionen. Mit bs=BYTES muss die Anzahl Bytes, die in einem Schritt zu lesen oder schreiben sind, angegeben werden. Wieviele Schritte getätigt werden sollen, legt die Option count=ANZAHL fest. Um bspw. den Masterbootsektor (Mbr) der ersten Festplatte in eine Datei zu schreiben, könnte man folgenden Aufruf verwenden:


<nowiki># dd if=/dev/hda of=/tmp/mbr.save bs=512 count=1</nowiki>
<nowiki># dd if=/dev/hda of=/tmp/mbr.save bs=512 count=1</nowiki>


Um jetzt den Superblock (1 k groß) der ersten Partition zu sichern, müssen sowohl Mbr als auch der 512 Bytes lange Bootsektor (also zwei Blöcke) übersprungen werden. Hierzu verwendet man die Option skip=ANZAHL.  
Um jetzt den Superblock (1 k groß) der ersten Partition zu sichern, müssen sowohl Mbr als auch der 512 Bytes lange Bootsektor (also zwei Blöcke) übersprungen werden. Hierzu verwendet man die Option skip=ANZAHL.


<nowiki># dd if=/dev/hda of=/dev/superblock.save bs=512 count=2 skip=2 </nowiki>
<nowiki># dd if=/dev/hda of=/dev/superblock.save bs=512 count=2 skip=2 </nowiki>


Wenn dd seine Arbeit verrichtet hat, gibt es eine Statistik aus:
Wenn dd seine Arbeit verrichtet hat, gibt es eine Statistik aus:


3385223+0 records in
3385223+0 records in
  3385223+0 records out
  3385223+0 records out
  1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
  1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s


Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben:  
Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben:


<nowiki>#</nowiki> dd if=/dev/zero of=/dev/null count=10MB & pid=$!
<nowiki>#</nowiki> dd if=/dev/zero of=/dev/null count=10MB & pid=$!
  <nowiki>#</nowiki> kill -10 $pid
  <nowiki>#</nowiki> kill -10 $pid


'''Optionen'''
== Installation ==
siehe [[Coreutils#Installation]]
 
== Aufruf ==
$ ''' dd [Option] if=Inputfile of=Outputfile'''


{| class="wikitable sortable"
=== Optionen ===
{| class="wikitable sortable"
|-
|-
|  | '''bs=bytes'''
|  | '''bs=bytes'''
|  | Erzwingen von ibs=bytes und obs=bytes.  
|  | Erzwingen von ibs=bytes und obs=bytes.
|-
|-
|  | '''cbs=bytes'''
|  | '''cbs=bytes'''
|  | Konvertieren von bytes Bytes auf einmal.  
|  | Konvertieren von bytes Bytes auf einmal.
|-
|-
|  | '''conv=schlüsselwörter'''
|  | '''conv=schlüsselwörter'''
|  | Konvertieren der Datei gemäß der kommagetrennten Liste von Schlüsselwörtern.  
|  | Konvertieren der Datei gemäß der kommagetrennten Liste von Schlüsselwörtern.
|-
|-
|  | '''count=blöcke'''
|  | '''count=blöcke'''
|  | Nur blöcke Eingabeblöcke kopieren.  
|  | Nur blöcke Eingabeblöcke kopieren.
|-
|-
|  | '''ibs=bytes'''
|  | '''ibs=bytes'''
|  | Lesen von bytes Bytes auf einmal.  
|  | Lesen von bytes Bytes auf einmal.
|-
|-
|  | '''if=datei'''
|  | '''if=datei'''
|  | Lesen aus datei statt von der Standardeingabe.  
|  | Lesen aus datei statt von der Standardeingabe.
|-
|-
|  | '''obs=bytes'''
|  | '''obs=bytes'''
|  | Schreiben von bytes Bytes zur Zeit.  
|  | Schreiben von bytes Bytes zur Zeit.
|-
|-
|  | '''of=datei'''
|  | '''of=datei'''
|  | Schreiben in datei statt in die Standardausgabe.  
|  | Schreiben in datei statt in die Standardausgabe.
|-
|-
|  | '''seek=blöcke'''
|  | '''seek=blöcke'''
|  | Überspringen von blöcke Blöcken der Größe von obs beim Beginn der Ausgabe.  
|  | Überspringen von blöcke Blöcken der Größe von obs beim Beginn der Ausgabe.
|-
|-
|  | '''skip=blöcke'''
|  | '''skip=blöcke'''
|  | Überspringen von blöcke Blöcken der Größe von ibs beim Beginn der Eingabe.  
|  | Überspringen von blöcke Blöcken der Größe von ibs beim Beginn der Eingabe.
|-
|-
|}
|}
''bytes'' können folgende multiplikativen Endungen tragen: xM M, c 1, w 2, b 512, kD 1000, k 1024. MD 1.000.000, M 1.048.576, GD 1.000.000, G 1.073.741.824, und so weiter für T, P, E, Z, Y.  
''bytes'' können folgende multiplikativen Endungen tragen: xM M, c 1, w 2, b 512, kD 1000, k 1024. MD 1.000.000, M 1.048.576, GD 1.000.000, G 1.073.741.824, und so weiter für T, P, E, Z, Y.
 
'''Schlüsselwörter'''


{| class="wikitable sortable"
=== Schlüsselwörter ===
{| class="wikitable sortable"
|-
|-
|  | '''ascii'''
|  | '''ascii'''
|  | von EBCDIC in ASCII.  
|  | von EBCDIC in ASCII.
|-
|-
|  | '''ebcdic'''
|  | '''ebcdic'''
|  | von ASCII in EBCDIC.  
|  | von ASCII in EBCDIC.
|-
|-
|  | '''ibm'''
|  | '''ibm'''
|  | von ASCII in alternatives EBCDIC.  
|  | von ASCII in alternatives EBCDIC.
|-
|-
|  | '''block'''
|  | '''block'''
|  | Auffüllen von mit Zeilenumbrüchen terminierten Datensätzen durch Leerzeichen bis zur cbs-Größe.  
|  | Auffüllen von mit Zeilenumbrüchen terminierten Datensätzen durch Leerzeichen bis zur cbs-Größe.
|-
|-
|  | '''unblock'''
|  | '''unblock'''
|  | Ersetzen von nachlaufenden Leerzeichen in Datensätzen von cbs-Größe mit Zeilenumbrüchen.  
|  | Ersetzen von nachlaufenden Leerzeichen in Datensätzen von cbs-Größe mit Zeilenumbrüchen.
|-
|-
|  | '''lcase'''
|  | '''lcase'''
|  | Ändern von Großbuchstaben in Kleinbuchstaben.  
|  | Ändern von Großbuchstaben in Kleinbuchstaben.
|-
|-
|  | '''notrunc'''
|  | '''notrunc'''
|  | Kein Abschneiden der Ausgabedatei.  
|  | Kein Abschneiden der Ausgabedatei.
|-
|-
|  | '''ucase'''
|  | '''ucase'''
|  | Ändern von Kleinbuchstaben in Großbuchstaben.  
|  | Ändern von Kleinbuchstaben in Großbuchstaben.
|-
|-
|  | '''swab'''
|  | '''swab'''
|  | Jedes Paar von Eingabebytes vertauschen.  
|  | Jedes Paar von Eingabebytes vertauschen.
|-
|-
|  | '''noerror'''
|  | '''noerror'''
|  | Nach Lesefehlern fortfahren.  
|  | Nach Lesefehlern fortfahren.
|-
|-
|  | '''sync'''
|  | '''sync'''
|  | Jeden Eingabeblock mit NULLen zur ibs-Größe auffüllen; wenn mit block oder unblock benutzt, stattdessen mit Leerzeichen.  
|  | Jeden Eingabeblock mit NULLen zur ibs-Größe auffüllen; wenn mit block oder unblock benutzt, stattdessen mit Leerzeichen.


|-
|-
|}
|}
==== Anwendung von Diskdump ====
'''Eine Diskette in ein Imagefile schreiben '''


'''dd if=/dev/fd0 of=image file'''Achtung, das Diskettenlaufwerk darf nicht gemountet sein!
=== Parameter ===
=== Umgebung ===
=== Rückgabewert ===
== Anwendung ==
===Backup eines MBR erstellen===
dd if=/dev/hda bs=512 count=1 of=/tmp/mbr.bin


<u>Beispiel</u>
=== Komprimiertes Backup einer Partition ===
; Backup
dd if=/dev/sda1 | gzip > /tmp/sda1.gz
; Restore
gunzip -c /tmp/image.gz | dd of=/dev/hda1


dd if=/dev/fd0 of=/tmp/abc_diskette.im
===Datenträger klonen===
Mit folgendem Befehl, kann man einen Datenträger (sda) auf einen anderen Datenträger klonen. Hierbei gibt man die Blocksize an, um eine bessere Performance zu erreichen.


'''Eine Diskette aus einem Imagefile erstellen '''
ACHTUNG: Die Datenträger sollten nicht im Dateisystem gemountet sein. Am besten eine Live CD verwenden.
dd if=/dev/sda of=/dev/sdb bs=2048


'''dd if=image file of=/dev/fd0 '''Achtung, das Diskettenlaufwerk darf nicht gemountet sein!
=== Fortschritt anzeigen ===
dd status=progress if=/dev/hda of=/dev/hdb bs=2048


<u>Beispiel</u>
=== Datenträger-Image erstellen ===
dd if=/dev/sda1 | pv -s18G | gzip | ssh -p2227 root@mx10.foxtom.de "dd of=/media/daten/backup/mx50sda1.gz"


dd if=/tmp/abc_diskette.img of=/dev/fd0
===Datenträger mit zufälliger Zeichenfolge überschreiben===
dd if=/dev/urandom of=/dev/sda


'''Eine CD in ein Imagefile schreiben '''
===Datei erstellen===
dd if=/dev/zero of=/mnt/name bs=1M count=500


Genauso wie von Disketten lassen sich auch von CDs Images erstellen: '''dd if=cd-laufwerk of=image file '''Achtung, das CD-Laufwerk darf nicht gemountet sein!
=== Datenträgergeschwindigkeit messen ===
; Betriebssystem-Cache abschalten
Um die Geschwindigkeiten eines Datenträgers zu testen, sollte der Cache des Betriebssystems abgeschaltet werden.
* Lese-Cache: iflag=sync
* Schreib-Cache: oflag=sync


<u>Beispiel</u>
; Schreibgeschwingigkeit
$ '''dd if=/dev/zero of=/tmp/lesetest bs=1M count=1000 oflag=sync'''


dd if=/dev/cdrom of=/tmp/CD-image.img
; Lesegeschwindigkeit
$ '''dd if=/tmp/lesetest of=/dev/null iflag=sync'''


'''Ein Imagefile mounten '''
=== Datenträger ===
==== Imagefile erstellen ====
# '''dd if=/dev/DEVICE of=FILE'''


mount -o loop imagefile ziel
; Achtung
: Das Gerät sollte nicht gemountet sein


Das Imagefile kann so wie eine Festplatte / ein Verzeichnis behandelt werden. Sehr praktisch, um zum Beispiel ein CD-Abbild als "virtuelles CD-Laufwerk" zu benutzen. Geht natuerlich auch mit anderen Imagedateien, zum Beispiel Diskettenimages oder Festplattenimages
;Beispiel
# dd if=/dev/dvd of=dvd.img


mount -o loop /tmp/cd-image.img /mnt/virtualCD
; Eine Diskette aus einem Imagefile erstellen


'''Den Master Boot Record sichern '''
# '''dd if=image file of=/dev/fd0 '''
Achtung, das Diskettenlaufwerk darf nicht gemountet sein!


Der dd-Befehl ist auch geeignet, um den Master Boot Record einer Festplatte auszulesen und in eine Datei zu schreiben.
; Beispiel
# dd if=/tmp/abc_diskette.img of=/dev/fd0


<div >dd if=festplatte of=dateiname bs=512 count=1
; Eine CD in ein Imagefile schreiben


<u>Beispiel</u>
Genauso wie von Disketten lassen sich auch von CDs Images erstellen: '''dd if=cd-laufwerk of=image file '''Achtung, das CD-Laufwerk darf nicht gemountet sein!


dd if=/dev/hda of=/tmp/mbr.img bs=512 count=1
$ dd if=/dev/cdrom of=cdrom.img


'''Einen gesicherten Master Boot Record zurückschreiben '''
; Ein Imagefile mounten
# mount -o loop imagefile ziel


Den mit dem vorigen Befehl gesicherten MBR kann man natuerlich auch wieder auf eine Festplatte zurueckschreiben.
Das Imagefile kann so wie eine Festplatte / ein Verzeichnis behandelt werden. Sehr praktisch, um zum Beispiel ein CD-Abbild als "virtuelles CD-Laufwerk" zu benutzen. Geht natuerlich auch mit anderen Imagedateien, zum Beispiel Diskettenimages oder Festplattenimages


<div >dd if=dateiname of=festplatte bs=512 count=1
# mount -o loop /tmp/cd-image.img /mnt/virtualCD


<u>Beispiel</u>
=== Master Boot Record ===
Der dd-Befehl ist auch geeignet, um den Master Boot Record einer Festplatte auszulesen und in eine Datei zu schreiben.
# dd if=festplatte of=dateiname bs=512 count=1


dd if=/tmp/mbr.img of=/dev/hda bs=512 count=1  
; Beispiel
# '''dd if=/dev/hda of=/tmp /mbr.img bs=512 count=1'''


'''Die primäre Partitionstabelle wiederherstellen, ohne den MBR zu überschreiben'''
; Zurückschreiben
Den mit dem vorigen Befehl gesicherten MBR kann man natuerlich auch wieder auf eine Festplatte zurueckschreiben.
# dd if=dateiname of=festplatte bs=512 count=1


dd if=mbr.img of=/dev/hda bs=1 count=64 skip=446 seek=446
; Beispiel
# '''dd if=/tmp/mbr.img of=/dev/hda bs=512 count=1'''


'''Einen komprimiertes Image von einer Festplatte oder Partition erstellen '''
==== Die primäre Partitionstabelle wiederherstellen, ohne den MBR zu überschreiben ====
# dd if=mbr.img of=/dev/hda bs=1 count=64 skip=446 seek=446


=== Einen komprimiertes Image von einer Festplatte oder Partition erstellen ===
Um von einer Festplattenpartition ein Backup zu machen, ist dieser Befehl sinnvoll. Durch die Komprimierung kann oft ca. die Häfte des Platzes gespart werden.
Um von einer Festplattenpartition ein Backup zu machen, ist dieser Befehl sinnvoll. Durch die Komprimierung kann oft ca. die Häfte des Platzes gespart werden.
 
# dd if=partition/festplatte bs=64k |gzip -c >dateiname.img.gz
<div >dd if=partition/festplatte bs=64k |gzip -c >dateiname.img.gz  


<u>Beispiel (1. Partition der 1. Festplatte)</u>
<u>Beispiel (1. Partition der 1. Festplatte)</u>


dd if=/dev/hda1 bs=64k |gzip -c >/tmp/hda1.img.gz  
dd if=/dev/hda1 bs=64k |gzip -c >/tmp/hda1.img.gz


<u>Beispiel 2 (Verschlüsselt auf entfernten Rechner übertragen)</u>
<u>Beispiel 2 (Verschlüsselt auf entfernten Rechner übertragen)</u>


dd if=/dev/hda1 bs=64k |gzip -c | ssh [mailto:user@rechner user@rechner2] 'cat >/tmp/rechner1.hda1.img.gz'
dd if=/dev/hda1 bs=64k |gzip -c | ssh [mailto:user@rechner user@rechner2] 'cat >/tmp/rechner1.hda1.img.gz'


'''Das komprimierte Image wieder zurückschreiben '''
'''Das komprimierte Image wieder zurückschreiben  


<div >cat dateiname.gz |gzip -d | dd of=festplatte bs=64k  
<div >cat dateiname.gz |gzip -d | dd of=festplatte bs=64k


<u>Beispiel 1</u>
<u>Beispiel 1</u>


cat /tmp/hda1.img.gz |gzip -d | dd of=/dev/hda1 bs=64k
cat /tmp/hda1.img.gz |gzip -d | dd of=/dev/hda1 bs=64k


<u>Beispiel 2</u>
<u>Beispiel 2</u>


ssh [mailto:user@rechner2 user@rechner2] 'cat /tmp/rechner2.hda1.img.gz' |gzip -d | dd of=/dev/hda1 bs=64k
ssh [mailto:user@rechner2 user@rechner2] 'cat /tmp/rechner2.hda1.img.gz' |gzip -d | dd of=/dev/hda1 bs=64k


'''README'''
'''README'''
Zeile 263: Zeile 241:
Zum Brennen von Daten-CDs oder -DVDs stehen auf der Kommandozeile mehrere Anwendungen zur Verfügung. Bevor es jedoch ans eigentliche Brennen geht, muss ein so genanntes <span >'''Joliet'''</span>-Erweiterungen, erzeugt Images für bootbare Medien und Dateien und kann automatische Backups anlegen, wobei es einzelne Dateien ausschließt. Eine Alternative kommt in Form von Dd, das nicht nur ISO-Abbilder erzeugt, sondern oft auch die letzte Rettung für die Daten von sterbenden Festplatten darstellt.
Zum Brennen von Daten-CDs oder -DVDs stehen auf der Kommandozeile mehrere Anwendungen zur Verfügung. Bevor es jedoch ans eigentliche Brennen geht, muss ein so genanntes <span >'''Joliet'''</span>-Erweiterungen, erzeugt Images für bootbare Medien und Dateien und kann automatische Backups anlegen, wobei es einzelne Dateien ausschließt. Eine Alternative kommt in Form von Dd, das nicht nur ISO-Abbilder erzeugt, sondern oft auch die letzte Rettung für die Daten von sterbenden Festplatten darstellt.


<span >'''Rockridge/Joliet:'''</span> Die Rockridge-Erweiterung ergänzt das ISO-Dateisystem um Unix-typische Dateiinformationen, wie Besitzer, Gruppe, Zugriffsrechte und symbolische Links. So tritt beim Kopieren von Daten aus einem Unix-Dateisystem auf CD kein Informationsverlust ein. Zudem erlaubt Rockridge längere Dateinamen. Die Microsoft-Erweiterung Joliet des ISO-9660-Standards lässt ebenfalls lange Dateinamen zu.  
<span >'''Rockridge/Joliet:'''</span> Die Rockridge-Erweiterung ergänzt das ISO-Dateisystem um Unix-typische Dateiinformationen, wie Besitzer, Gruppe, Zugriffsrechte und symbolische Links. So tritt beim Kopieren von Daten aus einem Unix-Dateisystem auf CD kein Informationsverlust ein. Zudem erlaubt Rockridge längere Dateinamen. Die Microsoft-Erweiterung Joliet des ISO-9660-Standards lässt ebenfalls lange Dateinamen zu.


==== Convert und Copy ====
=== Convert und Copy ===
Das praktische kleine Tool Dd müsste eigentlich den Namen Cc tragen: Convert & Copy. Da dieser aber schon für den C-Compiler vergeben war, griffen die Entwickler einfach zum nächsten Buchstaben im Alphabet.
Das praktische kleine Tool Dd müsste eigentlich den Namen Cc tragen: Convert & Copy. Da dieser aber schon für den C-Compiler vergeben war, griffen die Entwickler einfach zum nächsten Buchstaben im Alphabet.


Dd erstellt 1:1-Kopien von Datenträgern. Egal ob Festplattenpartitionen, CDs oder DVDs -- Dd liest und schreibt zuverlässig blockweise. Da Dd diese <span >'''Blöcke'''</span> nicht verarbeitet oder interpretiert, spielt es keine Rolle, um welches Dateisystem es sich handelt. Sogar vor Festplatten mit Fehlern schreckt Dd nicht zurück (siehe Abschnitt "Letzte Rettung"). Der einfache Aufruf für Dd lautet:
Dd erstellt 1:1-Kopien von Datenträgern. Egal ob Festplattenpartitionen, CDs oder DVDs -- Dd liest und schreibt zuverlässig blockweise. Da Dd diese <span >'''Blöcke'''</span> nicht verarbeitet oder interpretiert, spielt es keine Rolle, um welches Dateisystem es sich handelt. Sogar vor Festplatten mit Fehlern schreckt Dd nicht zurück (siehe Abschnitt "Letzte Rettung"). Der einfache Aufruf für Dd lautet:


dd if=''Quelle'' of=''Ziel''
dd if=''Quelle'' of=''Ziel''


<span >'''Block:'''</span> Eine fortlaufende Ansammlung von Bytes auf einem Datenträger. Einige Geräte wie Festplatten, Disketten und CD-/DVD-Laufwerke organisieren ihre Daten in solchen Blöcken ("block devices"). Andere Geräte arbeiten zeichenorientiert ("character devices") und lesen/schreiben einzelne Bytes.  
<span >'''Block:'''</span> Eine fortlaufende Ansammlung von Bytes auf einem Datenträger. Einige Geräte wie Festplatten, Disketten und CD-/DVD-Laufwerke organisieren ihre Daten in solchen Blöcken ("block devices"). Andere Geräte arbeiten zeichenorientiert ("character devices") und lesen/schreiben einzelne Bytes.


Über <tt>if</tt> geben Sie also an, von wo Dd die Daten liest, und hinter <tt>of</tt> definieren Sie die Ausgabe. Als Quelle und Ziel dienen oft ein Gerät, wie eine Festplatte(npartition) oder ein CD-/DVD-Laufwerk. Alternativ geben Sie nach dem Gleichheitszeichen eine Datei an. Um etwa die Festplattenpartition <tt>hda1</tt> 1:1 nach <tt>/dev/hdb1</tt> zu kopieren, tippen Sie:
Über ''if'' geben Sie also an, von wo Dd die Daten liest, und hinter ''of'' definieren Sie die Ausgabe. Als Quelle und Ziel dienen oft ein Gerät, wie eine Festplatte(npartition) oder ein CD-/DVD-Laufwerk. Alternativ geben Sie nach dem Gleichheitszeichen eine Datei an. Um etwa die Festplattenpartition ''hda1'' 1:1 nach ''/dev/hdb1'' zu kopieren, tippen Sie:


dd if=/dev/hda1 of=/dev/hdb1
dd if=/dev/hda1 of=/dev/hdb1


Ebenso können Sie Dd dazu verwenden, schnell eine CD oder DVD auf der Kommandozeile zu kopieren. Ein entsprechendes ISO-Image erstellen Sie beispielsweise über:
Ebenso können Sie Dd dazu verwenden, schnell eine CD oder DVD auf der Kommandozeile zu kopieren. Ein entsprechendes ISO-Image erstellen Sie beispielsweise über:


$ dd if=/dev/hdc of=abbild.iso
$ dd if=/dev/hdc of=abbild.iso
9153728+0 Datensätze ein
  9153728+0 Datensätze ein
9153728+0 Datensätze aus
  9153728+0 Datensätze aus
4686708736 bytes transferred in 1209,649659 seconds (3874435 bytes/sec)
  4686708736 bytes transferred in 1209,649659 seconds (3874435 bytes/sec)


Das Medium muss dazu nicht gemountet <span >[1]</span> sein. Die Laufwerksangabe <tt>/dev/hdc</tt> ersetzen Sie durch den entsprechenden Gerätenamen Ihres Laufwerks; das ISO-Image landet anschließend in der Datei <tt>abbild.iso</tt> des aktuellen Verzeichnisses.
Das Medium muss dazu nicht gemountet <span >[1]</span> sein. Die Laufwerksangabe ''/dev/hdc'' ersetzen Sie durch den entsprechenden Gerätenamen Ihres Laufwerks; das ISO-Image landet anschließend in der Datei ''abbild.iso'' des aktuellen Verzeichnisses.


==== Optimieren mit Optionen ====
=== Optimieren mit Optionen ===
Das Programm Dd bringt einige Schalter mit. Ein praktischer Parameter, der die Arbeit des Programms maßgeblich beschleunigt, ist <tt>bs</tt> (englisch "block size" = Blockgröße). Standardmäßig arbeitet Dd mit 512 Byte großen Blöcken -- es liest jeweils 512 Bytes ein und schreibt diese in die Ausgabedatei. Wählen Sie größere Blöcke, arbeitet Dd dementsprechend schneller. So sorgt der Aufruf:
Das Programm Dd bringt einige Schalter mit. Ein praktischer Parameter, der die Arbeit des Programms maßgeblich beschleunigt, ist ''bs'' (englisch "block size" = Blockgröße). Standardmäßig arbeitet Dd mit 512 Byte großen Blöcken -- es liest jeweils 512 Bytes ein und schreibt diese in die Ausgabedatei. Wählen Sie größere Blöcke, arbeitet Dd dementsprechend schneller. So sorgt der Aufruf:


dd if=/dev/hda1 of=/dev/hdb1 bs=2k
dd if=/dev/hda1 of=/dev/hdb1 bs=2k


dafür, dass Dd die Partition in 2 KByte (2048 Bytes) großen Blöcken kopiert. Unterschreitet der letzte Block die angegebene Blockgröße, füllt Dd ihn nicht auf:
dafür, dass Dd die Partition in 2 KByte (2048 Bytes) großen Blöcken kopiert. Unterschreitet der letzte Block die angegebene Blockgröße, füllt Dd ihn nicht auf:


$ dd if=/dev/hda1 of=/dev/hdb1 bs=6k
$ dd if=/dev/hda1 of=/dev/hdb1 bs=6k
16059+1 Datensätze ein
  16059+1 Datensätze ein
16059+1 Datensätze aus
  16059+1 Datensätze aus
98670592 bytes transferred in 13,801482 seconds (7149275 bytes/sec)
  98670592 bytes transferred in 13,801482 seconds (7149275 bytes/sec)


Die Ausgabe zeigt, dass Dd 16059 Blöcke der Größe 6144 Bytes und einen "übrig gebliebenen" Block von 4096 Byte kopiert hat.
Die Ausgabe zeigt, dass Dd 16059 Blöcke der Größe 6144 Bytes und einen "übrig gebliebenen" Block von 4096 Byte kopiert hat.


Neben der Blockgröße können Sie angeben, wie viele dieser Blöcke Dd lesen soll: Um 40 MByte zu kopieren, schreiben Sie <tt>bs=1M count=40</tt>. Dabei spezifiziert die Option <tt>count</tt> die Anzahl der Blöcke. Das macht beispielsweise Sinn, wenn Sie den Boot-Sektor einer Festplatte sichern wollen -- Sie kopieren in diesem Fall nur den ersten, 512 Bytes großen Block mit dem Aufruf:
Neben der Blockgröße können Sie angeben, wie viele dieser Blöcke Dd lesen soll: Um 40 MByte zu kopieren, schreiben Sie ''bs=1M count=40''. Dabei spezifiziert die Option ''count'' die Anzahl der Blöcke. Das macht beispielsweise Sinn, wenn Sie den Boot-Sektor einer Festplatte sichern wollen -- Sie kopieren in diesem Fall nur den ersten, 512 Bytes großen Block mit dem Aufruf:


dd if=/dev/hda of=bootsektor bs=512 count=1
dd if=/dev/hda of=bootsektor bs=512 count=1


==== Letzte Rettung ====
=== Letzte Rettung ===
Das Programm Dd erweist sich auch als unverzichtbarer Helfer, wenn es um die Rettung von Daten aus zerstörten Dateisystemen geht. Bevor Sie sich an die Reparatur begeben, sollten Sie zunächst ein Backup vornehmen. Dazu erstellen Sie mit Dd eine 1:1-Kopie des zerstörten Systems und führen auf dieser die Reparaturversuche durch.
Das Programm Dd erweist sich auch als unverzichtbarer Helfer, wenn es um die Rettung von Daten aus zerstörten Dateisystemen geht. Bevor Sie sich an die Reparatur begeben, sollten Sie zunächst ein Backup vornehmen. Dazu erstellen Sie mit Dd eine 1:1-Kopie des zerstörten Systems und führen auf dieser die Reparaturversuche durch.


Da Dd standardmäßig zerstörte Sektoren von der Kopie ausschließt, setzen Sie die Parameter <tt>conv=noerror,sync</tt> ein:
Da Dd standardmäßig zerstörte Sektoren von der Kopie ausschließt, setzen Sie die Parameter ''conv=noerror,sync'' ein:
 
dd bs=512 conv=noerror,sync if=/dev/hda of=/dev/hdb
 
Auf diese Weise teilen Sie Dd mit, dass es mit dem Lesen und Ablegen von Daten auch dann fortfahren soll, wenn es defekte Sektoren findet. Dabei sorgt ''noerror'' dafür, dass Dd bei Fehlern nicht abbricht, und ''sync'' füllt unlesbare Sektoren mit Nullen auf.


dd bs=512 conv=noerror,sync if=/dev/hda of=/dev/hdb
<noinclude>


Auf diese Weise teilen Sie Dd mit, dass es mit dem Lesen und Ablegen von Daten auch dann fortfahren soll, wenn es defekte Sektoren findet. Dabei sorgt <tt>noerror</tt> dafür, dass Dd bei Fehlern nicht abbricht, und <tt>sync</tt> füllt unlesbare Sektoren mit Nullen auf.
== Anhang ==


=== Siehe auch ===
==== Sicherheit ====
==== Dokumentation ====
===== Man-Page =====
# dd
===== Info-Pages =====


[[Kategorie:Backup]]
==== Links ====
[[Kategorie:Linux:Befehl]]
===== Projekt =====
===== Weblinks =====
 
[[Kategorie:Linux/Datei/Ausgabe]]
[[Kategorie:Linux/Backup]]
[[Kategorie:Linux/Befehl]]
[[Kategorie:Coreutils]]
[[Kategorie:Coreutils]]
{{DEFAULTSORT:dd}}
{{DEFAULTSORT:dd}}
</noinclude>

Aktuelle Version vom 12. November 2024, 18:44 Uhr

dd (disk dump) - Bit-genaue Kopie einer Datei erstellen

Beschreibung

dd (disk dump) erstellt bit-genaue Kopien von Datenträgern, Partitionen oder Dateien.

Bit-genau

bedeutet, dass Bit-für-Bit bzw. Byte-für-Byte ausgelesen und beschrieben wird, unabhängig von dessen Inhalt und Belegung.

Diskdump ist ein sehr flexiebles Werkzeug, das ab einem bestimmten Startpunkt eine bestimmte Menge »roher« Daten liest und diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt. Zusätzlich kann dd die gelesen Daten konvertieren.

Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, selbst wenn Linux diese nicht lesen kann.

dd if=QUELLE of=ZIEL [OPTIONEN]

QUELLE und ZIEL können hierbei sowohl ein Device als auch eine Datei sein. Werden keine weiteren Optionen angegeben, so werden alle Daten aus QUELLE gelesen. Handelt es sich bei QUELLE um eine Partition, wird deren gesamter Inhalt kopiert:

# dd if=/dev/hda of=/dev/hdc

Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/hda) des Systems auf die dritte (/dev/hdc) kopiert. Es sollte jedem bewusst sein, dass der alte Inhalt der dritten Festplatte damit überschrieben wird. Auch sollte diese über die gleiche Kapazität wie die erste Platte verfügen (sonst muss man sich die Anzahl der kopierten Bytes merken). Um die Daten später zurückzuspielen, vertauscht man die Angaben von QUELLE und ZIEL.

Ist das Ziel einer Kopieraktion eine Datei, könnte bei Kernel-Versionen <2.4 die Beschränkung der Dateigröße von 2 GB unser Vorhaben zunichte machen, in einem solchen Fall muss die QUELLE auf mehrere Zieldateien aufgeteilt werden. Hierzu benötigt dd mehrere Optionen. Mit bs=BYTES muss die Anzahl Bytes, die in einem Schritt zu lesen oder schreiben sind, angegeben werden. Wieviele Schritte getätigt werden sollen, legt die Option count=ANZAHL fest. Um bspw. den Masterbootsektor (Mbr) der ersten Festplatte in eine Datei zu schreiben, könnte man folgenden Aufruf verwenden:

# dd if=/dev/hda of=/tmp/mbr.save bs=512 count=1

Um jetzt den Superblock (1 k groß) der ersten Partition zu sichern, müssen sowohl Mbr als auch der 512 Bytes lange Bootsektor (also zwei Blöcke) übersprungen werden. Hierzu verwendet man die Option skip=ANZAHL.

# dd if=/dev/hda of=/dev/superblock.save bs=512 count=2 skip=2 

Wenn dd seine Arbeit verrichtet hat, gibt es eine Statistik aus:

3385223+0 records in
3385223+0 records out
1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s

Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben:

# dd if=/dev/zero of=/dev/null count=10MB & pid=$!
# kill -10 $pid

Installation

siehe Coreutils#Installation

Aufruf

$  dd [Option] if=Inputfile of=Outputfile

Optionen

bs=bytes Erzwingen von ibs=bytes und obs=bytes.
cbs=bytes Konvertieren von bytes Bytes auf einmal.
conv=schlüsselwörter Konvertieren der Datei gemäß der kommagetrennten Liste von Schlüsselwörtern.
count=blöcke Nur blöcke Eingabeblöcke kopieren.
ibs=bytes Lesen von bytes Bytes auf einmal.
if=datei Lesen aus datei statt von der Standardeingabe.
obs=bytes Schreiben von bytes Bytes zur Zeit.
of=datei Schreiben in datei statt in die Standardausgabe.
seek=blöcke Überspringen von blöcke Blöcken der Größe von obs beim Beginn der Ausgabe.
skip=blöcke Überspringen von blöcke Blöcken der Größe von ibs beim Beginn der Eingabe.

bytes können folgende multiplikativen Endungen tragen: xM M, c 1, w 2, b 512, kD 1000, k 1024. MD 1.000.000, M 1.048.576, GD 1.000.000, G 1.073.741.824, und so weiter für T, P, E, Z, Y.

Schlüsselwörter

ascii von EBCDIC in ASCII.
ebcdic von ASCII in EBCDIC.
ibm von ASCII in alternatives EBCDIC.
block Auffüllen von mit Zeilenumbrüchen terminierten Datensätzen durch Leerzeichen bis zur cbs-Größe.
unblock Ersetzen von nachlaufenden Leerzeichen in Datensätzen von cbs-Größe mit Zeilenumbrüchen.
lcase Ändern von Großbuchstaben in Kleinbuchstaben.
notrunc Kein Abschneiden der Ausgabedatei.
ucase Ändern von Kleinbuchstaben in Großbuchstaben.
swab Jedes Paar von Eingabebytes vertauschen.
noerror Nach Lesefehlern fortfahren.
sync Jeden Eingabeblock mit NULLen zur ibs-Größe auffüllen; wenn mit block oder unblock benutzt, stattdessen mit Leerzeichen.

Parameter

Umgebung

Rückgabewert

Anwendung

Backup eines MBR erstellen

dd if=/dev/hda bs=512 count=1 of=/tmp/mbr.bin

Komprimiertes Backup einer Partition

Backup
dd if=/dev/sda1 | gzip > /tmp/sda1.gz
Restore
gunzip -c /tmp/image.gz | dd of=/dev/hda1

Datenträger klonen

Mit folgendem Befehl, kann man einen Datenträger (sda) auf einen anderen Datenträger klonen. Hierbei gibt man die Blocksize an, um eine bessere Performance zu erreichen.

ACHTUNG: Die Datenträger sollten nicht im Dateisystem gemountet sein. Am besten eine Live CD verwenden.

dd if=/dev/sda of=/dev/sdb bs=2048

Fortschritt anzeigen

dd status=progress if=/dev/hda of=/dev/hdb bs=2048

Datenträger-Image erstellen

dd if=/dev/sda1 | pv -s18G | gzip | ssh -p2227 root@mx10.foxtom.de "dd of=/media/daten/backup/mx50sda1.gz"

Datenträger mit zufälliger Zeichenfolge überschreiben

dd if=/dev/urandom of=/dev/sda

Datei erstellen

dd if=/dev/zero of=/mnt/name bs=1M count=500

Datenträgergeschwindigkeit messen

Betriebssystem-Cache abschalten

Um die Geschwindigkeiten eines Datenträgers zu testen, sollte der Cache des Betriebssystems abgeschaltet werden.

  • Lese-Cache: iflag=sync
  • Schreib-Cache: oflag=sync
Schreibgeschwingigkeit
$ dd if=/dev/zero of=/tmp/lesetest bs=1M count=1000 oflag=sync
Lesegeschwindigkeit
$ dd if=/tmp/lesetest of=/dev/null iflag=sync

Datenträger

Imagefile erstellen

# dd if=/dev/DEVICE of=FILE
Achtung
Das Gerät sollte nicht gemountet sein
Beispiel
# dd if=/dev/dvd of=dvd.img
Eine Diskette aus einem Imagefile erstellen
# dd if=image file of=/dev/fd0 

Achtung, das Diskettenlaufwerk darf nicht gemountet sein!

Beispiel
# dd if=/tmp/abc_diskette.img of=/dev/fd0
Eine CD in ein Imagefile schreiben

Genauso wie von Disketten lassen sich auch von CDs Images erstellen: dd if=cd-laufwerk of=image file Achtung, das CD-Laufwerk darf nicht gemountet sein!

$ dd if=/dev/cdrom of=cdrom.img
Ein Imagefile mounten
# mount -o loop imagefile ziel

Das Imagefile kann so wie eine Festplatte / ein Verzeichnis behandelt werden. Sehr praktisch, um zum Beispiel ein CD-Abbild als "virtuelles CD-Laufwerk" zu benutzen. Geht natuerlich auch mit anderen Imagedateien, zum Beispiel Diskettenimages oder Festplattenimages

# mount -o loop /tmp/cd-image.img /mnt/virtualCD

Master Boot Record

Der dd-Befehl ist auch geeignet, um den Master Boot Record einer Festplatte auszulesen und in eine Datei zu schreiben.

# dd if=festplatte of=dateiname bs=512 count=1
Beispiel
# dd if=/dev/hda of=/tmp /mbr.img bs=512 count=1
Zurückschreiben

Den mit dem vorigen Befehl gesicherten MBR kann man natuerlich auch wieder auf eine Festplatte zurueckschreiben.

# dd if=dateiname of=festplatte bs=512 count=1
Beispiel
# dd if=/tmp/mbr.img of=/dev/hda bs=512 count=1

Die primäre Partitionstabelle wiederherstellen, ohne den MBR zu überschreiben

# dd if=mbr.img of=/dev/hda bs=1 count=64 skip=446 seek=446

Einen komprimiertes Image von einer Festplatte oder Partition erstellen

Um von einer Festplattenpartition ein Backup zu machen, ist dieser Befehl sinnvoll. Durch die Komprimierung kann oft ca. die Häfte des Platzes gespart werden.

# dd if=partition/festplatte bs=64k |gzip -c >dateiname.img.gz

Beispiel (1. Partition der 1. Festplatte)

dd if=/dev/hda1 bs=64k |gzip -c >/tmp/hda1.img.gz

Beispiel 2 (Verschlüsselt auf entfernten Rechner übertragen)

dd if=/dev/hda1 bs=64k |gzip -c | ssh user@rechner2 'cat >/tmp/rechner1.hda1.img.gz'

Das komprimierte Image wieder zurückschreiben

cat dateiname.gz |gzip -d | dd of=festplatte bs=64k

Beispiel 1

cat /tmp/hda1.img.gz |gzip -d | dd of=/dev/hda1 bs=64k

Beispiel 2

ssh user@rechner2 'cat /tmp/rechner2.hda1.img.gz' |gzip -d | dd of=/dev/hda1 bs=64k

README

Dd erstellen 1:1-Kopien von Datenträgern aller Art und rettet so beispielsweise die Daten von kränkelnden Festplatten. Das Tool Mkisofs sammelt Daten aus dem Verzeichnisbaum und schreibt sie in ein ISO-Image. So lassen sich Backups auf CD/DVD sichern oder bootfähige Medien erzeugen.

Zum Brennen von Daten-CDs oder -DVDs stehen auf der Kommandozeile mehrere Anwendungen zur Verfügung. Bevor es jedoch ans eigentliche Brennen geht, muss ein so genanntes Joliet-Erweiterungen, erzeugt Images für bootbare Medien und Dateien und kann automatische Backups anlegen, wobei es einzelne Dateien ausschließt. Eine Alternative kommt in Form von Dd, das nicht nur ISO-Abbilder erzeugt, sondern oft auch die letzte Rettung für die Daten von sterbenden Festplatten darstellt.

Rockridge/Joliet: Die Rockridge-Erweiterung ergänzt das ISO-Dateisystem um Unix-typische Dateiinformationen, wie Besitzer, Gruppe, Zugriffsrechte und symbolische Links. So tritt beim Kopieren von Daten aus einem Unix-Dateisystem auf CD kein Informationsverlust ein. Zudem erlaubt Rockridge längere Dateinamen. Die Microsoft-Erweiterung Joliet des ISO-9660-Standards lässt ebenfalls lange Dateinamen zu.

Convert und Copy

Das praktische kleine Tool Dd müsste eigentlich den Namen Cc tragen: Convert & Copy. Da dieser aber schon für den C-Compiler vergeben war, griffen die Entwickler einfach zum nächsten Buchstaben im Alphabet.

Dd erstellt 1:1-Kopien von Datenträgern. Egal ob Festplattenpartitionen, CDs oder DVDs -- Dd liest und schreibt zuverlässig blockweise. Da Dd diese Blöcke nicht verarbeitet oder interpretiert, spielt es keine Rolle, um welches Dateisystem es sich handelt. Sogar vor Festplatten mit Fehlern schreckt Dd nicht zurück (siehe Abschnitt "Letzte Rettung"). Der einfache Aufruf für Dd lautet:

dd if=Quelle of=Ziel

Block: Eine fortlaufende Ansammlung von Bytes auf einem Datenträger. Einige Geräte wie Festplatten, Disketten und CD-/DVD-Laufwerke organisieren ihre Daten in solchen Blöcken ("block devices"). Andere Geräte arbeiten zeichenorientiert ("character devices") und lesen/schreiben einzelne Bytes.

Über if geben Sie also an, von wo Dd die Daten liest, und hinter of definieren Sie die Ausgabe. Als Quelle und Ziel dienen oft ein Gerät, wie eine Festplatte(npartition) oder ein CD-/DVD-Laufwerk. Alternativ geben Sie nach dem Gleichheitszeichen eine Datei an. Um etwa die Festplattenpartition hda1 1:1 nach /dev/hdb1 zu kopieren, tippen Sie:

dd if=/dev/hda1 of=/dev/hdb1

Ebenso können Sie Dd dazu verwenden, schnell eine CD oder DVD auf der Kommandozeile zu kopieren. Ein entsprechendes ISO-Image erstellen Sie beispielsweise über:

$ dd if=/dev/hdc of=abbild.iso
 9153728+0 Datensätze ein
 9153728+0 Datensätze aus
 4686708736 bytes transferred in 1209,649659 seconds (3874435 bytes/sec)

Das Medium muss dazu nicht gemountet [1] sein. Die Laufwerksangabe /dev/hdc ersetzen Sie durch den entsprechenden Gerätenamen Ihres Laufwerks; das ISO-Image landet anschließend in der Datei abbild.iso des aktuellen Verzeichnisses.

Optimieren mit Optionen

Das Programm Dd bringt einige Schalter mit. Ein praktischer Parameter, der die Arbeit des Programms maßgeblich beschleunigt, ist bs (englisch "block size" = Blockgröße). Standardmäßig arbeitet Dd mit 512 Byte großen Blöcken -- es liest jeweils 512 Bytes ein und schreibt diese in die Ausgabedatei. Wählen Sie größere Blöcke, arbeitet Dd dementsprechend schneller. So sorgt der Aufruf:

dd if=/dev/hda1 of=/dev/hdb1 bs=2k

dafür, dass Dd die Partition in 2 KByte (2048 Bytes) großen Blöcken kopiert. Unterschreitet der letzte Block die angegebene Blockgröße, füllt Dd ihn nicht auf:

$ dd if=/dev/hda1 of=/dev/hdb1 bs=6k
 16059+1 Datensätze ein
 16059+1 Datensätze aus
 98670592 bytes transferred in 13,801482 seconds (7149275 bytes/sec)

Die Ausgabe zeigt, dass Dd 16059 Blöcke der Größe 6144 Bytes und einen "übrig gebliebenen" Block von 4096 Byte kopiert hat.

Neben der Blockgröße können Sie angeben, wie viele dieser Blöcke Dd lesen soll: Um 40 MByte zu kopieren, schreiben Sie bs=1M count=40. Dabei spezifiziert die Option count die Anzahl der Blöcke. Das macht beispielsweise Sinn, wenn Sie den Boot-Sektor einer Festplatte sichern wollen -- Sie kopieren in diesem Fall nur den ersten, 512 Bytes großen Block mit dem Aufruf:

dd if=/dev/hda of=bootsektor bs=512 count=1

Letzte Rettung

Das Programm Dd erweist sich auch als unverzichtbarer Helfer, wenn es um die Rettung von Daten aus zerstörten Dateisystemen geht. Bevor Sie sich an die Reparatur begeben, sollten Sie zunächst ein Backup vornehmen. Dazu erstellen Sie mit Dd eine 1:1-Kopie des zerstörten Systems und führen auf dieser die Reparaturversuche durch.

Da Dd standardmäßig zerstörte Sektoren von der Kopie ausschließt, setzen Sie die Parameter conv=noerror,sync ein:

dd bs=512 conv=noerror,sync if=/dev/hda of=/dev/hdb

Auf diese Weise teilen Sie Dd mit, dass es mit dem Lesen und Ablegen von Daten auch dann fortfahren soll, wenn es defekte Sektoren findet. Dabei sorgt noerror dafür, dass Dd bei Fehlern nicht abbricht, und sync füllt unlesbare Sektoren mit Nullen auf.


Anhang

Siehe auch

Sicherheit

Dokumentation

Man-Page
  1. dd
Info-Pages

Links

Projekt
Weblinks