Aus Linux-Magazin 11/2005

Aus dem Nähkästchen geplaudert: Unix-Verzeichnisbaum

Unix-Systeme organisieren alle Dateien in einem hierarchischen Verzeichnisbaum. Damit sich Admins auch auf fremden Rechnern rasch zurechtfinden, gibt es hilfreiche Konventionen für den Aufbau eines Dateisystems. Sie legen fest, welche Datei wohin gehört.

Schon bei einer minimalen Unix-Installation landen Tausende von Dateien und Verzeichnissen auf der Platte. Mit den verschiedenen Unix-Dialekten etablierten sich auch ganz unterschiedliche Konzepte, wie ein Rechner die einzelnen Dateien sinnvoll organisiert. Beispielsweise nennen viele Admins die Heimatverzeichnisse eines Endbenutzers »/usr/home/Name«, andere verwenden lieber »/Users/Name«. Eine Mailbox wiederum heißt auf einem Computer »/usr/mail/Name«, auf einem anderen »/var/spool/mail/Name«. Diese Vielfalt hat gravierende Nachteile.

Software nach Wunsch

Beim modularen Konzept von Unix wählen Admins für jede Aufgabe aus einer Anzahl von Programmen aus; mit der Möglichkeit, sie bei Bedarf zu wechseln. Ist zum Beispiel der Tausch des Mail Transfer Agent (MTA) erforderlich, sollte die neue Version die alten E-Mails noch finden und verarbeiten. Wer die Pfadangaben nicht manuell einstellen will, fährt mit den Standards am besten. Festgelegte Verzeichnisstrukturen vereinfachen außerdem den Dateien-Austausch zwischen Rechnern.

Manche Administratoren erleichtern sich die Arbeit, indem sie Software überhaupt nur ein einziges Mal installieren. Alle im LAN angeschlossenen Rechner mounten dann die entsprechenden Verzeichnisse über ein Netzwerk-Dateisystem wie NFS. Das funktioniert aber nur, wenn die wichtigsten Programme und Dateien auf jedem Rechner an der gleichen Stelle liegen.

Die Linux-Gemeinde begann schon im Herbst 1993 mit Arbeiten an der Standardisierung des Dateisystembaums. Ziel war es, portierte Software von fremden Unix-Varianten mit möglichst geringem Aufwand auf jeder Linux-Distribution einzusetzen. Diesem FSSTND genannten Projekt (Filesystem Standard) folgte der Filesystem Hierarchy Standard FHS [1], der noch heute die Vorgaben für alle Distributionen setzt. Einige Punkte des FHS verursachen nicht selten Streitigkeiten, dennoch führt seine Existenz zweifellos zu einer nützlichen Vereinheitlichung.

Die Basis

Jeder Linux/Unix-Computer benötigt einen bestimmten Kern von Dateien und Verzeichnissen. Selbst wenn der Rechner alle weiteren Dateien aus dem Netz holt, muss dieser Bereich beim Booten zur Verfügung stehen. In Systemen, die sich aus mehreren physikalischen Partitionen zusammensetzen, liegen diese Dateien auf der Bootpartition. Beim Booten übers Netzwerk holt sich der Computer diese Dateien ebenfalls von einem Server. Das muss allerdings geschehen, bevor »init« mit der Initialisierung des Systems beginnt.

Im Bootbereich liegt ein komplett gebrauchsfertiges Unix-System. Das hat mehrere Vorteile: Wenn nach einem Kernelupdate der Netzwerkkartentreiber ausfällt, können bestimmte Teile des Dateisystems möglicherweise nicht mehr aktiviert werden. Der Admin muss für die Reparatur mit den Tools des Boot-Dateisystems auskommen. Auch alles, was der Admin für die Wiederherstellung von Dateien aus einem Backup braucht, sollte in diesem Bereich liegen.

Die wichtigsten Tools

Diese Werkzeugsammlung umfasst die Lieblings-Shell des Administrators einschließlich aller nötigen Bibliotheken. Ein Texteditor sollte ebenso wenig fehlen wie Software zum Zugriff auf Systembestandteile: »fdisk«, die »mkfs«-Familie und »mount«. Eine vollständige Liste findet sich in der Spezifikation des Filesystem Hierarchy Standard [1].

Der Root-Bereich des Dateisystems umfasst neben dem Wurzelverzeichnis »/« noch »/etc« mit den Konfigurationsdaten, »/bin« und »/sbin« mit den wichtigsten Programmen, »/lib« für die dynamischen Bibliotheken und Kernelmodule sowie »/dev« mit Gerätedateien. Das Heimatverzeichnis von Root, »/root«, liegt auch oft auf dieser Partition.

