# 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.