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