Master Boot Record (MBR)

In »BIOS«1) basierten Systemen enthalten die ersten 512 Byte des ersten Sektors einer Festplatte den »Master Boot Record«2). Dieser enthält eine »Partitionstabelle«3), eine »Festplattensignatur« und ursprünglich einen »Bootloader«4), welcher durch das BIOS geladen und ausgeführt wird. Abgeschlossen wird der MBR mit der »MBR Signatur« 55(16) AA(16). Der MBR gliedert sich wie folgt:

Bootloader:
Die ersten 440 Byte des MBR sind für den Bootloader reserviert. Der Bootloader ist ein ausführbarer Code und sucht in der Partitionstabelle nach einer aktiven Partition und lädt den »Bootsektor« der ersten aktiven Partition und führt diesen aus, woraus dann das eigentliche Betriebssystem gestartet wird. Moderne Systeme weichen von diesem Ablauf idR ab, weil deren Bootloader entweder zu groß für den MBR ist oder ein »Bootmanager«5) verwendet wird, der die Möglichkeit bietet zwischen mehreren Betriebssystemen zu wählen. In diesem Fall enthält die Bootloader Komponente im MBR nur einen Teil des gesamten Bootloaders, der es ermöglicht die weiteren Teile des Bootloaders auf dem Dateisystem der Festplatte zu suchen und auszuführen.

Disksignatur:
Die folgenden 4 Bytes zeigen die »Disksignatur« an. Beim Initialisieren des Datenträgers wird eine zufällig generierte Disksignatur erzeugt und im MBR angelegt. Diese Signatur wird ab Windows 2000 in der Registry im Schlüssel »HKLM\System\MountedDevices« gespeichert, wodurch das Windows Betriebssystem die Platte beim Mount-Vorgang identifizieren kann.6) An dieser Stelle befindet sich eine Falle, in die viele Anwender tappen, wenn sie ihre Festplatte klonen um zB ein vorhandenes System auf eine neue Festplatte zu migrieren. Einige Festplattenklonprogramme klonen nun den Inhalt der Festplatte, lassen aber die Disksignatur unberührt, was beim Starten des geklonten Betriebssystems einen Fehler bei der Erkennung der Festplatte erzeugt. In diesem Fall kann das »fdisk«-Utility7) mit dem Parameter »/mbr« eine neue, gültige Disksignatur erzeugen.8)

Partitionstabelle:
Nach der Disksignatur folgen zwei leere Bytes, welche normalerweise mit Null belegt sind, darauf folgen 64 Bytes für die Partitionstabelle, welche sich in vier 16 Byte Sektionen unterteilt. Jede dieser Sektionen enthält die Informationen einer Partition, was auch der Grund dafür ist warum auf einem MBR basierten System nur vier Partitionen vorhanden sein können, wobei allerdings unter Verwendung einer logischen Partition mehr als vier Partitionen angelegt werden können. Im Partitionsschema einer Partition wird ggf das Bootflag untergebracht (80(16)=bootfähig, 00(16)=nicht bootfähig), der »Partitionstyp« festgehalten (zB NTFS, FAT oder Linux), die Anfangs- und Endadressen sowohl physikalisch im »CHS-Schema«, wie auch logisch im »LBA-Schema«.

MBR Signatur:
Die letzten zwei Byte des MBR sind mit der »MBR Signatur« (auch »Magic Number« genannt) belegt, welche den MBR abschließt und als gültig deklariert. Die MBR Signatur besteht in seiner gültigen Form immer aus 55(16) und AA(16) (Auf Little Endian9) Systemen wird die MBR Signatur als »0xAA55« interpretiert). Ist diese Signatur nicht vorhanden, kann von diesem System nicht gebootet werden, auch wenn der restliche Inhalt des MBR in korrekter Form vorliegt.

Man kann den MBR auslesen und analysieren. Auf UNIX basierten Betriebssystemen eignet sich hier das dd-Utility:

# dd if=/dev/sda of=/home/mbr.dmp bs=512 count=1

Dieser Befehl liest von der Festplatte »/dev/sda« die ersten 512 Byte (»bs=512«) in die Datei »/home/mbr.dmp« ein. Der Inhalt dieser Datei repräsentiert dann den binären Inhalt des MBR und kann mit dem »od«-Utility zB in hexadezimaler Ausgabe angezeigt werden:

