7.5    Imagesicherung mit »dd«

Mit dd können Sie sehr leicht Images erzeugen oder zurückspielen. Das Tool liest Dateien oder Gerätedateien byteweise ein und schreibt sie wieder weg. Dadurch entsteht eine exakte 1:1-Kopie des Datenträgers. Das sind am Anfang die wichtigsten Optionen von dd:

7.5.1    Sichern des Master Boot Records (MBR)

Der Master Boot Record (MBR) besteht aus den ersten 512 Bytes der Festplatte. Dort stehen der erste Teil des Bootloaders und die Partitionstabelle. Es macht also durchaus Sinn, dass Sie diesen Bereich sichern. Für den Fall, dass Sie sich den Bootloader oder die Partitionstabelle zerschießen, sind Sie dann bestens gerüstet.

root@abacus:~# dd if=/dev/sda of=sda.mbr bs=512 count=1
1+0 Datensätze ein
1+0 Datensätze aus
512 Bytes (512 B) kopiert, 0,0201355 s, 25,4 kB/s

Listing 7.21    Sichern des MBR mit »dd«

Das Zurückspielen erfolgt analog. Die Angabe von bs und count können Sie sich allerdings sparen, da die Eingabedatei ja ohnehin nur 512 Byte groß ist.

root@abacus:~# dd if=sda.mbr of=/dev/sda

Listing 7.22    Zurücksichern des MBR mit »dd«

[+] Das versehentliche Löschen einer Partition muss kein Beinbruch sein, da tatsächlich nur der MBR verändert wird, nicht aber die Daten auf der Festplatte. Solange nicht wirklich in die Partition geschrieben wurde, können Sie die Daten durch Neuanlegen der Partitionstabelle retten.

7.5.2    Partitionstabelle mithilfe von »dd« zurückspielen

Die Partitionstabelle belegt nur 64 Bytes, und Sie finden diese ab dem Byte 446 im MBR. Folgendes Kommando schreibt nur die Partitionstabelle neu und verändert keine anderen wichtigen Informationen im Master Boot Record:

root@abacus:~# dd if=sda.mbr of=/dev/sda bs=1 count=64 skip=446 seek=446

Listing 7.23    Zurückspielen der Partitionstabelle mit »dd«

[+] Deutlich bequemer geht das Ganze mit sfdisk. Allerdings ist das Kommando auf älteren Systemen nicht immer serienmäßig installiert.

root@abacus:~# sfdisk -d /dev/sda > sda.ptable

Listing 7.24    Sichern der Partitionstabelle mit »sfdisk«

root@abacus:~# sfdisk /dev/sda < sda.ptable

Listing 7.25    Zurückspielen der Partitionstabelle mit »sfdisk«

7.5.3    Images mit »dd« erstellen

Natürlich können Sie auch ganze Festplatten oder Partitionen mit dd sichern. Das Ergebnis ist aber nur dann brauchbar, wenn Sie die Sicherung als Cold Backup durchführen. Die Partition darf nicht gemountet sein, um Inkonsistenzen zu vermeiden. Am leichtesten lässt sich das erreichen, indem Sie von einer beliebigen Linux-CD booten und dann die Sicherung mit dd durchführen. Wenn Sie eine externe Festplatte unter /mnt/BACKUP eingebunden haben, kann das so aussehen wie in Listing 7.26:

root@abacus:~# dd if=/dev/sda of=/mnt/BACKUP/sda.img bs=1024

Listing 7.26    Ein Image mit »dd« erstellen

Auf die Angabe von count können Sie in diesem Fall verzichten, da ja die gesamte erste Festplatte inklusive aller Daten abgezogen werden soll. Eine solche Sicherung ist sehr schnell, da dd die Daten blockweise von der Festplatte liest und sich nicht um einzelne Verzeichnisse und Dateien kümmern muss. Der Nachteil ist allerdings, dass das Image genauso groß wird wie die Festplatte, unabhängig von der tatsächlichen Belegung. Etwas platzsparender wird es, wenn Sie das Image gleich komprimieren:

root@abacus:~# dd if=/dev/sda bs=1024 | gzip > /mnt/BACKUP/sda.img.gz

Listing 7.27    Ein Image erstellen und direkt komprimieren

Die Rücksicherung sieht so aus:

root@abacus:~# gunzip -c /mnt/BACKUP/sda.img.gz | dd of=/dev/sda

Listing 7.28    Zurücksichern des Images mit »dd«

[✓] Falls Ihre Festplatte durch einen Defekt nicht mehr richtig ausgelesen werden kann, Sie die Daten aber unbedingt brauchen, dann kann das Tool dd_rescue aus dem Paket ddrescue gute Dienste leisten. dd_rescue bricht bei Lesefehlern nicht automatisch ab und überspringt defekte Sektoren. So kann man wenigstens den noch lesbaren Teil einer Festplatte retten. Das fertige Image kann dann mit etwas Glück mit einem Filesystem-Check wieder so weit gebracht werden, dass es gemountet werden kann.

7.5.4    Einzelne Dateien mit »dd« aus einem Image zurückspielen

Sofern Sie nicht eine ganze Festplatte, sondern nur eine Partition gesichert haben, ist das zurückspielen ganz leicht. Mithilfe des loop devices lassen sich Images ganz normal mounten. In Listing 7.29 sehen Sie ein Beispiel für /boot:

