File Hierarchy Standard und Linux-Partitionierung

Ratgeber: Was ist was bei der Linux-Verzeichnisstruktur

15.01.2013 von Thomas Hümmler
Wer ein Linux-System aufsetzen will, tut gut daran, sich mit der Verzeichnisstruktur eines Unix-Systems vertraut zu machen. Dann weiß man, wo welche Dateien zu finden sind, und kann die eigene Partitionierung optimieren. Wir zeigen, worauf Sie achten müssen und liefern Empfehlungen.

Während die Windows-Systeme noch an Eigenarten wie den Laufwerksbuchstaben und dem Rückwärtsstrich als Verzeichnistrenner festhalten, haben sich die anderen Betriebssysteme wie Mac OS X und Linux längst angenähert und sich auf eine gemeinsame Verzeichnisstruktur verständigt, ausgehend vom Wurzelverzeichnis "/", auch Root genannt.

Dass es diese Einheitlichkeit in puncto Verzeichnisinhalte und -bezeichnungen gibt, ist dem sogenannten Filesystem Hierarchy Standard, kurz FHS, zu verdanken. Dieses beschreibt den Aufbau eines Unix-Verzeichnissystems. Die aktuelle Version 2.3 ist vom Januar 2004.

Der FHS ist auf der einen Seite für Distributionsentwickler interessant, beschreibt er doch, wo welche Verzeichnisse und Dateien zu finden sind. Auf der anderen Seite profitiert der Benutzer davon, indem er sich ohne großes Einarbeiten schnell in anderen Linux- und Unix-Varianten zurechtfindet.

Ordnung muss sein: Der Filesystem Hierarchy Standard beschreibt den Aufbau eines Unix-Verzeichnissystems.

Für den Systemadministrator hingegen ist noch etwas anderes wichtig: Da es keine Laufwerksbuchstaben gibt, werden Partitionen, Festplatten und andere Speichermedien wie USB-Sticks und DVD-Laufwerke einfach als Verzeichnis in die Verzeichnisstruktur integriert. Der Fachmann spricht von Einhängen beziehungsweise Mounten.

Theoretisch kann ein Verzeichnis an jeder beliebigen Stelle eingehängt werden. In der Praxis geschieht das nicht. Denn es gibt bestimmte Orte, die dafür vorgesehen sind, wie die Verzeichnisse /tmp oder /mnt. Allerdings kann man sich beim Aufsetzen eines Servers diese Tatsache zunutze machen, indem man das System auf mehrere Festplatten oder Partitionen verteilt. Wer das geschickt anstellt, verhindert dadurch zum Beispiel ein unkontrolliertes Überlaufen des physikalischen Speichers oder kann im Fall eines Falles schnell die Benutzerdaten auf einen anderen Server verlagern.

Root (/)

An oberster Stelle eines gesamten Unix-Verzeichnissystems befindet sich das Wurzelverzeichnis, die Root, dargestellt durch den Schrägstrich. Was im Root-Dateisystem steht, muss ausreichen, um ein Linux-System zu booten oder zu reparieren. Dazu sind Diagnose-, Backup- und Restore-Utilities ebenso erforderlich wie Konfigurationsdateien und Boot-Loader-Informationen. Wichtige Befehle wie etwa mount müssen deshalb direkt erreichbar sein. Da aber im Root-Verzeichnis normalerweise nichts steht außer den Verzeichnissen, ist es zwingend, dass die entsprechenden Unterverzeichnisse samt den Programmen ebenfalls auf der Root-Partition vorhanden sind.

Sehr groß hat das Root-Dateisystem trotzdem nicht zu sein. Im Gegenteil: Es bietet sich an, dieses so klein wie möglich zu halten, um es eventuell von einem USB-Stick aus starten zu können. Außerdem ist eine kleine Root-Partition weniger anfällig für Beschädigungen, etwa infolge eines Systemabsturzes.

/bin

Das Verzeichnis /bin muss auf der Root-Partition sein. Dort stehen wichtige Unix-Befehle, die von allen Benutzern ausgeführt werden können. Diese Befehle müssen auch ausführbar sein, wenn kein weiteres Dateisystem gemountet ist.