Abbildung 2: Der Verzeichnisbaum eines typischen Linux-Rechners. Um möglichst performant und flexibel zu arbeiten, sollten Admins die Daten auf mehrere Festplattenpartitionen aufteilen. In dem dargestellten Beispiel repräsentiert jeder Kasten eine eigene Partition.

Abbildung 2: Der Verzeichnisbaum eines typischen Linux-Rechners. Um möglichst performant und flexibel zu arbeiten, sollten Admins die Daten auf mehrere Festplattenpartitionen aufteilen. In dem dargestellten Beispiel repräsentiert jeder Kasten eine eigene Partition.

Eine Sonderstellung nimmt »/boot« ein, wo auf einem modernen Linux-System der Kernel, ein RAM-Disk-Image mit essenziellen Kernelmodulen sowie die Konfigurationsdateien des Bootloaders (Grub oder Lilo) lagern. Zwar gehören diese Dateien zum Kern eines Linux-Systems, sie müssen aber nicht unbedingt auf der Partition mit dem Root-Dateisystem liegen.

Die guten ins Töpfchen

Der Endbenutzer ruft selten Programme aus der Root-Partition auf. Das Gros der Anwendersoftware versammelt sich stattdessen in »/usr«. Für viele Unix-Kenner bedeutet »usr« Unix System Resources; gemeinhin spricht man aber einfach vom User-Verzeichnis. Es enthält viele auch im Root-Dateisystem vorhandene Unterverzeichnisse. Passend zu »/bin« existiert ein »/usr/bin«, Systemprogramme stehen wie in »/sbin« auch in »/usr/sbin« und für dynamische Bibliotheken gibt es »/usr/lib«. Das Verzeichnis »/usr/etc« darf laut FHS nicht existieren. Die Konfigurationsdaten aller Programme landen in »/etc«.

»/usr« enthält zudem noch eine Reihe weiterer Unterverzeichnisse: In »/usr/src« landen Quelltexte, »/usr/include« enthält Include-Files für diverse Programmiersprachen und »/usr/share/doc«, »/usr/share/man« sowie »/usr/share/info« speichern Dokumentationsfiles für die installierten Softwarepakete. Zusätzliche Software darf – um dem FHS zu entsprechen – außer in »/usr« auch in »/opt« landen.

Listing 1: Auslagern von
»/usr/share«

