MBR + Partitionstabelle

Grundsätzliches:

PC's speichern die Daten auf der Festplatte in Sektoren zu je 512 Byte ab, wobei ein Sektor die kleinste adressierbare Einheit ist. Das Dateisystem fasst dabei i.d.R. mehrere Sekoren zu Blöcken/Clustern zusammen. Diese Blöcke sind dann die kleinsten adressierbaren Einheiten des Dateisystems. Das FAT-Dateisystem ist ein 16 bittiges und kann bis zu 65.525 Cluster verwalten (=2GB). Daraus ergibt sich eine max. Clustergröße von 32 KB, die aber in Schritten mit der Partitionsgröße von 512 Byte bis auf 32 KB ansteigt. So besitzt FAT32 (=VFAT) eine Clustergröße von 4 KB bei einer max. Partitionsgröße von 8GB, rest s. Tabelle.

Partitionsgröße FAT-Typ Sektoren pro Cluster Clustergröße
0-15 MB 12-Bit 8 512 Byte
16-127 MB 16-Bit 4 2 KB
128-255 MB 16-Bit 8 4 KB
256-511 MB 16-Bit 16 8 KB
512-1023 MB 16-Bit 32 16 KB
1024-2047 MB 16-Bit 64 32 KB
2048-4096 MB 16-Bit 128 64 KB *)
0,256-8,01 GB 32-Bit 8 4 KB
8,02-16,02 GB 32-Bit 16 8 KB
16,03-32,04 GB 32-Bit 32 16 KB
> 32,04 GB 32-Bit 64 32 KB

*) nur verfügbar unter Windows NT oder Windows 2000.

Bei Linux ist dies bei ext2/ext3 einstellbar und liegt default-mäßig bei 1 KB (=2 Sektoren). Dies liegt daran, daß bei der Installation eine Speicherseite (memory page) des Prozessors, welcher der Kernel verwaltet, herangezogen wird. Bei ia32 beträgt der Wert 4 KB (default). Manchmal kann es vorkommen, daß eine Partition aus einer 'ungeraden' Anzahl von Sektoren besteht. Dies wird dann mit fdisk -l /dev/hda mit einem + Zeichen versehen.

Die physikalische Ansteuerung der Platte über die CHS-Werte entstammt aus einer Zeit, bei der der Plattencontroller noch im Rechner steckte.

CHS steht für Zylinder-, Kopf- und Sektronummer. Deren Bereiche erstrecken sich wie folgt:

Zylinder: 0 - 1023 (wobei Festplatten >= 504 MB diesen Wert aus dem Produkt von Zylinder x Köpfe x Sektoren = Kapazität der Festplatte im BIOS einzutragen ist)
Köpfe: 0 - 15
Sektoren: 1 - 63

Ein CHS-Mapping im BIOS sorgt dafür, daß weniger als 1024 Zylinder erscheint und daß Werte möglich sind von:

Zylinder: 0 - 1023 (damit 1024 Zylinder)
Köpfe: 0 - 254 (255 sind wg. MS-DOS-Bug nur möglich, daher liefern alle modernen BIOSse Mappings mit max. 255 Köpfen)
Sektoren: 1 - 63 (63 Sektoren)

Die CHS-Adressierung ist eine 24-bittige, die LBA eine 32-bittige und steht für logische Blockadressen. Diese beginnen von 0 an zu zählen.

Beide Adressierungsarten werden von modernen Festplatten unterstützt wobei aber die CHS-Adressierung nichts mehr mit der tatsächliche Geometrie zu tun hat.

Der MBR sitzt in Zylinder 0, Kopf 0 und Sektor 1 und enthält ein Maschinenprogramm, daß den Bootsektor der aktiven Partition in den Speicher lädt.

Die Adressierung über CHS erfolgt über den INT 13h, welcher nur noch von DOS benutzt wird. Modernere OS brauchen dies zumindest für den Bootvorgang.

Ab Windwos 95b werden die erweiterten Funktionen von INT 13h verwendet, um Platten > 8 GB ansprechen zu können. Der MBR besteht aus einem Maschinenprogramm daß den Bootsektor der aktiven Partition in den Speicher lädt. Anschließend folgt ab Adresse 1BE die Partitionstabelle. Die Partitionstabelle endet mit der Adresse 1FD. Mit der Signature 55AA, auf den Adressen 1FE und 1FF, wird der 1. Sektor der Festplatte abgeschlossen. Die folgende Tabelle zeigt die Bedeutung der einzelnen Bits der Partitionstabelle:

