dd

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Der Shell-Befehl dd (convert and copy) überträgt Daten zwischen verschiedenen Datenspeichern und kann auch Umwandlungen der Daten durchführen.

dd liest die Daten blockweise von der Eingabe, mit dd erstellte Kopien sind also Block für Block identisch mit dem Original - leere Bereiche einer Festplatte werden also mitkopiert. Bei einer Wiederherstellung einer Partition aus einer Datei nimmt das Dateisystem dann an, es wäre gleich gross wie das Original, d. h. die Zielpartition muss mindestens so gross sein wie die Quelle.

Weil dd in beliebigen Blockgrössen lesen und schreiben kann, eignet es sich gut für die Ein- und Ausgabe über im Raw-Modus betriebene Geräte (raw devices). Dabei ist darauf zu achten, dass solche Geräte nur mit Blockgrössen beschrieben werden können, die für das betreffende Gerät spezifisch sind (z. B. 512 Byte für Diskettenlaufwerke). Wenn die umzuwandelnde Dateigrösse nicht ein Vielfaches der spezifischen Blockgrösse ist, so muss die Option "conv=sync" angegeben werden. Nach beendeter Bearbeitung gibt dd die Zahl der ganzen Blöcke und der Teilblöcke, die eingelesen bzw. ausgegeben wurden, auf die Standard-Fehlerausgabe aus.

dd darf nicht zum Kopieren von Dateien zwischen Dateisystemen mit unterschiedlicher Blockgrösse verwendet werden. Wird ein blockorientiertes Gerät (block device) zum Kopieren der Datei verwendet, so wird der letzte Block möglicherweise durch Null-Bytes bis zur Blockgrösse aufgefüllt.

Verwendung

Anlegen der Abbilddatei "cd.iso" einer Daten-CD. Als Eingabe wird dabei die CD-ROM-Gerätedatei (hier "/dev/hdd") verwendet. Der Name der Gerätedatei ist nach dem Einlegen der CD gewöhnlich unter "/etc/mtab" zu sehen. Während der Erstellung der Abbilddatei darf die CD allerdings nicht im Dateisystem eingehängt sein!

# dd if=/dev/hdd of=/tmp/cd.iso
oder
# dd if=/dev/hdd > /tmp/cd.iso

Kopieren einer ganzen Festplatte (die Festplatten müssen vom Typ her identisch sein!).

# dd if=/dev/rdsk/c0t0d0s2 of=/dev/rdsk/c0t1d0s2 bs=256k

Sichern des Bootrecords der (ersten) Festplatte "/dev/hda". Dabei wird der erste Block ("count=1") der Grösse 446 Byte ("bs=446") in die Datei "backup_bootrecord.hda" geschrieben.

# dd if=/dev/hda of=backup_bootrecord.hda bs=446 count=1

Sichern des Bootrecords der (ersten) Festplatte "/dev/hda", einschliesslich der Partitionstabelle Dabei wird der erste Block ("count=1") der Grösse 512 Byte ("bs=512") in die Datei "backup_bootrecord.hda" geschrieben.

# dd if=/dev/hda of=backup_bootrecord.hda bs=512 count=1

Kopieren der Partition "/dev/hda5 in die Datei "backup_hda5.img".

# dd if=/dev/hda5 of=backup_hda5.img

Kopieren der Partition "/dev/hda5 in die Datei "/tmp/backup_hda5.img" auf dem fernen Rechner "remotehost".

# dd if=/dev/hda5 | ssh user@remotehost dd of=/tmp/backup_hda5.img

Kopieren der Partition "/dev/hda5 in die Datei "backup_hda5.img". Die Blockgrösse wird dabei auf 1 MB gesetzt, was eine Verschnellerung des Vorgangs bewirkt.

# dd if=/dev/hda5 of=backup_hda5.img bs=1M

Erstellen der Datei "file" mit der Grösse von genau zwei Blöcken zu je 10 KB voller Nullen.

$ dd if=/dev/zero of=file bs=10k count=2

Erstellen der Datei "file" mit der Grösse von genau 3 GB voller Nullen.

$ dd if=/dev/zero of=file count=6291456

Ersetzen aller Grossbuchstaben in Datei "file1" durch Kleinbuchstaben und Ausgabe in Datei "file2".

$ dd if=file1 of=file2 conv=lcase

BIOS auslesen

...

# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
IBM VGA Compatible
08/27/02
ASUS V9180 Magic VGA BIOS Version 4.18.20.02.AS04
Version 4.18.20.02.00
Copyright (C) 1996-2002 NVIDIA Corp.
NV18 () Board
Chip Rev A0
...
American Megatrends Inc.
04/02/01
Micro-Star Inc.
MS-6398E
...
Intel(R) Pentium(R) 4 Processor
...
Maxtor 6Y120L0
WDC WD1200JB-00CRA1
       LITE-ON DVDRW SOHW-1693S
...
INTEL   I845E
...
American Megatrends, Inc. EPP BIOS 00.32
...
AMIBIOS 070010  04/02/01(C)2001 American Megatrends Inc., All Rights Reserved
(C)2001 American Megatrends Inc.,
62-5500-001169-00101111-040201-I845E
...

Diskette kopieren

Erzeugen einer exakten Kopie der Diskette und Ablage in der Datei "floppyimage".

$ dd if=/dev/fd0 of=floppyimage

Kopieren der Datei "floppyimage" auf eine Diskette.

$ dd if=floppyimage of=/dev/fd0

Weblinks

Vorlage:enwi