UNIX Dateien und Dateisysteme

Willemers Informatik-Ecke

Dateisysteme unter UNIX

UNIX kennt keine Laufwerksbuchstaben, sondern nur einen Verzeichnisbaum. Jedes Laufwerk ist an irgendeiner Stelle in diese Verzeichnisstruktur eingehängt. Durch den Zugriff auf das Verzeichniss, wo das Gerät eingehängt ist, wird auf das Device zugegriffen.

Partitionierung

Das Partitionieren der Platten ist leider nicht einheitlich geregelt. Jedes System hat sein eigenes Programm zur Partitionierung einer Platte. Im Allgemeinen findet sich über das jeweilige Systemadministrationstool ein Weg zu dem Programm, das die Partitionierung übernimmt.

System Tool
Linux fdisk
SCO divvy

Nach der Partitionierung der Platte gibt es im Verzeichnis /dev einen Eintrag, der auf die Partition referenziert. Vor der Verwendung der Partition muß zunächst ein Dateisystem (filesystem) gebildet werden. Dieser Vorgang entspricht dem Formatieren unter MS-DOS.

Beim Partitionieren ist im Normalfall eine Partition für den Swap-Bereich anzulegen.

Erstellen und Prüfen eines Filesystems

mkfs <Device>
Erzeugt ein Filesystem auf einem Device. Typische weitere Parameter sind die Anzahl der Blöcke und die Grösse eines Blocks. Je grösser die Blöcke, desto schneller wird der Zugriff auf grosse Dateien. Allerdings wird bei vielen kleinen Dateien auch der Platzverbrauch erheblich ansteigen.
fsck <Device>
Überprüft die Konsistenz eines Filesystems. Optimalerweise wird dies bei einem abgehängten Dateisystem durchgeführt, da vermieden werden muss, dass andere Benutzer parallel darauf zugreifen. Das ist auch der Grund, warum ein fsck meist im Single-User-Modus ausgeführt wird.

fsck wird beim Booten der Maschine regelmässig aufgerufen. Im normalen Betrieb ist aber nicht jedesmal ein Prüfen der Platte erforderlich. Aus diesem Grund wird geprüft, ob das System korrekt heruntergefahren wurde. In dem Fall wird nur ein Zähler hoch gezählt. Bei einem gewissen Stand wird eine Prüfung erzwungen. Soll explizit eine Prüfung durchgeführt werden, muss dies fsck per Option mitgeteilt werden, sonst setzt es nur den Zähler hoch.

mount <Optionen> <Device> <Verzeichnis>
Hängt das Filesystem in den Verzeichnisbaum an der Stelle eines existierenden Verzeichnisses.
umount <Device>
entfernt das Filesystem aus dem Baum

Überwachen des Filesystems

Der Befehl df (disk free) zeigt eine Liste aller Filesysteme mit deren Platzverbrauch und den Füllgrad in Prozent. Ferner zeigt der Befehl, welche Filesysteme wo eingehängt sind. Man kann sich auch einzelne Filesysteme ansehen, indem man das Filesystem als Parameter angibt.

Einige Systeme liefern diese Angaben in 512-Byte-Blöcken statt in Kilobyte. Oft stellt dann die Flag -k auf KB-Anzeige um. Auch der Füllgrad wird nicht von allen Systemen mitangezeigt. Durch die Option -v erscheint eine vollständigere Auflistung.

Der Befehl du (disk used) setzt auf einer logisch höheren Ebene an. Er zeigt den Platzverbrauch der als Parameter angegebenen Dateien bzw. Verzeichnisse.

Maximalwerte

Lange Zeit galt die 2 GByte Grenze für die maximale Größe einer Datei und die maximale Größe eines Filesystems. Heute erlauben fast alle UNIX-Derivate größere Filesysteme. Dies kann auch recht bedenkenlos genutzt werden.

Bei der Größe der Datei spielt aber auch das Programm eine wesentliche Rolle, das die Datei liest und schreibt. Arbeitet das Programm sequentiell, stellt das Betriebssystem die obere Grenze. Wird aber im direkten Zugriff gearbeitet, dann verwendet das Programm den Aufruf lseek mit einem 32-Bit-Wert als Positionierparameter. 32 Bit können maximal 4.294.967.296 Bytes adressiert werden. Sobald aber ein Vorzeichen verwendet wird, verliert man ein Bit und die maximale Größe beträgt 2.147.483.648, also 2 GByte. Programmtechnisch ist das Problem zu umgehen, indem nicht von der Anfangsstelle der Datei aus positioniert wird. Dann mu&szig; das Programm bereits mit der Absicht geschrieben sein, die 2 GB-Grenze zu durchbrechen. Die meisten Programme tun dies nicht.

SCO-Grenze ULIMIT

SCO hat noch eine zusätzliche Grenze, die in den Kernel-Parametern durch ULIMIT festgelegt wird. In einer Standardinstallation ist die maximale Dateigröße auf 1 GB beschränkt. Damit nicht genug, wird ULIMIT auch noch als Environmentvariable in /etc/default/login eingesetzt, die vom Terminal gestartete Prozesse auf diese Größe beschränken. Der Wert, den ULIMIT angibt, ist die maximale Anzahl der Blöcke, die 512 Byte groß sind. Also sind 2 GB 4194303 Blöcke.

Maximal geöffnete Dateien

Eine weitere Schranke kann die Anzahl der maximal geöffneten Dateien sein. Dabei gibt es zwei Werte. Der eine beschränkt die Gesamtzahl der offenen Dateien und der andere die Anzahl der Dateien, die ein einzelner Prozess eröffnen darf.

LINUX-Parameter für maximal geöffnete Dateien

