1. Home
  2. Misc IT
  3. Basic
  4. Master Boot Record (MBR)

Master Boot Record (MBR)

In BIOS basierten Systemen enthalten die ersten 512 Byte des ersten Sektors einer Festplatte den Master Boot Record. Dieser enthält eine Partitionstabelle, eine Festplattensignatur und ursprünglich einen Bootloader, welcher durch das BIOS geladen und ausgeführt wird. Abgeschlossen wird der MBR mit der MBR Signatur 55AA(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 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.

Festplattensignatur

Die folgenden 4 Bytes zeigen die Festplattensignatur an. Beim Initialisieren des Datenträgers wird eine zufällig generierte Festplattensignatur 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. 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-Utility mit dem Parameter /mbr eine neue, gültige Disksignatur erzeugen.

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.

Beispiel MBR

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
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

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 sinnvollen Informationen entnommen werden. Die Festplattensignatur (blau) besteht aus einen zufällig generierten Wert aber die Partitionstabelle enthält nun analysierbare Informationen. Die vier verfügbaren Partitionen sind hier in rot, grün, türkis und pink dargestellt. Die Bedeutung der einzelnen Bytes pro Partition gliedern sich wie in folgender Tabelle aufgelistet:

Speicherplatz in HexGröße in BytesInhalt
0x001bestimmt ob von dieser Partition gestartet werden kann (80(16)=bootfähig; 00(16)=nicht bootfähig
0x013CHS-Eintrag des ersten Sektors
0x041Partitionstyp
0x053CHS-Eintrag des letzten Sektors
0x084Startsektor, relativ zum Anfang der Festplatte oder zur erweiterten Partition
0x0c4Anzahl der Sektoren in der Partition per LBA-Methode
Typ-Byte (Hex)Bezeichnung
0x00leer/unbenutzt
0x01FAT12 (Floppy Disks)
0x04FAT16 ≤ 32 MiB
0x05erweiterte Partition
0x06FAT16 > 32 MiB
0x07NTFS (Windows) oder HPFS (OS/2)
0x0BFAT32
0x0CFAT32 mit BIOS-Extensions (LBA)
0x0EFAT16 > 32 MiB mit BIOS-Extensions (LBA)
0x0Ferweiterte Partition mit BIOS-Extensions (LBA)
0x12OEM-Partition für Konfiguration, Diagnose, BIOS-Erweiterung (für Windows-Betriebssysteme unsichtbar)
0x42Dynamischer Datenträger
0x82Linux Swap / Solaris 2.6 X86 bis Solaris 9 X86
0x83Linux Native
0x8ELinux LVM
0xA5FreeBSD
0xA6OpenBSD
0xA9NetBSD
0xEEGPT: Legacy MBR mit folgendem EFI Header
0xEFGPT: Partition mit EFI-Dateisystem
Wichtige Partitionstypen

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 gebootet 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-Utility ü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 rot und grün die ersten beiden Partitionen. Die erste Partition 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 grün 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 blau markiert und wird in der hexadezimalen Ausgabe oben (ebenfalls blau 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.

Updated on 16. Februar 2024

Was this article helpful?