Im /bin-Verzeichnis stehen unter anderem Systemkommandos für Dateirechte (chgrp, chmod, chown), zum Kopieren, Anlegen, Verschieben und Löschen von Verzeichnissen und Dateien, zum Einloggen und Mounten von Dateisystemen, die Shell sh sowie das Programm su, mit dem man die Benutzerkennung wechseln kann.

In /bin stehen außerdem die Archiv-Tools tar und cpio sowie die Pack-Programme gzip und gunzip. Mit diesen kann der Administrator ein System wiederherstellen, wenn das Root-Dateisystem intakt ist. Außerdem gibt es das Netzwerk-Statistik-Tool netstat sowie ping zum Testen von Netzverbindungen. Soll es möglich sein, ein System über das Netzwerk zu reparieren, müssen auch ftp oder tfpt und die zugehörigen Utilities für eine FTP-Verbindung vorhanden sein.

/boot

Das Verzeichnis muss nicht auf der Root-Partition stehen. Es enthält die statischen Dateien des Boot-Loaders sowie alle sonst zum Hochfahren erforderlichen Dateien. Hier steht meist auch der System-Kernel, falls er nicht im Wurzelverzeichnis zu finden ist.

/dev

Auch das /dev-Verzeichnis beziehungsweise seine Inhalte werden auf der Root-Partition benötigt. In diesem Verzeichnis stehen zeichen- und blockorientierte Spezialdateien, über die der Zugriff auf Geräte wie Festplatten und DVD-Laufwerke oder Schnittstellen gesteuert wird.

/etc

Das /etc-Verzeichnis gehört ebenso auf die Root-Partition. Denn dort und in den darunterliegenden Verzeichnissen stehen die Dateien für die Systemkonfiguration. Manche der Verzeichnisse unterhalb von /etc müssen auf jedem Unix-System vorhanden sein, andere sind optional. Die Konfigurationsdateien für das X-Window-Subsystem, also den Grafikserver, finden sich im Verzeichnis /etc/X11. Eventuell gibt es auch das Verzeichnis /etc/opt. Dort finden Sie in entsprechenden Unterverzeichnissen die Konfigurationsdateien von Paketen aus dem /opt-Verzeichnis.

/home

Die /home-Verzeichnishierarchie kann auf einer anderen als der Root-Partition stehen. Sie enthält in den Unterverzeichnissen die jeweiligen Home-Verzeichnisse der Benutzer. Die Namen der verschiedenen Home-Verzeichnisse sind mit dem Benutzernamen identisch. Das eigene Home-Verzeichnis ist das einzige, auf das ein Benutzer alle Zugriffsrechte hat. Hier kann er Verzeichnisse anlegen, Dateien löschen und eigene Konfigurationsdaten speichern.

Es bietet sich an, die /home-Hierarchie auf einer eigenen Partition, besser noch: Festplatte, anzulegen, und das aus verschiedenen Gründen: Sind keine Benutzerquotas vorhanden, kann ein Benutzer das gesamte System zum Überlaufen bringen. Ein weiterer Vorteil der physikalisch getrennten /home-Hierarchie: Man kann relativ einfach ein System aktualisieren und bindet die Benutzerverzeichnisse anschließend einfach wieder ein.

/lib, /lib32 und /lib64

Das /lib-Verzeichnis wiederum muss auf der Root-Partition stehen. Das gilt auch für die entsprechenden 32- oder 64-Bit-Bibliotheken, die in den entsprechenden Unterverzeichnissen stehen. Denn diese Verzeichnisse enthalten dynamische Bibliotheken und Kernel-Module, also Dateien mit Anweisungen und Definitionen, die von mehreren Programmen benötigt oder vom Kernel geladen werden. Die Bibliotheken sind nötig, um das System hochzufahren.

/media

Auch /media gehört auf die Root-Partition. Dort nimmt es aber kaum Platz weg, denn das Verzeichnis ist eigentlich leer. Es dient nur als Einhängepunkt für Disketten (/media/floppy), CD- und DVD-Laufwerke (/media/cdrom, /media/cdrecorder, /media/dvd) oder Zip-Disks (/media/zip). Auf Systemen mit mehr als einem gleichen Gerät können weitere Verzeichnisse existieren, die alle mit einer Zahl enden (zum Beispiel /media/cdrom0 und /media/cdrom1 für zwei CD-Laufwerke); allerdings sollte auch in solchen Fällen weiterhin der unqualifizierte Name (/media/cdrom) bestehen bleiben.