root@abacus:/# dd if=/dev/sda1 of=/tmp/boot.img bs=1024
128488+1 Datensätze ein
128488+1 Datensätze aus
131572224 Bytes (132 MB) kopiert, 0,372759 s, 353 MB/s
root@abacus:/# mount -o loop /tmp/boot.img /mnt
root@abacus:/# ls /mnt
abi-2.6.31-20 initrd.img-2.6.31-20 System.map-2.6.31-22
abi-2.6.31-21 initrd.img-2.6.31-21 vmcoreinfo-2.6.31-20
abi-2.6.31-22 initrd.img-2.6.31-22 vmcoreinfo-2.6.31-21
config-2.6.31-20 lost+found vmcoreinfo-2.6.31-22
config-2.6.31-21 memtest86+.bin vmlinuz-2.6.31-20
config-2.6.31-22 System.map-2.6.31-20 vmlinuz-2.6.31-21
grub System.map-2.6.31-21 vmlinuz-2.6.31-22
root@abacus:/#

Listing 7.29    Einzelne Dateien aus einem Partitionsimage zurücksichern

Bei Images von ganzen Festplatten gestaltet sich der Vorgang etwas schwieriger. Da sich Festplatten nicht mounten lassen, sondern nur Partitionen, müssen Sie zunächst bestimmen, an welcher Position im Image sich die gesuchte Partition befindet. Das können Sie manuell erledigen, indem Sie sich zunächst mit dem Tool sfdisk die Partitionierung des Images anzeigen lassen. Danach können Sie dann aus dem Anfang der Partition, multipliziert mit der Sektorgröße, den Offset errechnen. In diesem Fall liegt der Partitionsanfang bei Sektor 63 und die Sektorgröße beträgt 512 Bytes. Unser Offset ist damit 32.256:

root@abacus:/# sfdisk -luS /tmp/root.img
Festplatte /tmp/root.img: 25 Zylinder, 255 Köpfe, 63 Sektoren/Spur
Einheit = Sektoren von 512 Bytes, Zählung beginnt bei 0

Gerät boot. Anfang Ende #Sektoren Id System
/tmp/root.img1 * 63 257039 256977 83 Linux
/tmp/root.img2 257040 15888284 15631245 82 Linux Swap / Solaris
/tmp/root.img3 15888285 797145299 781257015 8e Linux LVM
/tmp/root.img4 797145300 1953520064 1156374765 5 Erweiterte
root@abacus:/# mount -o loop,offset=32256 /tmp/root.img /mnt

Listing 7.30    Mounten eines Plattenimages

Wesentlich leichter ist der Vorgang, wenn Sie das Tool kpartx zu Hilfe nehmen. kpartx findet die Partitionsgrenzen selbstständig und legt entsprechende Mapping-Einträge an, um die Partitionen bequem mounten zu können:

root@abacus:/# kpartx -l /tmp/root.img
loop0p1 : 0 256977 /dev/loop0 63
loop0p2 : 0 15631245 /dev/loop0 257040
loop0p3 : 0 781257015 /dev/loop0 15888285
loop0p4 : 0 1156374765 /dev/loop0 797145300

Listing 7.31    Auflisten der Partitionen mit »kpartx«

Wenn Sie die Option -l durch -a ersetzen, werden die Links angelegt. Danach können Sie die Partitionen mounten:

root@abacus:/# kpartx -a /tmp/root.img
root@abacus:/# mount /dev/mapper/loop0p1 /mnt

Listing 7.32    Mounten der Partitionen

Nach Abschluss der Recovery-Arbeiten können Sie die Mappings mit der Option -d wieder löschen. Zuvor muss die Partition natürlich wieder ausgehängt werden.

root@abacus:/# umount /mnt/
root@abacus:/# kpartx -d /tmp/root.img
loop deleted : /dev/loop0

Listing 7.33    Dismounten der Partitionen

Selbstverständlich können Sie eine Sicherung mit dd auch wieder per ssh über das Netz bewerkstelligen. Inklusive einer Komprimierung sieht das passende Kommando dann so aus:

dd if=/dev/sda bs=1024 | gzip | ssh root@backupserver "dd of=/BACKUP/sda.img.gz"

Listing 7.34    Sicherung mit »dd« über das Netz

7.5.5    Abschlussbemerkung zu »dd«

dd ist zum Sichern kompletter Server natürlich nur bedingt geeignet. Zum einen ist es hinderlich, dass die Partitionen für die Sicherung nicht gemountet sein dürfen, und zum anderen schränkt der Platzbedarf eines vollständigen Images die Einsatzmöglichkeiten ein. Kleinere Systemplatten lassen sich noch problemlos sichern. Gerade im Zeitalter der Virtualisierung, bei der virtuelle Festplatten mit teilweise nur 10 GB Kapazität durchgereicht werden, funktioniert das Disk Imaging noch ganz gut. Von einem Fileserver mit 10 TB Speicherkapazität wird allerdings niemand ernsthaft ein Image ziehen wollen.

Dessen ungeachtet hat das Tool natürlich den Vorteil, dass sich jeder Server nach dem Disaster-Fall ganz einfach 1:1 wiederherstellen lässt. In jedem Fall ist dd ein sehr nützliches Werkzeug und sollte jedem Administrator bekannt sein. Denn zumindest eine Kopie des MBR sollten Sie parat haben, wenn Sie mit dem Bootloader experimentieren.

Wenn Sie sich intensiver mit Disk Imaging beschäftigen wollen, dann lohnt ein Blick auf parted aus dem gleichnamigen Paket. Es ist das Schweizer Taschenmesser unter den Imaging-Tools. Mit parted lassen sich Partitionen wiederherstellen, verschieben, in der Größe verändern und vieles mehr.