In der Partitionstabelle sind 4 Eintäge möglich deren Aufbau identisch sind.

Adresse: Bedeutung Wert/Erläuterung
1XE Bootindikator 0h = Partition nicht aktiv, 80h = aktiv *)
1XF Anfang Kopfnummer 0h – FEh
1X0 Anfang Sektornummer: Nur die Bits 0 – 5 1h – FFh
1X0 Anfang Zylindernummer: Bits 6 – 7 Höherwertiger Teil der Nummer
1X1 Anfang Zylindernummer Niederwertiger Teil der Nummer
1X2 Partitionstyp s. nächste Tabelle
1X3 – 1X5 Ende der …: Gleiche Bedeutung wie für  Anfang
1X6 – 1X9 relative LBA Anfangsadresse
1XA - 1XD Länge der Partition in Sektoren

*) was für eine Verschwendung an Bits denn 254 Werte werden nicht ausgewertet.

Partitionstyp: Beschreibung: entspricht Partitionsgröße:

00

leer

01

FAT12 kleiner 32MB innerhalb von 8 GB

02

XENIX root

03

XENIX usr

04

FAT16 <= 32 MB kleiner 504 MB innerhalb von 8 GB

05

erweiterte Partition kleiner 8 GB

06

FAT16 >= 32 MB kleiner 2 GB innerhalb von 8 GB

07

HPFS/NTFS Anfang muß innerhalb der 1024 Zylinder liegen

08

AIX

09

AIX bootable

0A

OS/2 Bootmanager

0B

FAT32 Ende der Partition muß unterhalb von 8 GB sein

0C

FAT32 Ende der Partition oberhalb von 8 GB

0E

FAT16 mit BIOS-Extension kleiner 2 GB oberhalb von 8 GB

0F

erweiterte Partition mit BIOS-Extension größer als 8 GB bzw. oberhalb von 8 GB
10 OPUS
12 Copaq config partition
18 AST
24 NEC DOS 3.x
38 THEOS ver 3.2
39 THEOS ver 4
3A THEOS ver 4
3B THEOS ver 4 extended partition
3C Partition Magic recovery partition
40 Venix 80286
41 Personal RISC
42 SFS
45 Boot-US Bootmanager
4D QNX 4.x
4E QNX 4.x 2nd part
4F QNX 4.x 3rd part
50 OnTrack DiskManager RO
51 OnTrack RW Novell
52 Microport
53 Disk Manager 6.0
54 Disk Manager 6.0
55 EZ-Drive
56 GoldenBow
61 SpeedStor
63 GNU HURD Unix System V
64 Novell Netware 286
65 Novell Netware 386
67 Novell
68 Novell
69 Novell
70 DiscSecure MultiBoot
75 PIC/IX
80 Old MINIX
81 Linux/MINUX

82

Linux Swap

83

Linux nativ

84

Hibernation partition

85

Linux extended

86

FAT16 volume set

87

NTFS volume set

93

Amoeba

94

Amoeba BBT

a0

Phoenix Save-To-Disk

a5

BSD/386

a6

OpenBSD

a7

NEXTSTEP

b7

BSDI fs

b8

BSDI swap

c6

FAT 16 volume set (corrupt)

c7

Syrinx

cb

CP/M

db

Concurrent DOS

e1

DOS access

e3

DOS R/O

eb

BeOS

f2

DOS secondary

ff

BBT

Der Buchstabe X steht für eine der Hex-Zahlen B, C, D, E oder F.

Das verstecken einer Partition erfolgt üblicherweise durch den Partitionstyp 1X.

Konventrion: Obwohl in der Partitionstabelle prinzipiell beliebige Anfangs- und End-Adressen einer Partition stehen können, sollten grundsätzlich diese auf Sektor 1 einer Spur beginnen und bei einer Zylindergrenze enden, also bei der Endadresse mit maximaler Kopf- und Sektornummer. Somit läßt sich das Mapping an der Endadresse einer beliebigen Partition ablesen, mit dem die Platte eingerichtet wurde. Die erweiterte Partition beginnt grundsätzlich auf einer Zylindergrenze. Nach dieser Konvention beginnt die erste Partition einer Platte fast immer bei Zylinder 0, Kopf 1, Sektor 1, die erweiterte Partition frühestens auf Zylinder 1, Kopf 0, Sektor 1, wodurch (je nach Mapping) die restlichen 7,5 MB nach dem MBR nicht nutzbar sind.