In manchen Distributionen gibt es auch direkt unterhalb des Wurzelverzeichnisses Einhängepunkte wie /cdrom. Das entspricht nicht dem FHS. Als Begründung gegen solche Verzeichnisse führen die FHS-Autoren an, dass durch Einhängepunkte im Wurzelverzeichnis gleich einige weitere Verzeichnisse auf der Root-Ebene stünden.

/mnt

Für das Verzeichnis /mnt gilt das Gleiche wie für /media: Es sollte ebenfalls auf die Root-Partition. Das Verzeichnis ist ebenso leer wie /media und dafür gedacht, zeitweilig ein Dateisystem einzuhängen. Das nutzt der Administrator etwa dazu, ein Backup machen oder Festplatten zu spiegeln. Die Unsitte, das Verzeichnis /mnt für das Mounten von Laufwerken zu nutzen, steht im Konflikt mit dieser Unix-Tradition.

/opt

Das Verzeichnis /opt wird für den Systemstart nicht benötigt und kann wie das /home-Verzeichnis auf eine andere Partition ausgelagert werden. Es dient dazu, zusätzliche Softwarepakete aufzunehmen, die nicht über die Paketverwaltung installiert werden. Diese stehen dann im Verzeichnis /opt/<Paket>/bin oder /opt/<Provider>, Manpages zu den Programmen werden für gewöhnlich unter /opt/<Paket>/share/man abgelegt. Konfigurationsdateien für diese Pakete werden unter /etc/opt abgelegt, veränderbare Daten in Programmen sind üblicherweise im Verzeichnis /var/opt installiert.

/proc

Das /proc-Verzeichnis wird im FHS nur im Anhang erwähnt. Es ist kein Standard-Unix-Verzeichnis, in Linux aber ist es der de-facto-Standard zum Verwalten von Prozess- und Systeminformationen. Andere Derivate machen das beispielsweise in /dev/kmem. Das /proc-Verzeichnis muss nicht auf der Root-Partition liegen.

/root

Der Administrator hat nicht nur alle Rechte, er hat auch sein Home-Verzeichnis nicht am gleichen Platz wie die gewöhnlichen Benutzer, sondern direkt unterhalb von / im Verzeichnis /root. Das Verzeichnis muss nicht zwingend auf der Root-Partition vorhanden sein. Dann aber ist sicherzustellen, dass es auf das Wurzelverzeichnis verweist, falls es nicht geortet werden kann.

/sbin

Dieses Verzeichnis muss wiederum auf der Root-Partition vorhanden sein. Es enthält Programme für die Systemadministration. Davon stehen zwar auch noch welche in den Verzeichnissen /usr/sbin und /usr/local/sbin.

Anders: Den Besonderheiten von Linux widmen die Autoren des FHS ein eigenes Kapitel.

Jedoch sind im /sbin-Verzeichnis im Gegensatz zu den beiden anderen Befehle, die zusätzlich zu den Kommandos im /bin-Verzeichnis für das Booten, die Datenrettung und -wiederherstellung erforderlich sind. Hier stehen zum Beispiel Programme wie halt zum Herunterfahren, fdisk zum Partitionieren und die fsck-Programme zum Prüfen der Dateisysteme. In den /usr/sbin- und /usr/local/sbin-Verzeichnissen stehen stattdessen Programme, die erst nach dem Mounten des /usr-Verzeichnisses gebraucht werden.

/srv

Das /srv-Verzeichnis muss nicht auf der Root-Partition stehen. Es enthält Daten für Dienste, die das System bereitstellt, zum Beispiel CGI-Skripts oder Daten eines Web- oder FTP-Servers. Meist sind die Daten nach dem Protokoll sortiert, also www, ftp, rsync oder cvs.

/tmp

