|
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:
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:
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:
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:
dd if=/dev/urandom of=./1MBfile bs=512 count=2000
dd if=1MBfile of=./subdir/1MBfile bs=512
2000+0 Datensätze ein 2000+0 Datensätze aus 1024000 Bytes (1,0 MB) kopiert, 0,00895092 Sekunden, 114 MB/s
dd if=1MBfile of=./subdir/1MBfile bs=2048
500+0 Datensätze ein 500+0 Datensätze aus 1024000 Bytes (1,0 MB) kopiert, 0,00405883 Sekunden, 252 MB/s
dd if=1MBfile of=./subdir/1MBfile bs=4096
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:
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.
|