# od -t x1 /home/mbr.dmp

/home/mbr.dmp


0000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0
0000020 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00
0000040 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75
0000060 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b
0000100 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00
0000120 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00
0000140 00 00 00 00 ff fa eb 07 f6 c2 80 75 02 b2 80 ea
0000160 74 7c 00 00 31 c0 8e d8 8e d0 bc 00 20 fb a0 64
0000200 7c 3c ff 74 02 88 c2 52 be 80 7d e8 1c 01 be 05
0000220 7c f6 c2 80 74 48 b4 41 bb aa 55 cd 13 5a 52 72
0000240 3d 81 fb 55 aa 75 37 83 e1 01 74 32 31 c0 89 44
0000260 04 40 88 44 ff 89 44 02 c7 04 10 00 66 8b 1e 5c
0000300 7c 66 89 5c 08 66 8b 1e 60 7c 66 89 5c 0c c7 44
0000320 06 00 70 b4 42 cd 13 72 05 bb 00 70 eb 76 b4 08
0000340 cd 13 73 0d f6 c2 80 0f 84 d8 00 be 8b 7d e9 82
0000360 00 66 0f b6 c6 88 64 ff 40 66 89 44 04 0f b6 d1
0000400 c1 e2 02 88 e8 88 f4 40 89 44 08 0f b6 c2 c0 e8
0000420 02 66 89 04 66 a1 60 7c 66 09 c0 75 4e 66 a1 5c
0000440 7c 66 31 d2 66 f7 34 88 d1 31 d2 66 f7 74 04 3b
0000460 44 08 7d 37 fe c1 88 c5 30 c0 c1 e8 02 08 c1 88
0000500 d0 5a 88 c6 bb 00 70 8e c3 31 db b8 01 02 cd 13
0000520 72 1e 8c c3 60 1e b9 00 01 8e db 31 f6 bf 00 80
0000540 8e c6 fc f3 a5 1f 61 ff 26 5a 7c be 86 7d eb 03
0000560 be 95 7d e8 34 00 be 9a 7d e8 2e 00 cd 18 eb fe
0000600 47 52 55 42 20 00 47 65 6f 6d 00 48 61 72 64 20
0000620 44 69 73 6b 00 52 65 61 64 00 20 45 72 72 6f 72
0000640 0d 0a 00 bb 01 00 b4 0e cd 10 ac 3c 00 75 f4 c3
0000660 00 00 00 00 00 00 00 00 03 7e 09 00 00 00 80 20
0000700 21 00 83 93 29 2a 00 08 00 00 00 68 0a 00 00 b4
0000720 09 2a 05 fe ff ff fe 77 0a 00 02 80 f5 00 00 00
0000740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
0001000

In dieser Ausgabe sehen wir den MBR eines Linux Sytems, welchen man jetzt genauer analysieren kann. Der Index ist octal angegeben, das zugrunde liegende System ist in Little Endian Bytefolge zu interpretieren.

Die ersten 440 Byte bestehen aus Maschinen-Code und werden vom Bootloader belegt. Hier können eigentliche keine Informationen entnommen werden. Die Disksignatur besteht aus einen zufällig generierten Wert aber die Partitionstabelle enthält nun analysierbare Informationen. Die vier verfügbaren Partitionen sind hier in dunkelblau, lila, grün und hellblau markiert. Die Bedeutung der einzelnen Bytes pro Partition gliedern sich wie in folgender Tabelle aufgelistet:

Speicherplatz-
adresse in Hex
Größe
in Bytes
Inhalt
0x00 1 bestimmt ob von dieser Partition gestartet werden kann (80(16)=bootfähig; 00(16)=nicht bootfähig
0x01 3 CHS-Eintrag des ersten Sektors
0x04 1 Partitionstyp
0x05 3 CHS-Eintrag des letzten Sektors
0x08 4 Startsektor, relativ zum Anfang der Festplatte oder zur erweiterten Partition
0x0c 4 Anzahl der Sektoren in der Partition per LBA-Methode
Wichtige Partitionstypen
Typbyte (hex) Bezeichnung
0x00 leer/unbenutzt
0x01 FAT12 (Floppy Disks)
0x04 FAT16 ≤ 32 MiB
0x05 erweiterte Partition
0x06 FAT16 > 32 MiB
0x07 NTFS (Windows NT/2000/XP/Vista/7) oder HPFS (OS/2)
0x0B FAT32
0x0C FAT32 mit BIOS-Extensions (LBA)
0x0E FAT16 > 32 MiB mit BIOS-Extensions (LBA)
0x0F erweiterte Partition mit BIOS-Extensions (LBA)
0x12 OEM-Partition für Konfiguration, Diagnose, BIOS-Erweiterung (für Microsoft-Betriebssysteme unsichtbar)
0x42 Dynamischer Datenträger
0x82 Linux Swap / Solaris 2.6 X86 bis Solaris 9 X86
0x83 Linux Native
0x8E Linux LVM
0xA5 FreeBSD
0xA6 OpenBSD
0xA9 NetBSD
0xEE GPT: Legacy MBR mit folgendem EFI Header
0xEF GPT: Partition mit EFI-Dateisystem

Aus diesen Tabellen lässt sich nun ermitteln, welche Partitionen auf dem System angelegt sind, von welcher gebootet werden kann und welchen Typ sie entsprechen. Das erste Byte der ersten Partition hat den Wert »80(16)«, was bedeutet von dieser Partition kann gestartet werden. Das fünfte Byte enthält den Partitionstyp und hat den Wert »83(16)«, was Linux native repräsentiert. Bei den folgenden Partition wird mit dem ersten Byte angezeigt, dass davon nicht gebootet werden kann »00(16)«, wobei der Partitionstyp der zweiten Partition mit »05(16)« angezeigt wird, was einer erweiterten Partition entspricht und die letzten beiden verfügbaren Partitionen sind auf diesem System nicht vorhanden.

Wir können diese Angaben mit dem »fdisk«-Kommando überprüfen oder ggf auch ändern:

# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00097e03

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          43      340992   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              43        1045     8044545    5  Extended
/dev/sda5              43         407     2925568   83  Linux
/dev/sda6             408         586     1434624   83  Linux
/dev/sda7             586         645      473088   82  Linux swap / Solaris
/dev/sda8             645         676      246784   83  Linux
/dev/sda9             676        1045     2960384   83  Linux

Wir sehen hier eingefärbt in dunkelblau und lila die ersten beiden Partitionen. Die erste Partition (dunkelblau) besitzt das Bootflag, was in der Ausgabe von fdisk durch den Stern »*« angezeigt wird und in der Partitionstabelle durch die Belegung des ersten Bytes mit dem Wert »0x80« ausgedrückt wird. Des Weiteren kann der Ausgabe von fdisk das »Linux« Format mit dem Wert »0x83« im fünften Byte gegenüber gestellt werden, was laut og Tabelle »Linux nativ« entspricht.

Die lila eingefärbte Partition wird als Typ »Extended« angezeigt, was wiederum mit der »5« sowohl in der fdisk-Ausgabe wie auch in der Partitionstabelle im fünften Byte (»0x05«) angezeigt wird. Das erste Byte in der Partitionstabelle ist mit »0x00« belegt, was sich in der Ausgabe von fdisk durch das fehlen des Sterns in der Spalte »Boot« bestätigen lässt.

Die Festplattensignatur ist rot markiert und wird in der hexadezimalen Ausgabe oben (ebenfalls rot markiert) mit »03 7e 09 00« angegeben, was auf einem Little Endian System als 0x00097e03 quasi rückwärts gelesen interpretiert wird. Die restlichen Angaben der Größen und Sektorenanzahl betreffend werden ebenfalls aus den Angaben im MBR entnommen. So entsprechen zB die in er fdisk Ausgabe angegebenen 340.992 (1 KiB) Blöcke den im MBR angegebenen Wert: »00 68 0a 00«(16) → 0xa6800 (little endian) → 681.984(10); wobei hier aber eine 512 Byte Blockgröße verwendet wird, was eben genau 340.992 * 2 entspricht.

Verwandte Artikel:
-> Extended Boot Record (EBR)
-> Advanced Format Festplatten in der Praxis
-> Festplattengeometrie
-> Cluster: Windows Einheit auf Datenträgern
-> Die neue Festplattengeneration Solid-State-Disk (SSD)

pronto 2011/09/01 14:44

it/mbr.txt (8857 views) · Zuletzt geändert: 2013/01/21 12:41 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0