Die LBA-Werte lassen sich für logische INT-13h Mapping errechnen. Bekannt sein muß die Anzahl der Köpfe H und die Sektoren pro Spur S der Festplatte. Die Formel einer chs-Adresse lautet:

LBA-Adresse = (c × H + h) × S + s - 1

Die Sicherungskopie der Partitionstabelle liegt zwischen 5BE - 5FF. Anschließend von 600 - 6DF existiert die Kopie des Bereiches von 400 - dDF.

DOS, Windows, Linux im MBR:

Es hat sich gezeigt, daß Windows NT entgegen mancher Vermutungen, den MBR nicht antastet. Windows 95 und seine Nachfolger dagegen verändert ihn gravierend. So ist es auch zu erklären, warum sich NT nicht nach Windows98 installieren läßt. Aber auch Linux verändert den MBR: Es werden die Bytes der Adresse DD, DE und DF von 34 nach 46, 52 nach 22 und 08 nach 10 überschrieben. Dabei spielt es keine Rolle ob LILO installiert wurde oder mit Loadlin gestartet wird.

Der Bootcode:

Der Bootcode kann sowohl im MBR als auch im Bootsektor der Partition stehen. Der Bootsektor im MBR umfasst 446 Bytes, der Rest ist für die Partitionstabelle reserviert (nicht zu verwechseln mit der FAT etc.). Befindet sich der Bootloader in der Partition, so wird das OS über das Setzen der aktiven Partition gesteuert.
Öfter aber verwenden OS einen Zweigeteilten Bootloader, einen im MBR, auch primary bootloader genannt, und einen Bootsektor in der Partition, secondary bootloader. LILO ist so ein ein Bootloader. Dabei geben die einzelnen Buchstaben darüber auskunft, welche Teile gerade geladen werden: Das erste 'L' zeigt an, daß der 'primäry bootlader' gestartet ist. Sobald der 'secondary bootloader' geladen wurde, erscheint das ' I '. Der 'secondary bootloader' signalisiert mit dem zweiten 'L', daß er gestartet ist. Stößt LILO auf ein Problem, erscheint ein zweistelliger hexadezimaler Fehlercode, der in der Lilo-Dokumentation erläutert ist, ansonsten gibt er das letzte 'O' und den Bootpromt aus.

Der Bootsektor einer FAT-Partition:

Der erste Sektor einer FAT-Partition ist der Bootsektor. Neben den Maschinencode für den Bootvorgang enthält er einige Felder mit Informationen über das Dateisystem (Beschreibung s. unten). Die FAT's schließen sich unmittelbar an den Bootsektor an, und danach folgt das Stammverzeichnis der Partition, gefolgt vom eigentlichen Datenbereich.

Dateisystem-Felder im Bootsektor:

Adresse (Offset) Beschreibung: Wert:
0 EB
1 xx
2 90
3 - 0a OEM-ID z.B. MSWIN4.1
0b - 0c Bytes / Sektor
0d Anzahl Sektoren pro Cluster
0e - 0f Länge des Bootbereichs in Sektoren bei FAT12 und FAT 16 normalerweise 1
10 Anzahl der FAT's normalerweise 2
11 - 12 Bei FAT12 und FAT16 Anzahl der Einträge im Stammverzeichnis; bei FAT32 unbelegt
13 - 14 Länge der Partition in Sektoren 0 wenn mehr als 65535; dann s. 20 - 23
15 Media-Descriptor bei Festplatten f8
16 - 17 Anzahl der Sektoren pro FAT bein FAT32 = 0
18 - 19 Sektoren / Spur
1a - 1b Anzahl Köpfe
1c - 1f Versteckte Sektoren enthält gleichen Wert wie Feld 'relative sectore aus der Partitionstabelle
20 - 23 Länge der Partition in Sektoren falls > 65535 Enthält denselben Wert wie das entsprechende Feld in der Partitionstabelle
ab hier zusätzliche Felder für FAT32
24 - 27 Sektoren pro FAT
28 - 29 Flags Bit 7 gesetzt, wenn FAT nicht autom. gespiegelt wird. Dann Nummer der aktiven FAT in Bits 0 - 3
2a - 2b FS-Version
2c - 2f Startcluster des Stammverzeichnis
30 - 31 FS-Info Sektornummer des FS-Info-Sektors. 0ffff wenn nicht vorhanden
32 - 33 Sektornummer des Backup-Bootsektors 0ffff wenn nicht vorhanden
34 - 3f reserviert