Das /tmp-Verzeichnis muss nicht auf der Root-Partition enthalten sein. Es dient für Programme, die temporäre Dateien erzeugen. Selbst Benutzer haben ein Schreibrecht auf dieses Verzeichnis. Dateien dort zwischenzulagern bietet sich jedoch nicht an, denn der Posix-Standard empfiehlt, dass Daten im /tmp-Verzeichnis spätestens bei jedem Hochfahren des Systems gelöscht werden. Auf manchen Systemen wird das /tmp-Verzeichnis auch regelmäßig per cron-Job gelöscht.

/usr

Der zweitgrößte Bereich im Verzeichnissystem ist die /usr-Verzeichnishierarchie. Dieser Bereich muss nicht auf der Root-Partition stehen, denn wichtige Systembefehle stehen entweder unter /bin oder unter /sbin. In /usr hingegen stehen für jeden lesbare Daten; Host-spezifische oder andere veränderliche Daten werden hier nicht gespeichert. In der /usr-Hierarchie gibt es mehrere Verzeichnisse, die erforderlich sind:

Je nach Ausbau des Systems gibt es noch weitere Unterverzeichnisse wie etwa /usr/X11R6 mit dem X-Window-System, /usr/games mit Spielen und /usr/src mit Quellcode. Auch können auf älteren Systemen aus Kompatibilitätsgründen verschiedene symbolische Verknüpfungen auf Unterzeichnisse von /var vorhanden sein, etwa /usr/spool als Verknüpfung zum Verzeichnis /var/spool. Grund für die Umschichtung: Auf das Verzeichnis /usr wird oft zugegriffen. Es soll aber durch Schreiben und Löschen temporärer Daten nicht fragmentiert werden, da sonst der Durchsatz leidet.

/var

In /var finden Sie Dateien mit variablen Daten. Auch dieses Verzeichnis muss nicht auf die Root-Partition. Unter /var stehen beispielsweise Spool-Verzeichnisse für Mail-Postfächer der Benutzer oder Druckaufträge, Log-Dateien (etwa die Datei /var/log/messages mit Systemmeldungen) und auch einige andere temporäre Dateien. In die /var-Verzeichnisstruktur werden im Betrieb all die Daten geschrieben, die früher unter /usr ihren Platz fanden.

Die Verzeichnishierarchie /var sollte man auf einer eigenen Partition unterbringen, eben weil darin so viele veränderliche Daten enthalten sind. Wer das nicht will oder kann, sollte zumindest diesen Teil der Verzeichnishierarchie nicht auf der gleichen Partition wie die Root-Partition beherbergen. Denn es kann schnell zum Überlaufen der Partition kommen, wenn zum Beispiel der Mail-Transport ständig Fehler produziert und die Log-Dateien bis an den Rand der Partition vollschreibt.

Empfehlungen für ein Partitionsschema

Um ein Linux-System zu partitionieren, gibt es mehrere Möglichkeiten. Wichtig ist: Die Root-Partition / muss immer physikalisch die Verzeichnisse /bin, /dev, /etc, /lib (/lib32 und /lib64) und /sbin enthalten. In Debian geht man von etwa 150 bis 250 MByte Platzbedarf für diese Verzeichnisse aus.

Ins /tmp-Verzeichnis können Benutzer schreiben. Man kann es unter anderem für Images nutzen, die auf CD, DVD oder Blu-ray geschrieben werden sollen. Manche dieser Programme nutzen auch das /tmp-Verzeichnis, um vorübergehend darin eigene Daten zu speichern. Wer solche Brennprogramme nutzt, sollte daher den Platz entsprechend einplanen und zirka 1 bis 20 GByte für das /tmp-Verzeichnis reservieren. Wer nicht mit Brennprogrammen arbeitet, kommt mit wesentlich weniger Platz für das temporäre Verzeichnis aus. Die Debian-Installationsanleitung spricht in dem Fall von 40 bis 100 MByte Platzbedarf.

Die /usr-Verzeichnishierarchie ist der Teil des Dateisystems, der zunächst den meisten Platz benötigt. Laut Debian-Installationsanleitung sollte man für eine großzügige Arbeitsplatz- oder Serverinstallation 4 bis 6 GByte reservieren.

Die /var-Verzeichnishierarchie enthält veränderliche Daten. Hier werden Mails und Softwarepakete zwischengespeichert, Log-Dateien geschrieben und Datenbanken aufbewahrt. In Debian wird das Unterverzeichnis /var/www FHS-unkonform anstelle von /srv/www noch für Webseiten genutzt. Die Größe von /var hängt daher stark von der Nutzung des Systems ab. Der Platzbedarf kann variieren von 30 MByte bis zu mehreren GByte.

Bildergalerie:
Partitionsempfehlungen
Die Debian-Installationsanleitung enthält im Anhang C Empfehlungen zum Partitionieren des Systems.
Partitionsempfehlungen
Das "Multi Disk System Tuning“-Howto aus dem Jahr 2002 erklärt für ISPs und große Serverinstallationen, wie man ein System geschickt aufteilt.
Partitionsempfehlungen
Wie viel Platz die verschiedenen Paketgruppen vor, während und nach der Installation benötigen, steht ebenfalls in der Debian-Installationsanleitung.
Partitionsempfehlungen
Die Tabelle aus dem "Multi Disk System Tuning“-Howto dient als Leitfaden beim Aufteilen der Struktur eines Linux-Systems.

Unter /home lagern die Verzeichnisse der Benutzer. Dementsprechend hängt die Größe von der Anzahl der Systembenutzer ab. Laut Debian-Installationsanleitung sollte man mindestens 100 MByte reservieren. Das ist heutzutage allerdings eher lächerlich angesichts der Menge am MP3-Dateien, Bildern und Filmen, die Benutzer auf dem System speichern. Hier kann die Empfehlung nur lauten: Stellen Sie möglichst viel Platz zur Verfügung.

Zwar kommt man generell mit einer Festplatte und einer Partition aus. Geschickter ist aber der Einsatz von mindestens zwei Festplatten. Eine Platte kann das System enthalten, die andere die Home-Verzeichnisse. So kann man schnell die /home-Verzeichnishierarchie in ein anderes System übernehmen. Die Home-Verzeichnisse können Sie außerdem mit dem Logical Volume Manager verwalten; das hat den Vorteil, dass Sie bei Bedarf zur Verzeichnisstruktur einfach weitere Partitionen hinzufügen können.

Auf der Systemplatte wiederum sollten Sie zumindest für /var und /tmp eigene Partitionen definieren - für /tmp, weil alle in das Verzeichnis schreiben dürfen, für /var aus dem bereits erwähnten Grund: Läuft die Partition voll, etwa weil der Rechner mit Spam geflutet wird, reagiert zumindest der Rest des Systems noch. Tipp: Wer so etwas zu befürchten hat, kann auch das Verzeichnis /var/mail auf eine eigene Partition auslagern.

Eine weitere Partition können Sie für den Swap-Speicher vorsehen. Der Zwischenspeicher kann zwar auch einfach in einer Datei liegen. Effizienter ist es allerdings, diesem eine eigene Partition zu gönnen. Es herrschen verschiedene Meinungen, ob der auf der Systemplatte oder woanders liegen sollte: Einige sind der Ansicht, Swap-Speicher und System sollten auf unterschiedlichen SCSI- oder IDE-Kanälen liegen. Als Größenempfehlung gibt es in Linux-Kreisen die Pi-mal-Daumen-Regel: Die Swap-Partition sollte so groß sein wie der Arbeitsspeicher.

Aktuelles Projekt UsrMove

Viele bekannte Distributionen wie Fedora 17 ziehen aktuell einige Verzeichnisse um. Hierbei handelt es sich um /bin, /sbin, /lib und /lib64, die in das Verzeichnis /usr wandern. Vorgeschlagen wurde diese Aufräumaktion der Verzeichnisstruktur von den Entwicklern von Fedora, Distributionen wie Gentoo und openSUSE (vorgeschlagen für Version 12.2) wollen folgen.

Mit der als UsrMove bekannten Initiative soll der root-Baum aufgeräumter wirken, das Teilen von /bin und /usr/bin ist auch mehr verwirrend als nützlich. Die Kompatibilität zur bisherigen Struktur wird weiterhin durch symbolische Links aufrechterhalten. Wann und ob die veränderte Verzeichnisstruktur in den FHS-Standard einfließt, ist derzeit nicht bekannt. (mje/cvi)