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 |