Bei einer Standard-Installation wird die Anzahl der gleichzeitig offenen Dateien auf 1024 begrenzt. Die Einstellung befindet sich in /usr/src/linux/include/linux/fs.h und heißt NR_FILES. NR_INODES ist um den gleichen Faktor hochzuziehen. Eine Neubildung des Kernels ist notwendig, um den Parameter zu erhöhen.

Einbinden eines Filesystems (mount und fstab)

Nachdem ein Filesystem erzeugt wurde, muss es in den Verzeichnisbaum eingehängt werden, damit es nutzbar ist. Dies betrifft nicht nur Festplattenpartitionen, sondern auch bewegliche Medien wie CD-ROMs und Disketten.

Der Aufruf zum Einbinden eines Filesystems lautet mount, der zum Freigeben umount. Freigegeben werden kann ein System nur dann, wenn es von niemandem mehr benutzt wird.

Die Datei /etc/fstab enthält die Filesysteme, die beim Booten bereits eingebunden werden. Eine typische fstab:

/dev/hda3       swap    swap    defaults 0 2
/dev/hda2       /boot   ext2    defaults 1 2
/dev/hda5       /       ext2    defaults 1 1
/dev/cdrom      /cdrom  auto    ro,noauto,user,exec 0 0
/dev/fd0        /floppy auto    noauto,user 0 0

In der ersten Spalte stehen die Filesysteme bzw. Partitionen. Die zweite Spalte bezeichnet den Ort, wo die Partition ihren Platz im Verzeichnisbaum findet. Die dritte Spalte bezeichnet den Typ des Filesystems (ext2 ist beispielsweise das Standardfilesystem von Linux).

Die vierte Spalte bezeichnet die Optionen, die kommasepariert aufgeführt werden, aber aus naheliegenden Gründen kein Leerzeichen enthalten dürfen. Diese Optionen sind die des Befehls mount. Man findet sie auch unter man mount. ro bezeichnet nur Lesen, wie beim CD-ROM zu erwarten. user bedeutet, dass der Anwender das Filesystem mounten darf und anschließend auch die Rechte auf dieses Filessystem hat.

Die Zahl der fünften Spalte ist 1, wenn das Filesystem bei einem dump mitgenommen werden muss. Die Zahl in der sechsten Spalte wird von fsck verwendet, um festzustellen, in welcher Reihenfolge die Filesysteme beim Booten geprüft werden müssen. Steht dort eine 0, braucht das System nicht geprüft zu werden.

Optimierung des Dateisystems

Überfüllung der Dateisysteme vermeiden

Die Geschwindigkeit voller Filesysteme geht zurück, da eine größere Fragmentierung eintritt. Dadurch steigt die Zeit auf der Suche nach freien Clustern. Der Füllgrad sollte 90% nicht überschreiten. Besser sind Werte von etwa 75%.

Blockgrösse

Je grösser der Block ist, den das System mit einem mal liest, desto geringer wird der Einfluss der langsamen Plattenzugriffe auf die gesamte Dateioperation. Ab einer gewissen Blockgrösse allerdings kippt dieser Wert wieder, wenn oft mehr geladen wird, als tatsächlich benötigt wird.

So gross der Block ist, so gross ist dann auch die kleinste Datei, da die Platte immer blockweise belegt wird. Bei vielen kleinen Dateien wird der verschwendete Speicherraum entsprechend gross.

Die Blockgrösse kann nur beim Erzeugen des Dateisystems (mkfs) festgelegt werden.

Eigenes Filesystem für /tmp

Das Verzeichnis /tmp kann auf eine eigene Platte gelegt werden. Dies bringt auf Systemen etwas, die das tmp-Verzeichnis intensiv nutzen, wie beispielsweise bei der Compilierung. Es wird eine höhere Geschwindigkeit erreicht, da das ständige Schreiben und Löschen zu einer starken Zerclusterung führt. Da /tmp aber immer wieder gelöscht wird, kann keine Zerclusterung entstehen. Ferner ist der Vorteil, daß im Bereich des /tmp-Verzeichnisses bei einem Absturz am häufigsten ein unzusammenhängendes Dateisystem entsteht. Da /tmp bedenkenlos gelöscht werden kann, ist der Schaden nur gering.

Swapping

UNIX nutzt den Swap-Mechanismus recht intensiv und es ist kein Zeichen für einen Engpaß, wenn die Swap-Partition gut gefüllt ist. Alle Dämonen, die nur selten gebraucht werden, landen bald im Swap-Bereich und geben so den wertvollen Hauptspeicher frei. Erst wenn das Ein- und Auslagern zunimmt, wenn also starke Aktivitäten im Swap-Bereich feststellbar sind, ist zu vermuten, daß man das System durch Hinzufügen von Hauptspeicher beschleunigen könnte.

Fast jedes UNIX verwendet zunächst eine Swap-Partition. Der Vorteil liegt in der Geschwindigkeit. Der Nachteil ist, daß man zum Installationszeitpunkt festlegen muß, wieviel Speicher die Maschine benötigen wird. Über die Größe der Swappartition gibt es leicht ideologische Auseinandersetzungen. Die Faustregel, den Hauptspeicher noch einmal als Swap zu nehmen, ist wenig sinnvoll, da die Summe beider den virtuellen Speicher ausmachen. Diese Summe sollte auch im Schlimmsten Fall noch ausreichend sein.

Die meinsten UNIX-Systeme können übrigens auch mit Swap-Dateien arbeiten. Dies wird vor allem dann eingesetzt, wenn der Swap-Bereich zu eng wird und eine erneute Partitionierung vermieden werden soll.


Homepage (C) Copyright 1999, 2000 Arnold Willemer