Wiederherstellen eines MacOS Festplatten-Backups mit Hilfe von DD
Das Festplattendienstprogramm von MacOS bietet unter einer übersichtlichen Oberfläche ein umfangreiches Tool um mit Festplatten zu arbeiten.
Allerdings gibt es hier einige Probleme, welche oftmals einen Umweg über das Terminal benötigen.
Ich habe das Tool dazu benutzt um eine Festplatte aus einem neu erworbenen Netbook zu sichern, bevor ich mit verschiedenen Linux Distributionen spiele :-).
Das war notwendig, weil diese Festplatte eine Recovery-Partition enthält, von der man dann ggf. das Windows-System wiederherstellen kann.
Das Festplattendienstprogramm ermöglicht es sehr einfach, ein Image von einem kompletten Device (einer Festplatte) zu ziehen. Hierbei werden auch gleich nicht gefüllte Bereiche ausgespart, sodass von der 160 GB Platte ein knapp 8GB großes Image übrig bleibt. Bis zu diesem Zeitpunkt befand ich mich noch in dem Glauben, dass ich das Image zu einfach wieder zurückspielen könnte.
Achja: Für das Backup habe ich die 2,5″ SATA Platte ausgebaut und mit Hilfe eines USB-SATA Adapters meinem MacBook Pro zur Verfügung gestellt.
Die Struktur der Festplatte sieht wie folgt aus:
bash-3.2# diskutil list ... /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *160.0 GB disk1 1: Windows_NTFS System 85.9 GB disk1s1 2: DOS_FAT_32 69.6 GB disk1s2 3: 0xDE 4.5 GB disk1s4 ...
Dem unbedarften Leser scheint hier nichts besonderes aufzufallen, allerdings ist die letzte Partition vom Typ EISA-Konfiguration und kann von MacOS nicht gemountet werden. Interessanterweise ist es dem Festplattendienstprogramm aber möglich, die Partition mit in ein Gesamt-Image zu sichern, wenn man das komplette Device sichert. Dummerweise ist eine Wiederherstellung auf Device-Ebene nicht vorgesehen :-).
D.h. es ist möglich die Partition mit der (aktuellen) Windows Partition(NTFS), sowie eine weitere Partition mit Update-Daten(FAT32) wiederherzustellen, aber die eigentlich Revocery-Partition bleibt im Nirvana verschollen :-/. Weiterhin ist es hierzu notwendig, das sowohl Zielfestplatte, als auch Backup-Image die identische Partition-Struktur haben – d.h. legt ein Linux-Installer ein eigenes Partition-Schema an, so ist es nicht mehr so einfach möglich, das Backup wieder einzuspielen.
Was uns bei beiden Problemen hilft ist das Unix-Tool “dd”.
Als allererstes ist es wichtig, herauszufinden, wie die beiden Devicenamen lauten. Hierzu mounten wir das Backup-Image und schließen die Festplatte wieder an den Mac an.
Danach lassen wir uns die Disk-Device auflisten:
bash-3.2# diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *200.0 GB disk0 1: EFI 209.7 MB disk0s1 2: Apple_HFS Imotep HD 199.7 GB disk0s2 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *160.0 GB disk1 1: DOS_FAT_32 DISK1S1 84.9 GB disk1s1 2: Linux_Swap 970.6 MB disk1s3 3: DOS_FAT_32 69.6 GB disk1s2 4: 0xDE 4.5 GB disk1s4 /dev/disk2 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *160.0 GB disk2 1: Windows_NTFS System 85.9 GB disk2s1 2: DOS_FAT_32 69.6 GB disk2s2 3: 0xDE 4.5 GB disk2s4
Unsere Quelle ist /dev/disk2, unser Ziel /dev/disk1. Als allererstes kopieren wir den MBR vom Image auf die Festplatte (hier ist auch die Partition-Tabelle gespeichert - man erspart sich das aufwendige Neu-Partitionieren). Der MBR befindet sich innerhalb der ersten 512k einer Festplatte.
bash-3.2# sudo dd if=/dev/disk2s1 of=/dev/disk1s1 bs=512 count=1
Nun sind wir in der Lage die beiden sichtbaren Partitionen über das Festplattendienstprogramm wiederherzustellen. Hierzu wählen wir unser Ziel an. Unter dem Tab "Wiederherstellen" ziehen wir einmal unsere Zielpartition in das Input-Feld "Ziel" und aus dem gemounteten Image die Quell-Partition in das Input-Feld "Quelle". Sollte das Programm eine Fehlermedung ausgeben, so ist es ggf. notwendig, die Partitionen erst zu deaktivieren (Partition anwählen und über die Toolbar oben deaktivieren). Nach einigen Minuten sollte das Backup eingespielt sein. Dies ist ein großer Vorteil gegenüber von "dd", weil dd die Daten sektorweise wiederherstellt (also auch Nullsektoren 1:1 überträgt), während das Festplattendienstprogramm nur die reinen Daten überträgt und Nullsektoren ausspart.
Was bleibt ist die letzte nicht-sichtbare Partition. Dies kopieren wir nun abermals per "dd". Um nicht kB-Weise zu kopieren wählen wir hier 512MB Slices:
dd if=/dev/disk2s4 of=/dev/disk1s4 bs=512m
Obwohl es nur knapp 5GB sind, nimmt der Kopiervorgang einiges an Zeit in Anspruch, sodass sich abschätzen lässt, wie zeitaufwendig ein Wiederherstellen der kompletten 160GB per "dd" wäre.
Mich hat diese Erkenntnis eine halbe Nacht gekostet :-). Vielleicht steht irgendjemand einmal vor dem gleichen Problem (z.B. sichern/wiederherstellen von reinen Linux Partitionen).