01 #!/bin/sh
02 
03 mke3fs /dev/sdc1
04 mount /dev/sdc1 /mnt
05 cd /usr/share
06 tar cf - . | (cd /mnt && tar xpf -)
07 umount /mnt
08 mount -o remount,rw /usr    # falls /usr read-only ist
09 rm -rf /usr/share/*
10 mount -o remount,rw /       # falls /    read-only ist
11 echo '/dev/sdc1 /usr/share ext3  defaults 1 3' >>/etc/fstab
12 mount /usr/share
13 exit

Während »/usr« die Dateien nach Funktion ordnet (Binaries liegen in »/usr/bin«, Bibliotheken in »/usr/lib«), sortiert »/opt« die Dateien nach dem Hersteller oder dem Softwarepaket. Ein extremes Beispiel für diese systemübergreifende Konvention ist Solaris mit seinen zahlreichen »/opt/SUNW*«-Paketen. Unter Linux finden sich oft Installationen mit »/opt/kde3« oder »/opt/gnome«.

Die Dateien in »/usr« und »/opt« ändern sich naturgemäß selten. Es bietet sich an, diese beiden Verzeichnisse nach der Initialisierung read-only zu mounten, um versehentliche oder absichtliche Modifikationen zu unterbinden. Beim Backup ist eine vollständige Sicherung wichtig, ein tägliches Backup von Partitionen, die sich nur selten ändern, ist jedoch meist überflüssig [2].

Umgekehrt neigt »/usr« besonders bei lange verwendeten privaten Computern dazu, sich bis zum Rand mit Dateien zu füllen. In solchen Fällen sollte der Admin erwägen Unterverzeichnisse von »/usr« auf eigene Partitionen auszulagern, wie Listing 1 zeigt. Das Skript erstellt auf der leeren Partition »/dev/sdc1« ein Dateisystem und verschiebt danach den Inhalt von »/usr/share« auf diese Partition.

Home, sweet Home

Die Heimatverzeichnisse der Benutzer von BSD-Systemen liegen traditionell unterhalb von »/usr/home«. Linux verwendet stattdessen »/home«. In lokalen Netzen koppeln Admins »/home« oft mit einem Automounter, der das jeweils benötigte Verzeichnis dynamisch von einem Fileserver holt, sobald der Nutzer sich anmeldet.

Auch die Datenverzeichnisse von Diensten, zum Beispiel eines HTTP- oder FTP-Servers, bekommen meist ein eigenes Verzeichnis. Der Umgang mit diesen Mountpunkten unterscheidet sich von Distribution zu Distribution stark. Allerdings schreibt der FHS vor, dass solche Daten in dem gesonderten Verzeichnis »/srv« liegen sollen.

Suse hält sich daran und lässt die Document Root von Apache in der Voreinstellung auf »/srv/www« zeigen. Viele Administratoren empfinden das aber als ungewohnt. Debian etwa ist zwar stolz auf seine Übereinstimmung mit dem FHS, verwendet als Document Root aber »/var/www«, ähnlich Red Hat Enterprise Linux. Das Datenverzeichnis des FTP-Daemon liegt oft in »/home/ftp«.

Für eigene Software

Wer als Admin auf einem Linux-System eigene Software übersetzt und installiert, sollte sie nicht an eine der genannten Stellen schreiben. Mit »/usr/local« gibt es eine separate Hierarchie, die genau für solche Zwecke gedacht ist. Ein privat erstelltes Skript oder Programm findet in »/usr/local/bin« seinen Platz, die zugehörige Dokumentation steckt im Verzeichnis »/usr/local/man«.

Es bietet sich übrigens an, »/usr/local« ebenso wie »/home« als separate Partitionen anzulegen. Nach einem Wechsel der Distribution reichen dann ein einfaches Mountkommando oder eine Ergänzung in »/etc/fstab« und die eigenen Dateien stehen wieder zur Verfügung. Wer nicht zu viele einzelne Partitionen anlegen möchte, begnügt sich mit einer Partition für »/home« und erstellt »/usr/local« als Symlink nach »/home/local«.

Schnelllebige Daten

Ein laufendes Unix-System produziert eine Vielzahl sich schnell ändernder Daten. Das Verzeichnis »/var« (variable Daten) sammelt sie ein. Dieses Verfahren trennt die veränderlichen Dateien von der read-only gemounteten »/usr«-Partition. Protokolldaten wachsen zudem abhängig von der Auslastung des Systems zu einem erheblichen Volumen an. Bei unerwartet hoher Last explodiert der Umfang der Logdateien von Apache oder der Firewall.

Befinden sich derartige Dateien auf der Hauptpartition und sie läuft bei hoher Systemlast über, stürzt der Rechner in eine Reihe bizarrer Fehlfunktionen, weil Programme essenzielle temporäre Dateien nicht mehr anlegen können. Es empfiehlt sich daher, »/var« auf einer eigenen Partition unterzubringen.

Ein besonders häufig benötigtes Unterverzeichnis von »/var« ist »/var/log«, in dem die Protokolldateien landen. »/var/mail« wiederum enthält die Mailboxen der Nutzer; ältere Linux-Systeme benutzen hierfür noch »/var/spool/mail«. »/var/run« schließlich speichert die so genannten PID-Dateien mit den Prozessnummern laufender Daemons für Interprozess-Kommunikation [3].

Das Root-Dateisystem enthält noch Mountpunkte für einige weitere Dateisysteme. Dazu gehört »/proc« für ein virtuelles Dateisystem, das Kernelvariablen bereitstellt, etwa für die Konfiguration der Netzwerkkarte oder von USB-Geräten. Wechselmedien erhalten eigene Verzeichnisse unterhalb von »/media«, etwa »/media/floppy« oder »/media/cdrom«. Laut Standard soll »/mnt« nur vorübergehend benötigten Dateisystemen dienen, bei der Reparatur eines Rechners oder beim kurzfristigen Zugriff auf ein Netzwerkdateisystem. (mwe)

Infos

[1] Filesystem Hierarchy Standard: [http://www.pathname.com/fhs/]

[2] Marc André Selig, “Backups”: Linux-Magazin 04/05, S. 76

[3] Marc André Selig, “IPC mit Signalen”: Linux-Magazin 04/04, S. 76; “Interprozess-Kommunikation jenseits von Signalen”: Linux-Magazin 05/04, S. 76

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben