Zum Inhalt springen

Dd: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „»“ durch „''“
 
(118 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''dd''' (disk dump) erstellt bit-genaue Kopien von Festplatten, 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.
'''dd''' - [[Datei]] blockweise lesen und schreiben


=Übersicht=
== Beschreibung ==
dd [Option] Inputfile Outputfile
dd ('''d'''isk '''d'''ump) - Bit-genaue Kopie einer Datei
* [[Datei]]en jeder Art
* [[Datenträger]]
* [[Partition]]


; Bit-Genau
Bit-für-Bit bzw. Byte-für-Byte
* ausgelesen
* geschrieben
unabhängig von Inhalt oder Belegung


=Optionen=
; Flexiebles Werkzeug
Diskdump ist ein flexiebles Werkzeug
* ab einem bestimmten Startpunkt eine bestimmte Menge ''roher'' Daten liest
* diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt


{| class="wikitable"
; Konvertierung
''dd'' kann gelesen auch Daten konvertieren
 
; Backup
Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, selbst wenn Linux diese nicht lesen kann
<syntaxhighlight lang="bash" highlight="1" line>
sudo dd if=QUELLE of=ZIEL [OPTIONEN]
</syntaxhighlight>
 
; QUELLE und ZIEL
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
<syntaxhighlight lang="bash" highlight="1" line>
sudo dd if=/dev/sda of=/dev/sdc
</syntaxhighlight>
 
; Beispiel
Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/sda) des Systems auf die dritte (/dev/sdc) 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.&nbsp;den Masterbootsektor (Mbr) der ersten Festplatte in eine Datei zu schreiben, könnte man folgenden Aufruf verwenden
 
<syntaxhighlight lang="bash" highlight="1" line>
sudo dd if=/dev/sda of=/tmp/mbr.save bs=512 count=1
</syntaxhighlight>
 
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
<syntaxhighlight lang="bash" highlight="1" line>
sudo dd if=/dev/sda of=/dev/superblock.save bs=512 count=2 skip=2
</syntaxhighlight>
 
Wenn dd seine Arbeit verrichtet hat, gibt es eine Statistik aus
<syntaxhighlight lang="bash" highlight="1" line>
3385223+0 records in
3385223+0 records out
1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
</syntaxhighlight>
 
Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben
<syntaxhighlight lang="bash" highlight="1" line>
# kill -10 $pid
# dd if=/dev/zero of=/dev/null count=10MB & pid=$!
</syntaxhighlight>
 
== Installation ==
'''dd''' ist Teil des [[Pakets]] [[Coreutils]]
 
== Aufruf ==
<syntaxhighlight lang="bash" highlight="1" line>
dd [Option] if=Inputfile of=Outputfile
</syntaxhighlight>
 
=== Optionen ===
{| class="wikitable sortable"
|-
|-
! Schalter !! Bedeutung
|  | '''bs=bytes'''
|  | Erzwingen von ibs=bytes und obs=bytes.
|-
|-
|if=||Steht für Input File, also die Quelle
| | '''cbs=bytes'''
| | Konvertieren von bytes Bytes auf einmal.
|-
|-
|of=||Steht für Output File, also das Ziel
| | '''conv=schlüsselwörter'''
| | Konvertieren der Datei gemäß der kommagetrennten Liste von Schlüsselwörtern.
|-
|-
|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.
| | '''count=blöcke'''
| | Nur blöcke Eingabeblöcke kopieren.
|-
|-
|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
| | '''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.


=Anwendungen=
=== Schlüsselwörter ===
==Backup eines MBR erstellen==
{| class="wikitable sortable"
|-
|  | '''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.


dd if=/dev/hda bs=512 count=1 of=/tmp/mbr.bin
|-
 
|}
==Komprimiertes Archiv einer Partition erstellen==
 
dd if=/dev/hda1 | gzip > /tmp/image.gz
 
zurückspielen
 
gunzip -c /tmp/image.gz | dd of=/dev/hda1
 
==Festplatte klonen==
Mit folgendem Befehl, kann man eine Festplatte (hda) auf eine andere Festplatte klonen. Hierbei gibt man die Blocksize an um eine bessere Performance zu erreichen.
 
ACHTUNG: Die Festplatten sollten nicht im Dateisystem gemountet sein. Am besten eine Live CD verwenden.


dd if=/dev/hda of=/dev/hdb bs=2048
=== Argumente ===
=== Umgebung ===
=== Rückgabewert ===


==Fortschritt anzeigen==
<noinclude>


dd status=progress if=/dev/hda of=/dev/hdb bs=2048
== Anhang ==
=== Siehe auch ===
=== Dokumentation ===
; Man-Page
; Info-Page


==Datenträger mit zufälliger Zeichenfolge überschreiben==
=== Links ===
dd if=/dev/urandom of=/dev/sda
==== Projekt ====
==== Weblinks ====


==Datei mit fester Größe erstellen==
[[Kategorie:Linux/Storage/Tools]]
[[Kategorie:Linux/Datei/Ausgabe]]
[[Kategorie:Linux/Backup]]
[[Kategorie:Linux/Befehl]]
[[Kategorie:Coreutils]]


dd if=/dev/zero of=/mnt/name bs=1M count=500
{{DEFAULTSORT:dd}}
{{DISPLAYTITLE:dd}}


[[Category:Linux:Dateiverwaltung]]
</noinclude>

Aktuelle Version vom 31. März 2025, 12:13 Uhr

dd - Datei blockweise lesen und schreiben

Beschreibung

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

Bit-Genau

Bit-für-Bit bzw. Byte-für-Byte

  • ausgelesen
  • geschrieben

unabhängig von Inhalt oder Belegung

Flexiebles Werkzeug

Diskdump ist ein flexiebles Werkzeug

  • ab einem bestimmten Startpunkt eine bestimmte Menge roher Daten liest
  • diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt
Konvertierung

dd kann gelesen auch Daten konvertieren

Backup

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

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

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
sudo dd if=/dev/sda of=/dev/sdc
Beispiel

Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/sda) des Systems auf die dritte (/dev/sdc) 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
sudo dd if=/dev/sda 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
sudo dd if=/dev/sda 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

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

Installation

dd ist Teil des Pakets Coreutils

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.

Argumente

Umgebung

Rückgabewert

Anhang

Siehe auch

Dokumentation

Man-Page
Info-Page

Links

Projekt

Weblinks