Die erste große Aufgabe bei jeder Linux-Installation ist die Partitionierung der Festplatte und die Einrichtung eines Linux-Dateisystems auf den dafür vorgesehenen Partitionen. Weil dieser Schritt einen tiefen Eingriff in ein bestehendes System bedeutet, ist er im folgenden Abschnitt sehr ausführlich beschrieben.
Jede Veränderung an einer Festplatte, die schon Daten enthält (z. B. eine MS-DOS Installation), kann zum Verlust der Daten führen!! Deshalb sollte vor jeder Veränderung an den Partitionstabellen ein Backup aller Daten gemacht werden.
Eine Festplatte besteht aus mehreren speziell beschichteten Aluminiumscheiben. Die Beschichtung kann magnetisiert werden und dadurch Daten speichern, ganz ähnlich wie ein Tonband Musik speichert. Zum Schreiben und Lesen gibt es die Schreib/Leseköpfe (oder einfach Köpfe), für jede beschichtete Scheibenseite einen. Diese Köpfe sind alle zusammen an einem Arm befestigt, der alle gemeinsam (in radialer Richtung) auf den Scheiben bewegen kann. Die Bewegung erfolgt in sehr genau bestimmten Schritten. Bei jedem Schritt erreicht jeder Kopf eine Spur der Scheibe. Die Gesamtheit aller Spuren, die von den parallelen Köpfen überstrichen wird, heißt Zylinder.
Um einen möglichst schnellen und direkten Zugriff auf die Daten zu ermöglichen, werden die Spuren nicht kontinuierlich beschrieben. Der Festplattencontroller richtet beim Formatieren Sektoren ein, in denen jeweils 512 Bytes Platz haben. Diese Sektoren können einzeln ädressiert'' werden, das bedeutet, daß jeder Sektor einzeln gelesen und beschrieben werden kann. Die Betriebssysteme verwalten aber in der Regel immer zwei Sektoren gemeinsam als einen Block von 1024 Bytes.
Die konkrete ''Plattengeometrieïst herstellerabhängig. Bei den meisten Festplatten werden die Daten im Setupmenü eingegeben und im CMOS gespeichert. Bei den SCSI-Festplatten übernimmt der Hostadapter die unteren Ebenen der Gerätesteuerung, deshalb müssen diese Platten nicht im CMOS des Rechners eingetragen werden.
Aus verschiedenen Gründen ist es sinnvoll, die gesamte Kapazität einer Festplatte in verschiedene Partitionen zu unterteilen:
Die Einteilung der Festplatte in Partitionen ist nicht an irgendwelche physikalischen Gegebenheiten gebunden, sondern wird allein durch die Vereinbarung in der Partitionstabelle festgelegt. Wenn Sie sich an ein paar Regeln halten, wird die Partitionstabelle von allen PC-Betriebssystemen akzeptiert.
Der erste Sektor der Festplatte ist der primäre Bootsektor. In diesem Sektor kann eine Partitionstabelle für höchstens vier Partitionen angelegt werden. Diese Partitionen heißen primäre Partitionen. Anstelle einer primären Partition kann in dem primären Bootsektor auch (genau) eine erweiterte Partition definiert werden, die den gesamten Plattenplatz enthält, der keiner primären Partition zugeordnet ist. In der erweiterten Partition können weitere logische Partitionen eingerichtet werden, die im Prinzip genauso aufgebaut sind wie die primären Partitionen, mit dem Unterschied, daß nur von den primären Partitionen direkt gebootet werden kann. Mit einem Hilfsprogramm wie dem Linux Loader (LILO) kann das Betriebssystem von beliebigen Partitionen, auch auf anderen Festplatten, gebootet werden, allerdings muß LILO selbst immer auf einer primären Partition der ersten Festplatte installiert werden (möglicherweise auch auf der erweiterten Partition). Weitere Hinweise dazu finden sich in der Dokumentation, die mit dem LILO-Paket verteilt wird.
Um bei der geteilten Nutzung der Festplatte durch mehrere Betriebssysteme Fehlinterpretationen der Partitionstabelle zu vermeiden, sollten Sie die Partitionsgrenzen immer auf Zylindergrenzen legen. Wenn Sie die Standardeinstellung von unit bei fdisk nicht verändern, werden die Partitionsgrenzen automatisch auf Zylindergrenzen gelegt.
Das fdisk-Programm von Linux dient zur Erstellung von Linux-Partitionen auf Festplatten. Um DOS Partitionen einzurichten, sollte das gleichnamige Programm für DOS verwendet werden.
Wenn fdisk ohne Parameter aufgerufen wird, bearbeitet es die Partitionstabelle der ersten Festplatte, das ist /dev/hda. Um die zweite Festplatte, /dev/hdb, zu partitionieren, muß das Programm als ` fdisk /dev/hdb' aufgerufen werden. Die erste SCSI Platte wird entsprechend als ` /dev/sda' angesprochen.
Wenn es korrekt aufgerufen wurde, meldet sich fdisk mit dem Prompt:
Command (m for help): _fdisk erwartet einen einzelnen Buchstaben gefolgt von einem RETURN als Kommando. Das Kommando ` m' zeigt folgendes Menü:
Command action a toggle a bootable flag c toggle the dos compatiblity flag d delete a partition l list known partition types m print this menu n add a new partition p print the partition table q quit without saving changes t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionalityDas print-Kommando zeigt die aktuelle Partitionstabelle an. Eine typische Anzeige sieht beispielsweise so aus:
Disk /dev/hda: 15 heads, 17 sectors, 1001 cylinders Units = cylinders of 255 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 1 1 402 51246+ 6 DOS 16-bit >=32M /dev/hda2 * 403 403 550 18870 81 Linux/MINIX /dev/hda3 551 551 920 47175 83 Linux native /dev/hda4 921 921 1001 10327+ 82 Linux swapIn diesem Beispiel werden 4 Partitionen angezeigt. Es sind vier Primärpartitionen angelegt. Von den Partitionen hda2 kann gebootet werden.
Das unit-Kommando ändert die Einheiten, in denen die Partitionstabelle angezeigt und bearbeitet wird. Das Kommando schaltet zwischen Sektoren und Zylindern als Einheit um. Weil MS-DOS die Partitionen auf kompletten Zylindern erwartet, ist es sinnvoll, mit der (voreingestellten) Zylindereinheit zu arbeiten.
Die Anzeige in Sektoren soll trotzdem am gleichen Beispiel gezeigt werden:
Disk /dev/hda: 15 heads, 17 sectors, 1001 cylinders Units = sectors of 1 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 1 17 102509 51246+ 6 DOS 16-bit >=32M /dev/hda2 * 102510 102510 140249 18870 81 Linux/MINIX /dev/hda3 140250 140250 234599 47175 83 Linux native /dev/hda4 234600 234600 255254 10327+ 82 Linux swap
Der Beginn einer Partition muß nicht mit dem Start des Datenbereichs übereinstimmen, wie das Beispiel der MS-DOS Partition zeigt, bei der die ersten Sektoren für Verwaltungsdaten freigehalten werden. Das Linux- fdisk setzt den Start des Datenbereichs normalerweise auf den Partitionsbeginn.
Die auf die Partitionsgröße folgenden `+' Zeichen markieren Partitionen mit ungerader Sektorzahl. Weil Linux immer Blocks zu zwei Sektoren, also immer mindestens 1024 Bytes belegt, bleibt auf diesen Partitionen ein Sektor ungenutzt.
Das verify-Kommando überprüft die Partitionstabelle auf Fehler und gibt die Anzahl der nicht belegten Sektoren aus.
Das quit-Kommando beendet fdisk. Die Veränderungen an der Partitionstabelle werden nicht automatisch geschrieben. Eine Veränderung an der Partitionstabelle wird erst durch ein write-Kommando auf der Festplatte gesichert. Es ist möglich, fdisk zu jedem Zeitpunkt mit CTRL-C zu unterbrechen.
Das delete-Kommando löscht eine Partition aus der Partitionstabelle. Die von dieser Partition belegten Sektoren werden freigegeben. Alle auf diesen Sektoren gespeicherten Daten gehen dabei normalerweise verloren. Das delete-Kommando fragt nach der Partitionsnummer, die es löschen soll. Soll doch lieber keine Partition gelöscht werden, kann fdisk mit CONTROL-C beendet werden.
Wenn eine nicht existierende Partition angegeben wird, erscheint eine Fehlermeldung. Wenn die erweiterte Partition gelöscht wird, verschwinden automatisch alle logischen Partitionen auf der erweiterten Partition mit.
Wenn eine logische Partition gelöscht wird, werden alle darüberliegenden logischen Partitionen sofort neu numeriert, so daß alle logischen Partitionen immer fortlaufende Nummern haben.
Das new (add) Kommando erlaubt das Anlegen einer neuen Partition. Voraussetzung zum Anlegen einer neuen Partition ist natürlich, daß noch freie Sektoren existieren.
Nun muß der Beginn der neuen Partition angegeben werden. Dazu erscheint beispielsweise folgende Meldung:
First cylinder (403-1001): _Die Zahlen bezeichnen den ersten und den letzten freien Zylinder. Es müssen nicht alle Zylinder in dem angegebenen Bereich frei sein, weil innerhalb des Bereichs noch eine komplette andere Partition liegen kann. Die Angabe eines bereits belegten Zylinders wird einfach abgelehnt, und es wird erneut nach dem ersten Zylinder der neuen Partition gefragt.
Wenn ein gültiger Zylinder für den Beginn der Partition bestimmt ist, wird nach dem letzten Zylinder gefragt:
Last cylinder (403-1001): _Hierbei sind alle Zylinder in dem angegebenen Bereich erlaubt.
Wenn nicht alle freien Zylinder belegt worden sind, kann das Kommando erneut aufgerufen werden.
Bevor die veränderte Partitionstabelle gesichert wird, sollte auf jeden Fall das verify-Kommando aufgerufen werden.
Die veränderte Partitionstabelle wird in jedem Fall nur durch ein ausdrückliches write-Kommando auf die Festplatte geschrieben. In diesem Fall erscheint die Aufforderung, den Rechner neu zu starten:
The partition table has been altered. Please reboot before doing anything else.Es ist ohne Problem möglich, fdisk sofort wieder zu starten, um weitere Veränderungen an der Partitionierung vorzunehmen.
ACHTUNG! Es darf auf keinen Fall eines der Programme mkfs, mkswap, mount oder swapon aufgerufen werden, bevor der Rechner neu gestartet wurde!
Die meisten modernen Rechner haben ihr Betriebssystem nicht mehr in permanenten Speicherbausteinen auf der Hauptplatine, sondern laden erst nach dem Einschalten ein Betriebssystem in den Arbeitsspeicher. Und selbst dieser Ladevorgang findet nicht auf eine ganz bestimmte Art und Weise statt, sondern wird von einem Bootprogramm ausgeführt. Einzig der Aufruf dieses Bootprogramms ist durch das BIOS festgelegt:
Wenn es nicht ausdrücklich im BIOS-Setup anders bestimmt ist, wird im ersten Diskettenlaufwerk nach einer Diskette gesucht. Auf dieser Diskette wird aus dem ersten Sektor (in dem sich auch die Partitionstabelle befindet) das Bootprogramm geladen und ausgeführt.
Wenn keine Diskette im Laufwerk ist, wird das Bootprogramm aus dem Bootsektor (Master Boot Record) der ersten Festplatte ausgeführt. Es gibt verschiedene solcher Bootprogramme. Einige dieser Programme werten die Boot-Flags aus der Partitionstabelle aus, um zu bestimmen, von welcher Partition das Betriebssystem geladen werden soll.
Das Boot-Flag ist ein einzelnes Bit für jede Partition. Ist dieses Bit gesetzt, kann von dieser Partition ein Betriebssystem geladen werden.
Das MS-DOS Bootprogramm erwartet genau ein gesetztes Boot-Flag. LILO als primärer Bootloader ignoriert die Bootflags. Andere Bootmanager erlauben mehrere gesetzte Bootflags.
Um den verschiedenen Betriebssystemen die Möglichkeit zu geben, Partitionen anderer Formate zu erkennen, werden die Partitionen mit Kennzahlen (ID) versehen. Linux selbst kümmert sich nicht wirklich um die Partitionskennung, schließlich kann Linux mit einer Vielzahl fremder Dateisysteme gut umgehen. Der Kernel prüft beim Mounten eines Dateisystems immer die für das jeweilige Dateisystem typische magische Zahl und erkennt so, ob es sich um ein gültiges Dateisystem eines bestimmten Typs handelt.
Andere Betriebssysteme sind da viel weniger flexibel. In der Regel ordnet jeder Hersteller seinem Betriebssystem eine bestimmte Kennzahl für den Partitionstyp zu, mit der das Betriebssystem ßeine'' Partitionen markieren und erkennen kann. fdisk kann z.Zt. 30 Kennzahlen bestimmten Betriebssystemen zuordnen. Es ist aber auch - mit ein paar Ausnahmen - möglich, beliebige andere ID's zu setzen.
Es ist nicht möglich, eine Partition vom oder nach dem Typ ëxtended'' (5) zu ändern. Es ist nicht möglich, einer leeren Partition (Typ 0) irgendeinen anderen Typ zu geben. Einer Partition den Typ 0 zuzuordnen, heißt sie zu löschen.
Die Typ-ID wird als hexadezimale Zahl angegeben. Die folgenden Typen werden erkannt:
0 Empty 40 Venix 94 Amoeba BBT 1 DOS 12-bit FAT 51 Novell? b7 BSDI fs 2 XENIX root 52 Microport b8 BSDI swap 3 XENIX user 63 GNU HURD c7 Syrinx 4 DOS 16-bit <32M 64 Novell db CP/M 5 Extended 75 PC/IX e1 DOS access 6 DOS 16-bit >=32 80 Old MINIX e3 DOS R/O 7 OS/2 HPFS 81 Linux/MINIX f2 DOS secondary 8 AIX 82 Linux swap ff BBT 9 AIX bootable 83 Linux native a OPUS 93 Amoeba
Voreinstellung für neue Linux-Partitionen ist ` 83' für das Linux-Dateisystem. Diese Kennzahl ermöglicht es den anderen aufgeführten Betriebssystemen, die Linux-Partitionen als fremdßu erkennen.
Die ID 83 führt beim DR-DOS zu Problemen. Wenn eine Festplatte von Linux und DR-DOS gemeinsam genutzt werden soll, ist es sinnvoll, anstelle der 81 bzw. 83 als Partitionskennziffer die 42 oder 43 als Linux-ID zu verwenden.