Master-Boot-Record sichern Allgemeines Mit dem Master-Boot-Record (MBR) kommt der normale Computernutzer nur selten in Kontakt, eigentlich nur zweimal. Bei der Installation von Linux wird in der Regel nachgefragt, wo der Installer Grub installieren soll, entweder in den MBR oder in die Partition. Installiert man Windows wird der Nutzer damit überhaupt nicht belästigt. Den zweite Kontakt hat man meistens dann, wenn der Computer das OS nicht mehr startet und es den MBR aus irgendeinem Grund zerbröselt hat. Da bei mir genau dieser Fall eingetreten ist, habe ich mich mit dem MBR einmal näher beschäftigt. Kurz bevor das BIOS seine Routine abgearbeitet hat sucht es gemäß der festgelegten Reihenfolge im BIOS Menü nach einem bootfähigen Medium. Ist dies eine Festplatte so befindet sich der MBR in Spur 0 Seite 0 Sektor 1 (die Erläuterung der Begriffe bitte in Wikipedia nachlesen). Der MBR ist exakt 512 Byte groß. Diese teilen sich wie folgt auf: Byte dezimal Beschreibung Größe (Byte) 0 Boot-Loader max. 440 Bytes 440 Disk-Signatur 4 444 Null 2 446 Beginn der 64 Partitionstabelle 510 MBR Signatur 55 1 511 MBR Signatur AA 1 Gesamt: 512 Byte Wie aus der Tabelle ersichtlich befindet sich nicht nur der Boot-Loader im MBR sondern auch die Partitionstabelle. die Angaben über Beginn, Ende und Größe enthält. 1
Ist diese Tabelle beschädigt, so wird es schwierig auf die Partitionen zuzugreifen. Mit geeigneten Werkzeugen ist es aber möglich diese Tabelle zu reparieren. Was aber noch besser ist, ist eine vernünftige und vor allem aktuelle Sicherung dieser Tabelle zu haben. Wir können den MBR komplett speichern, also alle 512 Bytes und haben somit auch die Partitionstabelle gesichert. Es gibt aber einen Pferdefuß bei dieser Geschichte. Solange wir 4 primäre Partitionen auf der Festplatte haben können wir den MBR kpl. sichern. Befindet sich einen erweiterte Partition auf der Platte funktioniert dies Vorgehensweise nicht und wir müssen die Partitionstabelle separat sichern und auch wieder separat zurück spielen. In Zeiten wo die meisten Computer 2 oder mehr Festplatten besitzen empfiehlt es sich sowieso die Partitionstabellen aller vorhandenen Festplatten zu sichern. Dies geschieht am besten mit Hilfe eines kleinen Scripts. Wir werden also in unserem Beispiel den MBR bis zum Byte 446 und die Partitionstabelle separat sichern. Für alle die sich einen MBR in hexadezimaler Form mal näher ansehen wollen, hier ein Beispiel. Die anderen machen einfach beim Kapitel Sicherung weiter 2
Offset *0 *1 *2 *3 *4 *5 *6 *7 *8 *9 *A *B *C *D *E *F 0000: eb 48 90 d0 bc 00 7c fb - 50 07 50 1f fc be 1b 7c 0010: bf 1b 06 50 57 b9 e5 01 - f3 a4 cb bd be 07 b1 04 0020: 38 6e 00 7c 09 75 13 83 - c5 10 e2 f4 cd 18 8b f5 0030: 83 c6 10 49 74 19 38 2c - 74 f6 a0 b5 07 b4 03 02 0040: ff 00 00 20 01 00 00 00-00 02 fa 90 90 f6 c2 80 0050: 75 02 b2 80 ea 59 7c 00-00 31 c0 8e d8 8e d0 bc 0060: 00 20 fb a0 40 7c 3c ff - 74 02 88 c2 52 be 7f 7d 0070: e8 34 01 f6 c2 80 74 54 - b4 41 bb aa 55 cd 13 5a 0080: 52 72 49 81 fb 55 aa 75-43 a0 41 7c 84 c0 75 05 0090: 83 e1 01 74 37 66 8b 4c - 10 be 05 7c c6 44 ff 01 00a0: 66 8b 1e 44 7c c7 04 10-00 c7 44 02 01 00 66 89 00b0: 5c 08 c7 44 06 00 70 66-31 c0 89 44 04 66 89 44 00c0: 0c b4 42 cd 13 72 05 bb - 00 70 eb 7d b4 08 cd 13 00d0: 73 0a f6 c2 80 0f 84 ea - 00 e9 8d 00 be 05 7c c6 00e0: 44 ff 00 66 31 c0 88 f0-40 66 89 44 04 31 d2 88 00f0: ca c1 e2 02 88 e8 88 f4-40 89 44 08 31 c0 88 d0 0100: c0 e8 02 66 89 04 66 a1-44 7c 66 31 d2 66 f7 34 0110: 88 54 0a 66 31 d2 66 f7-74 04 88 54 0b 89 44 0c 0120: 3b 44 08 7d 3c 8a 54 0d - c0 e2 06 8a 4c 0a fe c1 0130: 08 d1 8a 6c 0c 5a 8a 74-0b bb 00 70 8e c3 31 db 0140: b8 01 02 cd 13 72 2a 8c - c3 8e 06 48 7c 60 1e b9 0150: 00 01 8e db 31 f6 31 ff - fc f3 a5 1f 61 ff 26 42 0160: 7c be 85 7d e8 40 00 eb - 0e be 8a 7d e8 38 00 eb 0170: 06 be 94 7d e8 30 00 be - 99 7d e8 2a 00 eb fe 47 0180: 52 55 42 20 00 47 65 6f - 6d 00 48 61 72 64 20 44 0190: 69 73 6b 00 52 65 61 64-00 20 45 72 72 6f 72 00 01a0: bb 01 00 b4 0e cd 10 ac - 3c 00 75 f4 c3 00 00 00 01b0: 00 00 00 00 00 00 00 00 - ee dd 04 00 00 00 80 01 01c0: 01 00 07 fe ff ff 3f 00-00 00 34 0a 80 02 00 00 01d0: c1 ff 83 fe ff ff 73 0a - 80 02 cd a2 83 0c 00 fe 01e0: ff ff 05 fe ff ff 40 ad - 03 0f fa e7 1d 00 00 00 01f0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 aa Dies ist ein kpl. MBR, also alle 512 Byte. Obwohl alles in hexadezimaler Form vorliegt können wir doch einige interessante Daten herauslesen. Sehr schön zu sehen ist ab Position 01b0E (oder 446 Byte) der Beginn der Partitionstabelle mit seinen 4 Einträgen. Weiterhin ist gut zu erkennen dass jeder Eintrag genau 16 Byte groß ist. Die 80 im ersten Eintrag der Partitionstabelle bedeutet dass diese bootfähig ist, würde dort eine 00 stehen wäre sie nicht bootfähig. Im 5. Byte jedes Eintrags steht das Dateisystem. 1. Eintrag 07 NTFS 2. Eintrag 83 Linux ext3 3. Eintrag 05 erweiterte Partition 4. Eintrag frei Als letzte Position (rot) sehen wir die Signatur des MBR (2 Byte). Ist diese Signatur 3
vorhanden geht das Bios davon aus dass der MBR gültig ist. Fehlt diese Signatur geht das Bios von einem neuen oder gelöschten Datenträger aus und zeigt eine Fehlermeldung an. Sicherung In der Konsole su eingeben (auf den Bindestrich achten). Warum su -? Wenn wir uns nur mit su als root einloggen wechseln wir lediglich die Identität, nicht aber die Arbeitsumgebung. auch die Umgebungsvariablen werden nicht richtig gesetzt. Dieses Verhalten lässt sich sehr gut mit dem Befehl <env> überprüfen. Weil wir den MBR und die Partitionstabelle separat sichern werden fassen wir den Befehl in einem kleinen Script zusammen. Listing 1 #!/bin/bash mount /dev/fd0 /media/floppy dd if=/dev/hda of=/dev/fd0/mbr_backup.hda bs=446 count=1 sfdisk -d /dev/hda > /media/floppy/parttab_backup.hda sfdisk -d /dev/hdb > /media/floppy/parttab_backup.hdb umount /media/floppy Der MBR wird als Binärdatei abgespeichert. Um die Datei in ein für uns lesbares Format umzuwandeln und anzusehen verwenden wir den Befehl: file mbr_backup_hda > /home/michael/mbr_txt Der Befehl schreibt die Ausgabe in eine Datei, die Umleitung kann natürlich auch weggelassen werden. Wir erhalten beispielsweise folgende Ausgabe: 4
Listing 2 mbr_backup_hda: x86 boot sector; partition 1: ID=0x7, active, starthead 1, startsector 63, 41945652 sectors; partition 2: ID=0x83, starthead 0, startsector 41945715, 209953485 sectors; partition 3: ID=0x5, starthead 254, startsector 251899200, 1959930 sectors, code offset 0x48 Um den MBR in hexadezimaler Form (wie obiges Beispiel) anzusehen können wir auf der grafischen Oberfläche khexedit verwenden. Auf der Kommandozeile reicht der Befehl hex mbr_backup.hda Die Ausgabe des Befehls sfdisk können wir uns direkt ansehen. Die Device Namen sind natürlich an die jeweiligen Bedürfnisse anzupassen Wie im Beispiel zu sehen wird nicht nur der MBR sondern auch die Partitionstabelle von zwei Festplatten gesichert. Zum Speichern der Partitionstabelle verwenden wir den sfdisk Befehl. Dieser Befehl kann sowohl eine einfache (4 Primäre Partitionen) als auch eine erweiterte (3 Primäre, eine erweiterte Partition) Partitionstabelle speichern. Das Script ist beliebig erweiterbar und kann in auch in ein Backupscript eingebaut werden. Wichtig ist in dem Zusammenhang nur, dass die Sicherung auf einem externen Medium (in unserem Beispiel ist es eine Diskette) gespeichert wird, sonst nützt sie im Fall der Fälle nichts. Beim Abspeichern nicht vergessen, das Script ausführbar zu machen! Rücksicherung Die Rücksicherung erfolgt am besten von einer Live CD (z. B. Knoppix, Kanotix). Mit folgendem Befehl wird der MBR wieder zurückgespielt: dd if=/dev/fd0/mbr_backup of=/dev/hda count=446 bs=1 5
Anschließend spielen wir die Partitionstabelle wieder zurück: sfdisk /dev/hda < /media/floppy/parttab_backup.hda Mit dem obigen sfdisk Befehl können wir natürlich auch die Partitionstabellen aller anderen Festplatten zurückspielen. Danach sollte hoffentlich alles wieder funktionieren!! 6