25.3 Bootcode
Dieser Bootcode befindet sich bei Festplatten im Master-Boot-Record (MBR). Dieser Bereich der Festplatte, der sich übrigens im ersten Sektor der Platte befindet, ist so aufgeteilt, dass darin sowohl der Bootcode als auch die Partitionstabelle der Festplatte untergebracht sind. Die Aufgabe des Bootcodes besteht nun entweder darin,
- das Betriebssystem zu starten, das sich auf der als aktiv markierten Partition befindet,
- oder dem Benutzer zunächst die Möglichkeit zu bieten, eines von mehreren Betriebssystemen – oder einen von mehreren Kerneln – auszuwählen und dann dieses System zu starten.
Platzprobleme
Da ein Sektor auf PC-Systemen nur eine Größe von 512 Bytes aufweist, müssen sich Bootcode und Partitionstabelle diesen Platz teilen: In den ersten 446 Bytes wird der Programmcode des Bootloaders ausgelagert, und in den nächsten 64 Bytes wird die Partitionstabelle untergebracht. Die letzten zwei Bytes enthalten den Hexcode 0xaa55, der zur Identifizierung des MBRs selbst dient.
Diese 446 Bytes reichen definitiv nicht aus, um einen vernünftigen Bootloader darin unterzubringen. Daher dient dieser Code in der Regel nur dazu, einen zweiten Code zu laden, der sich auf einer der Partitionen befindet. Diesen zweiten Bootloader bezeichnet man als Secondary Bootloader. Typische Secondary Bootloader für Linux-Systeme sind LILO und Grub.
Ebenfalls sehr bekannt ist GAG.
25.3.1 Die Partitionstabelle
Die Partitionstabelle Partitionstabelle
besteht aus vier jeweils 16 Byte langen Einträgen. Daraus lässt sich schließen, dass pro Festplatte natürlich auch nur maximal vier Primärpartitionen erstellt werden können.
Im Wesentlichen enthält solch ein Partitionseintrag nicht allzu viele Daten. Zunächst werden die Anzahl der Partitionssektoren und die Anzahl der vor dieser Partition liegenden Sektoren angegeben. Des Weiteren werden der Anfangszylinder und -sektor sowie der Endzylinder und -sektor der Partition beschrieben. Damit sind der Anfang, das Ende sowie die Größe einer Partition festgelegt – und mehr Informationen braucht man an dieser Stelle schließlich auch nicht.
Partitionstyp
Für das Verständnis dieser Thematik ist es überaus wichtig zu wissen, dass in einem Datensatz der Partitionstabelle auch der Typ der Partition festgelegt wird. Dabei wird eine Nummer zur Identifikation des Dateisystems verwendet, mit dem die jeweilige Partition formatiert ist. Bei Programmen wie fdisk müssen Sie durch die Angabe einer zweistelligen Hex-Zahl genau diese Identifikationsnummer selbst auswählen. Der Wert der Nummer liegt dabei immer zwischen
0 (0x0) und 255 (0xff).
In der folgenden Auflistung sind die wichtigsten Partitionstypen samt deren IDs zu finden.
- 00 – Die Partition wird nicht verwendet.
- 01 – FAT12-Dateisystem (alte MS-DOS-Versionen)
- 04 – FAT16-Dateisystem (MS-DOS, größer als 32 MB)
- 05 – Erweiterte DOS-Partition
- 06 – Alte MS-DOS-FAT16-Partitionen
- 07 – HPFS/NTFS (Windows 2000, Windows XP)
- 08 – AIX-Parition
- 09 – AIX-Bootpartition
- 0b/(0c) – Windows FAT32 (LBA)
- 4d – QNX 4.x
- 80 – Minix (alte Version)
- 81 – Minix (neue Version)
- 82 – Linux Swap
- 83 – Linux 2nd/3rd extended
- 85 – Linux extended
- 9f – BSDI-Partition
- af – FreeBSD-Partition
- a6 – OpenBSD-Partition
- a7 – NEXTSTEP-Partition
- a8 – MacOS X-Partition
- a9 – NetBSD-Partition
- be – Solaris-Bootpartition
- bf – Solaris-Partition
- eb – BeOS-Partition
25.3.2 Ein Beispiel
An dieser Stelle wollen wir uns einmal einen MBR anschauen. Sie finden im Anhang eine Kopie des ersten Sektors einer Festplatte.
Die vielen Bytes am Anfang des Sektors, die Sie vielleicht für binären Schrott halten, enthalten in Wahrheit den Bootloader – in diesem Fall eine Version von LILO. Darauf folgen eine Anzahl Nullbytes, auf die in den letzten vier Zeilen des Listings die Partitionstabelle folgt.
Gehen Sie einfach mal den Aufbau der Partitionstabelle durch, wie er oben erklärt wurde – natürlich nicht im Detail, aber wenn Sie erkennen, dass die ersten drei Partitionen vom Typ 83 (Linux ext2/3) und die letzte Partition vom Typ 82 (Linux Swap) ist, sind Sie schon gut. Am Ende des Bootsektors finden Sie natürlich auch den Hexcode 0xAA55, <... der mit dem niederwertigsten Byte zuerst gespeichert wurde, wie es auf der i386-Architektur üblich ist.> der den MBR identifiziert und abschließt.
Mehr über Partitionen erfahren Sie im nächsten Kapitel.