dd E-Mail
Geschrieben von: tpm   

Viele Programme unter Linux existieren schon lange und ihr ursprüngliches Einsatzgebiet wurde von neueren und geeigneteren übernommen. Trotzdem besitzen sie noch immer Fähigkeiten, welche sie besonders für spezielle Aufgaben unersätzlich machen.

 

Das Programm dd (disk dump) wurde früher primär zur schnellen und unkomplizierten Sicherung großer Datenmengen, bis hin zum Backup ganzer Festplatten verwendet.

Die einfache Syntax für das Kopieren einer Datei zwischen zwei Ordnern ist wie folgt aufgebaut:

 

example
dd if=/Quellpfad/Dateiname of=/Zielpfad/Dateiname

 

Mit if= wird das Input File angegeben, mit of= das Output File. Natürlich kann die Pfadangabe auch relativ erfolgen, je nachdem von wo man wohin kopieren möchte. Soweit also nichts, was man mit einem einfachen cp nicht auch lösen könnte.

 

Exkurs:

Die kleinste logische Einheit auf einer Festplatte ist ein Block mit einer Standardgröße von 512 Bytes. Um einen Ausgleich zwischen Performance und Speicherplatzausnutzung zu schaffen, fassen moderne Dateisysteme mehrere Blöcke zu einem logischen Cluster, meist 4 Blöcke (2k) oder 8 Blöcke (4k) zusammen. Dabei bleibt die physikalische Blockstruktur auf der Festplatte zwar erhalten, aber das Dateisystem behandelt dann mehrere Blöcke als eine logische Einheit und greift auch so auf sie zu.

 

Die herausragende Eigenschaft von dd liegt nun darin, dass man mit diesem Programm I/O-Operationen unter direkter Angabe der Blöcke auf einem blockorientierten Speichermedium wie einer Festplatte durchführen kann.

 

Daher ist dd ein sehr beliebtes Tool um den MBR einer Festplatte zu sichern:

 

input
dd if=/dev/sda of=mbr_backup bs=512 count=1

 

Damit werden die ersten 512 Bytes einer Festplatte (MBR) unter dem Namen mbr_backup ins aktuelle Verzeichnis kopiert. Mit bs=512 wird angegeben, mit welcher Blockgröße gelesen und geschrieben werden soll und mit count=1 wie oft. Da hier die Quelle keine Datei sondern ein Gerät ist, weiß dd nicht wieviel Daten kopiert werden sollen. Ohne die Angabe von count=1 würde es beim ersten Block der Festplatte beginnen und erst beim letzten aufhören, also eine vollständige Kopie der Festplatte anfertigen.

Zum Wiederherstellen des MBR genügt der Befehl unter Vertauschung der Quelle und des Ziels:

 

input
dd if=mbr_backup of=/dev/sda bs=512 count=1

 

 

Im Folgenden sollen die Auswirkungen bei unterschiedlichen Werten für die Block Size genauer betrachtet werden.

Wenn man beispielsweise eine 1 MB große Datei kopieren möchte und eine bs=512 verwendet, dann würde der Zyklus Lesen-Übertragen-Schreiben 2000 mal durchgeführt. Verwendet man hingegen eine bs=2048, dann reduzieren sich die Zyklen um 1/4.

Im lokalen Ordner wird dazu eine 1 MB große Datei mit dem Namen 1MBfile erstellt, die unter Verwendung unterschiedlicher bs-Werte in den Unterordner subdir/ kopiert wird:

 

input
dd if=/dev/urandom of=./1MBfile bs=512 count=2000

 

 

input
dd if=1MBfile of=./subdir/1MBfile bs=512

 

output
2000+0 Datensätze ein
2000+0 Datensätze aus
1024000 Bytes (1,0 MB) kopiert, 0,00895092 Sekunden, 114 MB/s

 

 

input
dd if=1MBfile of=./subdir/1MBfile bs=2048

 

output
500+0 Datensätze ein
500+0 Datensätze aus
1024000 Bytes (1,0 MB) kopiert, 0,00405883 Sekunden, 252 MB/s

 

 

input
dd if=1MBfile of=./subdir/1MBfile bs=4096

 

output
250+0 Datensätze ein
250+0 Datensätze aus
1024000 Bytes (1,0 MB) kopiert, 0,00306223 Sekunden, 334 MB

 

Voraussetzungen für die Verwendung der Block Size Option sind, dass die jeweiligen Geräte der Quelle und des Ziels die gleiche Standardblockgröße verwenden und dass der angegebene Wert hinter bs= ein Vielfaches von der originalen Blockgröße selbst ist. Des Weiteren sollte man nicht annehmen, dass mit höherer Block Size die Geschwindigkeit immer mehr zunimmt. Hier spielen mehrere Faktoren eine Rolle und der optimale Wert ist durch Teste zu ermitteln.

 

Wie bereits ersichtlich sein sollte, lassen sich mit dd sehr gut Dummy-Files erzeugen. Dies kann nützlich sein, wenn man beispielsweise die Netzwerkperformance und Stabilität überprüfen möchte. Dazu eignen sich eben sehr große Dateien mit definierten Größen besonders:

 

input
dd if=/dev/zero of=./100MB bs=2048 count=50000

 

Damit ist eine 100 MB große Datei aus dem Null-Device erzeugt worden. Alternativ kann man auch die Geräte /dev/random oder /dev/urandom verwenden. Analog dazu kann man sich Dateien mit anderen Größen erzeugen und hat somit einige Dateien zur Hand, mit denen sich der Durchsatz eines Netzwerks hervorragend ermitteln und optimieren lässt.

 

Zuletzt aktualisiert am Sonntag, den 21. März 2010 um 16:42 Uhr