1.102.1
Entwerfen einer Festplattenaufteilung
Beschreibung:
Prüfungskandidaten sollten in der Lage sein, ein Partitionsschema für ein
Linux-System zu entwerfen. Dieses Lernziel beinhaltet das Erzeugen von
Dateisystemen und Swap-Bereichen auf separaten Partitionen oder Festplatten
und das Maßschneidern des Systems für die beabsichtigte Verwendung des
Systems. Ebenfalls enthalten ist das Platzieren von /boot auf einer
Partition, die den BIOS-Anforderungen für den Systemstart genügt.
Die wichtigsten Dateien, Bezeichnungen und Anwendungen:
- / (root) Dateisystem
- /var Dateisystem
- /home Dateisystem
- Swap-Bereiche
- Mount-Points
- Partitionen
- Zylinder 1024
Linux arbeitet - im Gegensatz zu anderen Systemen - nicht mit
Laufwerksbuchstaben, sondern hängt alle zu benutzenden Partitionen in einen
Dateibaum ein. Diese Technik des Mountens wird im Abschnitt 1.104 - Gerätedateien, Linux Dateisysteme, Filesystem
Hierarchy Standard noch genauer behandelt. Hier geht es zunächst einmal
um die grundlegenden Aufteilungen der Partitionen.
Es gibt verschiedene Gründe für die Benutzung von mehreren Partitionen unter
Linux. Die wichtigsten sind:
- Mehrere physikalische Festplatten werden benutzt.
- Backups werden leichter planbar, wenn klar ist, daß veränderbare Daten
nur auf bestimmten Partitionen vorkommen können.
- Userquotas (bestimmte Einschränkungen, wieviel Platz pro User zur
Verfügung steht) beziehen sich auf Partitionen.
- Daten, die sich grundsätzlich nicht verändern (statische Systembereiche)
können - wenn sie auf einer eigenen Partition liegen - ReadOnly gemountet
werden.
- Bootmanager können manchmal nur auf Partitionen unterhalb des 1024
Zylinders zugreifen.
- Bestimmte Teile des Systems sollen im Netz auch anderen Rechnern zur
Verfügung stehen, andere aber nicht.
Andererseits erfordert die Aufteilung eines Linux-Systems in verschiedene
Partitionen auch eine wesentlich genauere Planung, weil schon bei der
Installation festgelegt werden muß, wieviel Platz auf welchem Bereich
benötigt werden wird.
Jede Partition (Dateisystem) wird in ein Verzeichnis eingehängt (gemountet).
Der ursprüngliche Inhalt dieses Verzeichnisses ist solange unsichtbar,
solange die Partition in dieses Verzeichnis eingehängt ist. Eine Liste der
wichtigen Verzeichnisse auf der Wurzelpartition ist im Abschnitt 1.104.8 nachlesbar.
Das Wurzeldateisystem
Das wichtigste Dateisystem ist das Wurzeldateisystem. Es ist die Partition,
die beim Booten als erstes gemountet wird und von der aus alle weiteren
Mount-Vorgänge erledigt werden. Jeder Bootmanager muß wissen, welche
Partition des Systems die Wurzelpartition ist. Diese Partition enthält
Verzeichnisse, die entweder Daten enthalten oder in die im weiteren Verlauf
des Bootvorganges andere Partitionen gemountet werden.
Viele dieser Verzeichnisse können auf solche anderen Partitionen ausgelagert
werden, andere dürfen unter keinen Umständen außerhalb der Wurzelpartition
liegen. Diese Aufteilung ist nicht willkürlich, sondern hat ihre Gründe. Wie
so oft, ist es besser diese Gründe zu verstehen, als einfach eine Liste von
Verzeichnissen auswendig zu lernen. Daher folgt hier eine Liste all der
Verzeichnisse, die niemals ausgelagert werden dürfen, zusammen mit der
Begründung warum:
- /bin
Das Verzeichnis /bin enthält die grundlegenden Systemprogramme, die
zum Starten des Systems benötigt werden. Zum Beispiel das
mount-Programm. Ohne dieses Programm können keine weiteren
Dateisysteme gemountet werden, es ist also zwingend notwendig, daß
/bin auf der Wurzelpartition liegt, wo es gleich nach dem Laden des
Kernels zur Verfügung steht.
- /dev
Das Verzeichnis /dev enthält die Gerätedateien, mit denen der
Kernel physikalische Geräte (unter anderem auch Partitionen und Platten)
ansprechen kann. Diese Gerätedateien werden benötigt, um Partitionen zu
mounten. Also muß auch dieses Verzeichnis zwingend auf der Wurzelpartition
liegen.
- /etc
Das Verzeichnis /etc enthält - neben vielen anderen Informationen -
die Information, wohin welche Partition gemountet werden soll. Ohne diese
Information wäre es gar nicht möglich, andere Partitionen automatisch zu
mounten.
- /lib
Das Verzeichnis /lib enthält die grundlegenden Libraries, die von
Programmen wie mount benötigt werden um zu funktionieren. Außerdem
liegt in diesem Verzeichnis das Unterverzeichnis modules, das die
Kernelmodule enthält. Es können hier auch Kernelmodule liegen, die für die
Erkennung von Dateisystemtypen notwendig sind.
- /sbin
Das Verzeichnis /sbin enthält Programme, die während des
Startvorganges notwendig sind, bevor gemountet wurde. So sind hier
beispielsweise die Programme zur Überprüfung der Konsistenz von
Dateisystemen enthalten. Diese Konsistenzüberprüfung muß vor dem Einhängen
des jeweiligen Dateisystems stattfinden.
Diese Verzeichnisse müssen also zwingend auf der Wurzelpartition liegen,
alle anderen Verzeichnisse können theoretisch auf andere Partitionen
ausgelagert werden. Zumindestens das Verzeichnis /root, das
Heimatverzeichnis des Systemverwalters sollte (muß aber nicht) noch auf dem
Wurzelverzeichnis gelegen sein, da es vorkommen kann, daß der
Systemverwalter in einem Wartungsmodus mit dem System arbeiten muß, in dem
nur das Wurzelverzeichnis eingehängt ist. Wenn /root auf der
Wurzelpartition liegt, ist so sichergestellt, daß er auch in diesem
Wartungsmodus Zugriff auf seine Dateien hat.
Das /usr- und das /var-Dateisystem
Alle statischen Daten des Betriebssystems, die nicht während des
Startvorganges benötigt werden, liegen im /usr-Verzeichnis (usr
bedeutet nicht User sondern Unix System Resources). Dieses Dateisystem ist
in aller Regel auf einer separaten Partition untergebracht, die wesentlich
größer als die Wurzelpartition ist. Dieses Verzeichnis kann (und soll)
Read-Only gemountet werden, so daß keine Veränderungen darin im laufenden
Betrieb möglich sind. Das schafft eine wesentlich höhere Stabilität des
Gesamtsystems, weil nur durch ein bewußtes Remounten eine Veränderung am
System möglich wird.
Entsprechend werden alle Dateien, die im laufenden Betrieb veränderbar sein
müssen, in ein anderes Verzeichnis ausgelagert, das die sogenannten
variablen Dateien enthält und aus diesem Grund den Namen /var
trägt. Hier liegen mindestens die folgenden Unterverzeichnisse:
- /var/lib
Ein Verzeichnis für modifizierbare Einstellungen, die traditionell unter
/usr/lib liegen würden.
- /var/lock
Hier liegen sogenannte Lock-Dateien. Das sind Dateien, die von Programmen
angelegt werden, um zu zeigen, daß diese Programme laufen. Damit kann
verhindert werden, daß bestimmte Programme mehrfach gestartet werden.
- /var/log
Hier liegen die Logbücher des Systems, die permanent erweitert werden
müssen.
- /var/run
Ähnlich wie /var/lock liegen hier Dateien, in die Programme ihre
PID eintragen, damit diese auch ohne Aufruf von ps herausfindbar sind.
- /var/spool
- /var/tmp
Temporäre Dateien.
Das Verzeichnis /var wird auch gerne und oft auf eine andere
Partition als die Wurzelpartition ausgelagert. Es ist klar, daß in diesem
Verzeichnis ständig Dateien angelegt, verändert und vergrößert werden. Die
Gefahr, auf der Wurzelpartition keinen Platz mehr zu haben kann also
speziell durch die Auslagerung von /var verringert werden.
Das /home-Dateisystem
Im Verzeichnis /home liegen die Verzeichnisse der Benutzer/innen.
Je nach Anspruch bzw. je nach Aufgabe des Rechners wird dieses Verzeichnis
viel oder wenig Platz brauchen. Soll der Rechner z.B. nur ein Router ins
Internet werden, oder ein alleinstehender Webserver, so benötigen wir für
ihn praktisch keinen Speicherplatz für Benutzer, da es auf einem solchen
Rechner keine Benutzer gibt. Ein Rechner hingegen, der als Fileserver dient
oder eine normale Arbeitsstation ist, wird hier - je nach verfügbarem
Plattenplatz - möglichst viel Speicher anbieten.
Im zweiten Fall ist es unbedingt ratsam, das /home Verzeichnis auf
eine andere Platte auszulagern. Ein bösartiger Benutzer könnte ansonsten ein
Programm schreiben, das die Festplatte füllt, und damit die Wurzelpartition
bis obenhin voll machen, was dazu führen würde, daß Linux nicht mehr
arbeiten kann. Es gibt dagegen zwar verschiedene Hilfsmechanismen wie
Disk-Quota (siehe Abschnitt 1.104.4 - Verwalten von
Diskquotas) oder der Reservierung von Plattenplatz auf
EXT2-Dateisystemen, trotzdem ist eine Auslagerung auf eine andere Partition
in einem solchen Fall immer ratsam.
Ein weiterer Aspekt der Auslagerung sind die Backups. Das /home
Verzeichnis sollte grundsätzlich immer in ein Backup aufgenommen werden,
weil hier ja die Dateien der User liegen, die einer ständigen Veränderung
unterworfen sind.
Das /tmp-Verzeichnis
Dieses Verzeichnis ist - neben dem /home-Verzeichnis - das einzige
auf dem System, in dem Normaluser Schreibrechte besitzen. Also ist es auch
hier ratsam, dafür zu sorgen, daß - wie oben schon erwähnt - die User nicht
die Systemplatte füllen können. Auch dieses Verzeichnis kann und soll auf
eine andere Partition ausgelagert werden, wenn es ein System ist, von dem
wir erwarten, daß dort User arbeiten. Auf statischen Servern wie reinen
Internet-Routern kann dieses Verzeichnis aber problemlos auch auf der
Wurzelplatte verbleiben.
Das /boot Dateisystem und das Problem der 1024 Zylinder
Auf älteren Systemen gibt es ein Problem mit Festplatten, die mehr als 1024
Zylinder haben. Dieses Problem bezieht sich nicht auf den Zugriff auf die
Platte durch Linux, sondern auf den Zugriff durch Bootmanagersoftware.
Wenn ein Bootmanager wie LILO beim Systemstart auf Festplatten zugreift,
etwa um den entsprechenden Kernel zu laden, so muß er ohne Betriebssystem
auf die Platte zugreifen. Er muß also mit BIOS-Routinen arbeiten, die eben
das Problem haben können, nicht mehr als 1024 Zylinder direkt ansprechen zu
können. Ist die Partition, die die Dateien des Bootmanagers enthält jetzt
auf einer Partition, deren Grenzen überhalb der 1024 Zylinder liegen, dann
kann der Bootvorgang nicht funktionieren.
Aus diesem Grund gibt es die Möglichkeit, eine sehr kleine Partition
(ungefähr 20 MB) anzulegen, die am Anfang der Platte liegt, also unterhalb
der 1024 Zylinder. Diese Partition wird ins Verzeichnis /boot
gemountet und enthält alle Informationen, die der Bootmanager benötigt
(Kerneldateien, Initrd-Images, System.map, boot.b, chain.b, ...).
Durch diesen Trick ist der Bootmanager während des Bootvorgangs in der Lage,
auf seine Dateien zuzugreifen, ohne die 1024er Grenze zu überschreiten.
Moderne BIOSe und moderne Bootmanager umgehen dieses Problem über die
Verwendung der LBA-Methode. Dann ist die Auslagerung nicht mehr nötig.
Swap-Partitionen
Ein Linux-System kann, wenn der physikalische Arbeitsspeicher zur Neige
geht, einen bestimmten Partitionstyp als Speicherersatz für den Notfall
benutzen. Diese Technik des Auslagerns (Paging) ist eine der ältesten
Eigenschaften von Linux und hat es gerade auf Privatrechnern mit wenig
Speicher so beliebt gemacht.
Eine Partition, die als Speichererweiterung dienen soll, wird als
Swap-Partition bezeichnet und benötigt zwei grundlegende
Vorbereitungstechniken:
- Sie muß beim Anlegen mit fdisk bereits den Partitionstyp Linux
Swap (Typ 82) bekommen.
- Sie bekommt zwar kein "echtes" Dateisystem, muß jedoch mit dem Programm
mkswap vorbereitet werden.
Während des Bootens wird eine solche Partition mit Hilfe des Kommandos
swapon aktiviert. Sie wird also nicht wirklich gemountet, bekommt
jedoch auch einen Eintrag in /etc/fstab in der Art:
/dev/hdc2 none swap sw 0 0
Eine schwierige Frage ist die richtige Größe einer solchen Swap-Partition.
Früher gab es die Daumenregel, daß diese Partition doppelt so groß wie der
physikalische Arbeitsspeicher sein sollte. Das war in den Zeiten
verständlich, in denen Arbeitsspeichergrößen im Bereich 16-32 MB üblich
waren. Da konnte es vorkommen, daß ein Programm geladen werden sollte, daß
alleine 13 MB erfordert hatte (etwa Netscape). Damit wäre dieses Programm
zwar langsam, aber eben doch gelaufen.
Heute sind wesentlich größere Speichergrößen üblich, die diese Daumenregel
ad absurdum führen. Wenn ein Rechner 256 MB Ram besitzt, so macht es wenig
Sinn, seine Swap-Partition 512 MB groß zu erstellen. Denn eine tatsächliche
Arbeit mit einem System, das 512 MB Speicher auslagert ist nicht mehr
möglich. Arbeitsspeicher ist einfach sehr viel schneller als
Plattenzugriffe...
Eine praxistaugliche Größe der Swap-Partition ist etwas um 64 MB bis 128 MB.
Zusammenfassung
Es gibt keine wirklich allgemeingültige Aussage, wie die Partitionen unter
Linux aufgeteilt werden sollen. Es ist zu sehr abhängig von der geplanten
Verwendung des Systems. Ein kleiner Router stellt andere Anforderungen, als
ein großer Fileserver, eine Arbeitsstation andere als ein Server.
Prinzipiell sollten die oben gemachten Angaben über die verschiedenen
auszulagernden Dateisysteme immer auf die jeweilige Verwendung des Rechners
bezogen überdacht werden. Ein kleiner Router mit einer Festplatte mit
weniger als 1024 Zylindern kann einfach eine Partition bekommen, die alles
enthält, ein großer Server sollte eine durchdachte Aufteilung der
Partitionen erhalten.