Infos zur Partitionierung, Partitiontables und Bootsektoren =========================================================== Die Hauptpartitiontable befindet sich im ersten Sektor der Festplatte. Diesen könnte man deshalb als den wichtigsten Sektor der ganzen Platte bezeichnen. Ihn separat zu sichern macht deshalb Sinn. Dieser erste Sektor wird als Master Boot Record (mbr) bezeichnet. Neben der Partitionstabelle enthält dieser Sektor nämlich den Startcode, der nach dem Start des Rechners ausgeführt wird. Aufteilung: 0x0000-0x01BD (446 Bytes) Startcode 0x01BE-0x01FD (64 Bytes) Partitionstabelle 0x01FE-0x01FF (2 Bytes) Magic Number 55AA Mit fdisk /mbr schreibt Dos den MBR neu, jedoch nur die ersten 446 Bytes, nicht die Partitionstabelle. Es wird dann der Dos-MBR geschrieben, der in der Lage ist, den Bootsektor der Dos-Partition zu lesen und diese Bootsequenz dann zu starten. Die Partitiontable besteht aus 4 Einträgen a 16 Bytes. Es können also maximal 4 Partitionen angelegt werden. Um weitere Partitionen anzulegen, wurde dieses Konzept später so erweitert, daß man hier eine Partition vom erweiterten Typ einträgt. Im ersten Sektor dieser Partition befindet sich dann wieder eine Partitiontabelle. Mehr dazu später. Windows 9x und Dos können nur mit einer primären und einer erweiterten Partition umgehen. Primär bedeutet, dass es sich um eine direkt eingetragene Partition handelt, also nicht um eine Erweiterte. Weitere primäre Partitionen anderen Typs können vorhanden sein, die werden von DOS/Windows nicht gesehen. Jedoch keine vom Typ FAT. Möchte man dies trotzdem, so darf nur jeweils eine sichtbar sein, die anderen muß man verstecken, bspw. in dem man ihnen einen anderen Typ verpasst. Die Partitionstabelle ist wie folgt aufgebaut: Byte Bezeichnung 0x00 BootFlag/Aktive Partition, 0x00: nicht aktiv, 0x80 aktiv, andere Werte nicht genutzt 0x01 C Start Cylinder Partition 0x02 H Start Head 0x03 S Start Sector 0x04 Partition Type 0x05 C End Cylinder Partition 0x06 H End Head Partition 0x07 S End Sektor Partition 0x08-0x0B Startsektor LBA (28 Bit werden benutzt) 0x0C-0x0F Anzahl Sektoren LBA (28 Bit werden benutzt) Achtung: CHS Angaben sind etwas Bitweise vermixt. Die oberen 2 Bits von H werden für C mitbenutzt, so dass man max. 1024 Zylinder, 64 Heads und 256 Sektoren haben kann. Wegen eines Bugs unter Dos und Windows ist jedoch der Maximalwert für Sektor von 0xFF nicht erlaubt, so dass nur 255 Sektoren (0-0xFE) möglich sind. Bei den Heads werden ebenfalls nur 63 als Maximalwert genutzt. Historisch wurden zuerst die CHS Werte verwendet. Damit lassen sich jedoch maximal 8 GB adressieren. Bei alten Biosversionen geht nichtmal das, da ist bei 2 GB oder 512MB Schluss, weil nicht alle Bits der CHS Werte genutzt werden. Um auch über 8GB adressieren zu können, entschied man sich, nur noch die LBA Werte zur Adressierung zu nutzen. Jeder Sektor wird durchnummeriert und mittels LBA-Wert ist jeder Sektor ansprechbar. Das Bios übernimmt die Übersetzung in die CHS Werte der Festplatte. Neuere Biosversionen sind nicht mehr auf 1024 Zylinder begrenzt. Man hat hier den Weg gewählt, einfach die Anzahl Zylinder aufzubohren, Köpfe und Sektoren jedoch bei den alten Grenzen zu lassen. Insofern sind die eingetragenen Bioswerte nicht die tatsächlichen physikalischen Werte. Die Festplatte gaukelt da nur etwas passendes vor. Bei Partitionen unterhalb 8GB wird von gängigen fdisk-Programmen sowohl der CHS Wert wie auch der LBA Wert eingetragen. Genutzt wird von neueren Biosversionen nur der LBA Wert. Jedoch brauchen einige alte Programme auch die CHS Werte. Bei Partitionen über 8GB werden die Maximalwerte für CHS eingetragen. Diese sind dann also nicht mehr korrekt, werden nur noch für Abwärtskompatibilität eingesetzt. Neuere Platten haben als (vorgegaukelte) Geometry meist 63 Sektoren, 255 Heads und dann n Zylinder. Es wird also nur noch anhand der Zylinder die Plattengröße variiert. Der erste Zylinder wird nur für den MBR genutzt, die erste Partition fängt also erst im zweiten Zylinder an. Der restliche Platz auf Zylinder 1 wird von manchen Bootloadern genutzt, denen die 446 Bytes im ersten Sektor nicht reichen. Der Start-LBA Wert der ersten Partition ist also typisch 63. Der LBA Abstand von einer Partition zur nächsten ist dann auch typisch 63, es liegt ja ein Bootsektor dazwischen, der eine ganze Spur benötigt. Jede Partition hat einen Bootsektor. Dies ist der erste Sektor in der Partition. Die restlichen Sektoren dieser Spur bleiben leer. Im Bootsektor kann ein Startprogramm stehen. Mittels sys c: schreibt Dos bspw. den Bootsektor neu. Nicht jedoch den MBR. Das tut nur fdisk /mbr. Bootet eine Festplatte nicht, ist also zu unterscheiden, ob der Bootsektor oder der MBR defekt ist. Mit den erweiterten Partitionen verhält es sich so: Im MBR ist eine Partition als erweitert (Partitionstyp) eingetragen. Theoretisch können auch mehrere erweiterte Partitionen bestehen, jedoch kommt Windows/Dos damit nicht zurecht. Ist eine Partition als erweitert eingetragen, so fungiert der erste Sektor dieser Partition wiederum als Partitionstabelle. Dort können jedoch nur 2 Partitionen eingetragen sein. Zum Einen das erste logische Laufwerk bzw. die erste logische Partition (hda5). Die fängt typisch 1 Spur entfernt an. Zum weiteren eine weitere erweiterte Partition, die auf den Beginn des nächsten logischen Laufwerks zeigt. Dort befindet sich dann wieder eine Partitionstabelle mit 2 Einträgen. So bilden die logischen Laufwerke / Partitionen eine Kette. Fehler in der ersten logischen Partition können so bspw. dazu führen, daß alle anderen auch nicht mehr vorhanden sind. Der zweite Eintrag ist immer vom Typ 5 (=erw. Partition). Powerquest nennt die erweiterten Partitiontabellen EPBR. Der LBA Wert im ersten Eintrag bezieht sich auf den jeweiligen Partitiontable-Sektor (EPBR) Start der logischen Partition. Der Startwert ist also typisch 63 bei jedem logischen Laufwerk. Der Startwert des zweiten Eintrages, also der Zeiger auf die Partitionstabelle des nächsten logischen Laufwerks, ist dagegen relativ zum EPBR der erweiterten Partition angegeben. (Nochmal zum Verständnis: Die erweiterte Partition ist der Behälter, in dem sich logische Partitionen/Laufwerke befinden können. Die erweiterte Partition ist im MBR eingetragen.) Anhand dieser Struktur wird deutlich: Der erste Sektor einer jeden Partition ist sehr bedeutsam, weil dort wichtige Informationen über die Aufteilung der Platte enthalten sein können. Und natürlich auch Bootloader. Weil Bootloader sich mitunter auch in weitere Sektoren der ersten Spur einklinken, ist mitunter die ganze erste Spur einer jeden Partition von besonderem Wert (ersten 32KB typisch). Linux fdisk verbirgt all diese Komplexität der CHS/LBA Werte. Es arbeitet mit den CHS Angaben aus dem Bios, kann also mit Partitionsgrößen minimal auf Zylinderebene arbeiten. (WM030903: stimmt so nicht, auch wenn im Bios falsche Werte eingetragen sind, kommt Linux zurecht, es muß wohl die Platte fragen können, wie groß sie ist und welche CHS Aufteilung sie hat.) Sollten andere Programme da anders arbeiten, reichen die Angaben mit fdisk -l nicht aus, um eine Partitiontable wieder rekonstruieren zu können. Es ist jedoch zu vermuten, daß andere Partionierungstools ebenfalls nur ganze Zylinder zulassen. Nochwas zur Reihenfolge von Hexwerten: Das niederwertigste Byte steht zuerst auf der Platte, zum Schluß das höherwertigste Byte. So ist das generell in der Intel-Prozessorwelt. Die Vergabe von Laufwerksbuchstaben unter Windows 9x geschieht so: Zuerst kommen alle primären Partitionen der jeweiligen Festplatten. Dann erst kommen die erweiterten Partitionen. Hängt man also eine zweite Festplatte ein, kann es sich als günstig erweisen, dort nur eine erweiterte Partition anzulegen, damit sich Laufwerksbuchstaben nicht verschieben. Achtung: Bei Festplatten größer 8GB muß die erweiterte Partition auf jeden Fall vom Typ 0x0F sein (insofern sie über die 8GB Grenze hinausragt), nicht wie früher vom Typ 0x05. Sonst produziert Dos 7 ziemlichen Müll auf der Festplatte. Copyright 2000, GFDL, Winfried Mueller, www.reintechnisch.de