UNIX und Festplatten

Willemers Informatik-Ecke

Partitionieren

Um eine Festplatte nutzen zu können, müssen mehrere Vorgänge durchgeführt werden. Zunächst muss eine neue Platte partitioniert werden. Das bedeutet, sie wird in mehrere Dateisysteme untergliedert. 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. Man kann sie allerdings auch direkt aufrufen. Unter Linux heißt das Partitionierungstool beispielsweise fdisk, unter SCO divvy und unter MacOS X DiskUtility. Nach der Partitionierung der Platte wird jede Partition über einen Eintrag im Verzeichnis /dev referenziert.

Größe der Partitionen

Eine regelmäßig gestellte Frage ist die nach der Größe der Partitionen. Ehrliche Antworten werden dabei immer sehr schwammig bleiben. Das liegt daran, dass es sehr unterschiedlich ist, welches UNIX verwendet wird, ob es eine Workstation oder ein Server ist, welche Software installiert wird, wieviele Benutzer daran arbeiten und inwieweit diese ihre persönlichen Daten auf der Maschine abstellen. Für die Einteilung der Partitionen kann man einige der im Abschnitt Tuning genannten Aspekte berücksichtigen. Es ist gut, wenn die Partitionen nicht größer als das Sicherungsmedium sind. Und ansonsten wird man sich bei der Paritionierung an die Bedürfnisse der eigenen Maschine mit der Zeit an das Optimum herantasten. Dass man das Ideal je erreicht, werden neue Softwareversionen und die Veränderungen innerhalb der Firma verhindern.

Partitionen zum Swapping

UNIX-Systeme verwenden eine Partition für ihren Swap-Bereich. Die Verwendung einer Partition ist wesentlich effizienter als eine Swapdatei, da sie nicht der Fragmentierung des Dateisystems unterliegt. Sie muss allerdings bereits bei der Einteilung der Platte berücksichtigt werden und kann nicht dynamisch wachsen oder schrumpfen.

Sowohl Solaris als auch MacOS X unterscheiden zwischen rohen (raw devices) und den logischen Partitionen. Bei Solaris werden die Links auf die Partitionen in zwei Verzeichnissen /dev/dsk und /dev/rdsk untergebracht. Als rohe Devices werden die nackten Partitionen betrachtet, während die logischen Partitionen das Dateisystem anspricht. Entsprechend unterscheiden sich beispielsweise die Parameter von newfs und mount.

Dateisystem erstellen

Während eine Partition eine Aufteilung der Platte ist, ist ein Dateisystem die Rahmenstruktur, in der Verzeichnisse und Dateien abgelegt werden können. Jeder UNIX-Hersteller hat im Laufe der Zeit eigene Dateisysteme entwickelt, die die Geschwindigkeit erhöhen, den Platzverbrauch minimieren und die Sicherheit perfektionieren sollen. Die Entwicklung in diesem Bereich ist noch in vollem Gange und so muss man damit leben, dass sich die einzelnen Dateisysteme unterscheiden.

mkfs erzeugt ein Dateisystem

Nachdem die Platte partitioniert wurde, wird mit dem Befehl mkfs oder newfs (Solaris, FreeBSD, MacOS X) ein Dateisystem auf jeder Partition erstellt, das Daten aufnehmen soll. Als Parameter wird das Device erwartet, über das die Partition ansprechbar ist. Diese Information kann durch das Partitionstool ermittelt werden.

mkfs /dev/hda3

Parameter des mkfs

Damit wird ein Dateisystem auf der Partition /dev/hda3 erzeugt. In alten Versionen von mkfs musste man noch angeben, wieviele Blöcke das Dateisystem haben sollte und wie groß die Blöcke sein sollten. 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. Die neueren Versionen von mkfs lesen die Anzahl der Blöcke aus der Größe der Partition ab. Die Blockgröße spielt bei vielen Dateisystemen keine entscheidende Rolle mehr, da die Systeme die Verteilung der kleinen Dateien auf große Blöcke selbst regeln.

Viele Systeme unterscheiden zwischen >>raw devices<< und den Dateisystemen derselben Partition. Diese Unterscheidung ist vor allem beim Einsatz von RAID-Systemen hilfreich. Für beide gibt es einen getrennten Eintrag im Verzeichnis /dev.

Swapping

Neben den Datenpartionen verwendet UNIX eine Partition zum Swappen. Unter Swapping versteht man das Ein- und Auslagern von Prozessen aus dem Hauptspeicher auf die Festplatte. UNIX lagert Prozesse, die längere Zeit nicht aktiv wurden aus, wenn der Hauptspeicher eng wird. Dadurch ist es möglich, dass mehr Prozesse arbeiten, als in den Hauptspeicher passen.

Nun ist das Auslagern auf Platte und das Zurückholen in den Hauptspeicher ein recht zeitaufwändiges Verfahren, da die Platte einen sehr viel langsameren Zugriff hat als Hauptspeicher. Tatsächlich belastet das Swappen das System bei den ersten Fällen der Speicherengpässe nicht unerheblich. Je länger das System allerdings läuft, desto ruhiger wird es, weil mit der Zeit diejenigen Hintergrundprozesse ausgelagert werden, die selten zum Einsatz kommen. Solche Hintergrundprozesse, die nur auf ein bestimmtes Ereignis warten um aktiv zu werden und die restliche Zeit schlafen, gibt es in einem UNIX-System in hoher Zahl. Insofern ist es auch nicht beunruhigend, wenn der Swapbereich belegt ist.

Kritisch wird es erst dann, wenn Bewegung ins Spiel kommt, also das System häufig auslagern muss. Dann sollte man den Hauptspeicher erweitern, weil das ständige Wechseln der Prozesse die Maschine belastet. Wenn der Speicher derart überlastet ist, dass die Maschine ständig die Prozesse ein- und auslagert und sonst fast nicht mehr arbeitet, redet man vom Thrashing.

Heutiges Swappen ist Paging

An sich ist der Name Swappen nicht mehr ganz korrekt, da es an sich das Auslagern ganzer Prozesse bezeichnet. Heutige Systeme arbeiten längst mit Pagingverfahren. Das bedeutet, dass das Auslagern nicht mehr auf Prozessebene stattfindet, sondern dass Speicherseiten fester Größe ausgelagert werden. Man kann sich das so vorstellen, dass der Hauptspeicher in Kacheln gleicher Größe aufgeteilt ist und das System kontrolliert, welche Kachel wie oft benutzt wird. Auf diese Weise können Prozesse teils im RAM und teils auf Platte liegen. Paging ist aufwändiger, aber auch wesentlich effizienter als Swapping. Man spricht auch von virtuellem Speicher, da der Prozess nicht merkt, dass sein Speicher zum Teil eigentlich auf der Platte ist.

swapon startet das Swappen

Das Swappen wird beim Systemstart in einem rc-Skript gestartet. Der Befehl zum Aktivieren lautet swapon. Dabei wird es üblicherweise mit der Option -a gestartet. Das führt dazu, dass in der /etc/fstab nach den Swapdevices geschaut wird und diese aktiviert werden.

Größe der Swappartition

Über die Größe der Swappartition gibt es leicht ideologische Auseinandersetzungen. Die Faustregel, den Hauptspeicher noch einmal als Swap zu nehmen, stammt wohl daher, dass das System im Falle eines kernel panic, also eines Totalzusammenbruchs des Betriebssystems, einen Speicherabzug in die Swappartition schreibt. Abgesehen von dieser Überlegung ist die Regel wenig sinnvoll, da die Summe beider den virtuellen Speicher ausmachen. Wenn also das RAM bereits knapp ist, sollte der Swapbereich großzügig sein. Ist jede Menge RAM im System, kann man vielleicht sogar ganz ohne Swappartition auskommen und nur als Sicherheit noch eine Swapdatei anlegen. Die Summe aus RAM und Swapbereich sollte auch im schlimmsten Fall noch ausreichend sein.

Swappartitionen sind schneller als Dateien

Fast jedes UNIX verwendet eine Swap-Partition und keine Datei. Der Vorteil liegt in der Geschwindigkeit. Der Zugriff auf die Swappartition ist wesentlich schneller als der Zugriff über das Dateisystem. Der Nachteil ist, dass man zum Installationszeitpunkt festlegen muß, welche Größe der Swapbereich benötigen wird.

Swapdateien

Die meisten UNIX-Systeme können auch mit Swap-Dateien arbeiten. Dies kann eine schnelle Lösung sein, wenn der Swap-Bereich zu eng wird und eine erneute Partitionierung vermieden werden soll. Es ist aber vor allem eine dynamische Lösung, die kurzfristige, extreme Spitzen abfängt. Installiert man auf einem System zusätzlich zur Swappartition eine Swapdatei, wird es auch dann keinen Programmabbruch wegen zuwenig Speicher geben, wenn plötzlich und überraschend mehr Prozesse gestartet werden, als je voraussehbar war.

Unter HP-UX kann am Einfachsten über das Administrationstool sam eine Swapdatei eingerichtet werden. Der entstehende Eintrag in der /etc/fstab:

/dev/vg00/lvol8 /users hfs rw,suid 0 2
/dev/vg00/lvol8 /users swapfs min=3840,lim=12800,pri=2 0 2

In der oberen Zeile sieht man, dass das Plattendevice lvol8 ein normales hfs-Dateisystem ist. Es wird auch tatsächlich für Benutzerdaten verwendet. Daneben liegt aber auch im Verzeichnis /users das sogenannte Dateisystempaging. Betrachtet man die Situation in /users, findet man dort ein Verzeichnis namens paging, in dem mehrere Dateien liegen, die zum Swappen verwendet werden. Die Parameter geben übrigens an, dass mindestens 3840 Blöcke verwendet werden sollen. Das Limit (lim=) ist 12800 Blöcke. Alle installierten Swapbereiche bekommen eine Priorität. Bei Anforderung von virtuellem Speicher wird mit der geringsten Priorität begonnen. Da auf diesem System auch eine Swappartition mit der Priorität 1 ist, wird zuerst diese ausgeschöpft, bevor auf die Datei zugegriffen wird.

Einbinden eines Dateisystems

Nachdem ein Dateisystem erzeugt wurde, muss es in den Verzeichnisbaum eingehängt werden, damit es nutzbar ist. Der Aufruf zum Einhängen eines Dateisystems lautet mount, der zum Freigeben umount.

Bei einem neuen System muss vor der Installation klar sein, welches Dateisystem an welche Stelle im Verzeichnisbaum eingehängt wird. Vor der Installation wird dies oft automatisch vom Installationsprogramm gemacht. Soll beispielsweise eine eigene Partition das Verzeichnis /usr aufnehmen, wird das Verzeichnis angelegt und das Dateisystem mit einem mount eingehängt.

mkdir /usr
mount /dev/sda2 /usr

Wird dagegen nachträglich eine Platte als Speichererweiterung eingebaut, wird man sie unter einem Dummyverzeichnis in den Verzeichnisbaum einhängen und die Zugriffe über einen symbolischen Link realisieren. Manchmal werden Platten über Verzeichnisse /u, /u1 oder /v eingehängt. Etwas ordentlicher ist es, wenn man innerhalb eines Verzeichnisses /mount oder /drives Verzeichnisse für das Einhängen der Platten einrichtet. Durch einen symbolischen Link kann man anschließend jedes beliebige Verzeichnis auf die Platte umlegen. Zum Beispiel:

mkdir /mount/hda3
mount /dev/hda3 /mount/hda3
ln -s /mount/hda3 /home/tacoss

/mnt

Das Verzeichnis /mnt eignet sich zu diesen Zwecken weniger, da es traditionell gern verwendet wird, um kurzfristig Dateisysteme einzuhängen.

Umkopieren

Nachdem die neue Platte eingehängt worden ist, muss man normalerweise einige Verzeichnisäste auf die neue Platte schaffen, um auf den vollen Dateisystemen wieder Luft zu bekommen. Beim Umschichten solcher Äste ist es wichtig, dass nicht nur alle Daten transportiert werden, sondern auch, dass alle Dateirechte erhalten bleiben. Um das zu gewährleisten, sollte die Verzeichniskopie per
tar erfolgen, damit die Eigenschaften der Dateien erhalten bleiben.

Die /etc/fstab

Damit das System beim nächsten Booten die Platte wieder an die richtige Stelle einhängt, wird ein Eintrag in der Datei /etc/fstab für die Platte eingerichtet. Die Zeile für das obige Beispiel würde unter Linux so aussehen.

/dev/hda3    /mount/hda3       ext2    defaults 1 1

Die /etc/fstab enthält alle Dateisysteme, die beim Booten bereits eingebunden werden. Eine typische fstab sieht so aus:

/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

Die Spalten der fstab

In der ersten Spalte stehen die Partitionen. Die zweite Spalte bezeichnet den Ort, wo die Partition ihren Platz im Verzeichnisbaum findet. Die dritte Spalte bezeichnet den Typ des Dateisystems. ext2 ist beispielsweise das Standarddateisystem 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. ro bezeichnet schreibgeschützte Systeme, wie beim CD-ROM zu erwarten. user bedeutet, dass der Anwender das Dateisystem mounten darf und anschließend auch die Rechte auf dieses Filessystem hat. noauto verhindert, dass die CD-ROM bereits beim Booten ins Dateisystem eingehängt wird. Die Zahl in der fünften Spalte ist 1, wenn das Dateisystem bei einem
dump berücksichtigt werden soll. Die Zahl in der sechsten Spalte wird von fsck verwendet, um festzustellen, in welcher Reihenfolge die Dateisysteme beim Booten geprüft werden müssen. Steht dort eine 0, braucht das System nicht geprüft zu werden.

Allein durch die unterschiedlichen Namen der Dateisysteme ist die fstab nicht zwischen den UNIX-Systemen portabel. Da die Partitionseinteilung aber auch sehr individuell für jeden Computer ist, muss sie auch nicht zwischen den Systemen austauschbar sein. Immerhin sind sie so konsistent, dass man sich auch unter einem fremden UNIX-Derivat sofort darin zurecht findet.

Um den Spezialisten für die einzelnen Systeme ein gewisses Spezialwissen zu garantieren, haben die Hersteller für die gleiche Datei ein paar Variationen in die Namensgebung gebracht:

System Name der Datei
SCO /etc/default/filesys
HP-UX 10.10 /etc/fstab
Solaris /etc/vfstab

Dateisystem aushängen: umount

Ein Dateiystem, das in den Verzeichnisbaum eingehängt wurde, muss vor dem physischen Entfernen des Mediums wieder ausgehängt werden. Der Befehl dazu lautet umount (Es darf kein n in diesem Befehl vorkommen.). Wechselmedien kann man erst entnehmen, wenn sie ausgehängt sind. Auch wenn ein Dateisystem per fsck geprüft werden soll, muss es erst ausgehängt werden.

Belegter Ast

Ein System kann nur dann aus dem Verzeichnisbaum genommen werden, wenn es von niemandem mehr benutzt wird. Schlägt der Befehl umount fehl, gibt es noch Benutzer, die das Dateisystem verwenden. Mit fuser auf das Wurzelverzeichnis der Platte ist schnell ermittelt, welche Prozess-ID die Platte in Beschlag nimmt.

Bestimmte Systemverzeichnisse sind natürlich immer in Gebrauch, wie etwa das Verzeichnis /var, das von beinahe jedem Hintergrundprozess verwendet wird. Solche Verzeichnisse kann man nur im Single User Modus aushängen.

Konsistenz der Dateisysteme

UNIX achtet von sich aus auf die Konsistenz seiner Dateisysteme. Bei jedem Boot wird geprüft, ob das System beim letzten Mal korrekt heruntergefahren wurde. War dies nicht der Fall, wird zwingend eine Prüfung des Dateisystems eingelegt. Aber selbst, wenn alles in Ordnung ist, wird nach einer gewissen Zahl von Startvorgängen eine Zwangsprüfung durchgeführt.

Meldungen beim Boot

Werden bei diesen Prüfungen erhebliche Mängel festgestellt, stoppt der Bootprozess mit einer Meldung. Auf der Konsole erscheint der root Prompt mit der Aufforderung die Platte zu renovieren, deren Gerätebezeichnung ebenfalls angezeigt wird. Zu diesem Zeitpunkt befindet sich das System im Single User Modus. Wenn Sie nicht gerade besondere Kenntnisse über den internen Aufbau des Dateisystems besitzen, können Sie lediglich fsck für das Dateisystem noch einmal starten. Da dieser Lauf im Dialog stattfindet, kann nun das System fragen, was es beispielsweise mit defekten Sektoren machen soll. Ihnen wird nichts anderes übrig bleiben, als die Vorschläge von fsck zu akzeptieren. Sie können sich immerhin die gemeldeten Fehler notieren und haben damit einen Eindruck, wie groß die Schäden sind und ob doch vielleicht eine Datenrücksicherung erforderlich ist.

fsck /dev/hda3

lost+found

Sektoren, die durch die Reparatur oder durch den Schaden nicht mehr zugreifbar sind, werden in das Verzeichnis lost+found geschoben, das auf jeder Partition direkt unter ihrem Wurzelverzeichnis vorhanden ist.

Hat man Anlass zur Vermutung, dass ein Dateisystem nicht konsistent ist, kann man den fsck auch im laufenden Betrieb starten. Allerdings sollte das bei einem mit umount abgehängten Dateisystem durchgeführt werden, da vermieden werden muss, dass andere Benutzer parallel darauf zugreifen. Ist ein Dateisystem betroffen, das man nicht im laufenden Betrieb aushängen kann, muss man in den Single-User Modus wechseln und von dort den fsck starten.

Belegungslisten: df und du

df zeigt die Plattenbelegung

Der Befehl df (disk free) zeigt eine Liste aller Dateisysteme mit deren Platzverbrauch und den Füllgrad in Prozent. Der Befehl ist auch nützlich, um zu sehen, welche Dateisysteme wo eingehängt sind. Man kann sich auch einzelne Dateisysteme ansehen, indem man das Dateisystem als Parameter angibt.

gaston> df
Dateisystem      1k-Blöcke   Benutzt Verfügbar Ben% montiert auf
/dev/hda5          7889920  4150752   3338348  56% /
/dev/hda2           225517     3578    210292   2% /boot
/dev/hda7          6324896  3177260   2826340  53% /home
gaston>

Ältere 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.

du zeigt die Größe eines Verzeichnisses

Der Befehl du (disk used) zeigt die belegten Blöcke der als Argument angegebenen Dateien bzw. Verzeichnisse. Auch hier zeigen ältere Systeme manchmal die Größen in 512 Byte Blöcken an. In den Manpages ist das dokumentiert. Der folgende du wurde im Verzeichnis /var/log durchgeführt.

gaston# du
40      ./news/OLD
176     ./news
428     ./httpd
4       ./uucp
116     ./cups
4       ./vbox
172     ./samba
17728   .
gaston#

Da du alle Verzeichnisse rekursiv durchläuft, bekommt man eine recht lange Liste. Durch die Option -s werden nur die angeforderten Verzeichnisse aufgelistet. Dennoch muss natürlich der Verzeichnisbaum komplett durchgerechnet werden, was eine gewisse Belastung der Maschine darstellen kann. Wer schon immer eine Liste mit der Platzverteilung auf dem Produktionsserver haben wollte, sollte also seine Neugier nicht unbedingt um 11 Uhr am vormittag befriedigen, sondern den Lauf als at-Job in die Nacht legen.

gaston# du -s
17728   .
gaston#

Zuteilung des Plattenplatzes: quota

Quota dienen dazu, jedem Anwender und jeder Gruppe einen bestimmten Plattenspeicher zuzuteilen, der nicht überschritten werden darf. So kann man verhindern, dass eine Aushilfekraft Musikdateien aus dem Internet sammelt und die Finanzbuchhaltung zum Absturz bringt, weil für sie kein Platz mehr auf der Platte ist. Unabhängig von solchen Szenarien gibt es bei gesetzten Quota den psychologischen Effekt, dass die Benutzer merken, dass Plattenspeicher endlich ist. In den meisten Fällen werden sie einmal durchsortieren und überholte Daten löschen, bevor sie beim Administrator um weiteren Speicher bitten. Das wiederum entlastet auch die Datensicherung.

Limits

Mit drei Parametern wird eine Quotagrenze bestimmt: Softlimit, Hardlimit und Gnadenfrist (grace period). Das Softlimit darf zwar überschritten werden, aber nur für eine gewisse Zeit, die als Gnadenfrist bezeichnet wird. Das Hardlimit ist die Grenze, die der Benutzer gar nicht überschreiten darf. Alle drei Parameter gibt es zweimal, jeweils für die Anzahl der Blöcke und die Anzahl der Dateien, genauer die Anzahl der i-nodes.

Zur Installation muss der Kernel die Fähigkeit haben, mit Quota umzugehen. Das kann ggf. ein Neubilden des Kernels zur Folge haben.

/etc/fstab

In der /etc/fstab wird hinterlegt, welche Dateisysteme durch Quota überwacht werden.

/dev/hda3    /mount/hda3       ext2    defaults,usrquota 1 1

quota.user und quota.group

In das Wurzelverzeichnis des Dateisystems müssen nun zwei Dateien gelegt werden. Im Beispiel ist das Wurzelverzeichnis /mount/hda3. Die Dateien heißen quota.user und quota.group. Letztere muss auch dann angelegt werden, wenn, wie in diesem Beispiel, gar keine Groupquota angelegt werden.

touch /mount/hda3/quota.user
touch /mount/hda3/quota.group
chmod 600 /mount/hda3/quota.user
chmod 600 /mount/hda3/quota.group 
mount /dev/hda3 /mount/hda3 -o remount                                        

Der Befehl touch legt eine leere Datei an, wenn noch keine vorhanden ist. Anschließend werden die Rechte der Dateien auf 600 gesetzt. Das ist zwingend, damit nur root diese Dateien lesen und schreiben kann. Ansonsten arbeitet das Quota-System nicht. Zum Schluss wird ein Wiedereinhängen des Dateisystems gestartet, damit der Eintrag in der fstab gelesen wird.

quotacheck

Nun wird ermittelt, welche Benutzer wieviel Platz auf der Platte schon belegt haben. Dazu gibt es das Programm quotacheck.

quotacheck -avug /dev/hda3

Dieser Vorgang dauert eine Weile. Die quota.user wird mit Daten gefüllt. Anschließend kann man die Limits für die Benutzer einstellen.

edquota -u arnold

edquota startet den Standardeditor (meist vi) mit folgenden Einträgen:

Quotas for user arnold:
/dev/hda3: blocks in use: 8117, limits (soft=0, hard=0)
          inodes in use: 470, limits (soft=0, hard=0)

Durch Änderung der Werte in den Klammern werden das Soft- und das Hardlimit des Benutzers für die jeweilige Platte eingestellt.

Einstellen der Gnadenfrist

edquota -t zur Einstellung der Gnadenfrist betrifft alle Benutzer gemeinsam.

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda3: block grace period: 7 day, file grace period: 7 days

Start und Stopp

Mit quotaon -a wird die Überwachung für alle gestartet, mit quotaoff -a wird sie wieder abgeschaltet. Soll die Überwachung auch nach einem Reboot erfolgen, muss der Befehl in einer rc-Datei eingetragen werden.

Ist das Quotasystem aktiv, erhält der Benutzer bei Überschreitung seines Limits eine Meldung am Bildschirm und der Vorgang wird abgebrochen.

Kosten der Kontrolle

Die ständige Überprüfung aller Dateizugriffe darauf, ob eine Grenze überschritten wird, ist natürlich nicht kostenlos. Quota belasten die Performanz der Dateizugriffe. Ist die Zugriffsgeschwindigkeit ein wichtiges Kriterium kann man durch geschicktes Partitionieren leicht erreichen, dass Benutzer nicht den wichtigen Anwendungen den Plattenplatz wegnehmen.

Maximalwerte

Lange Zeit war 2 GByte die Grenze für die maximale Größe einer Datei und die maximale Größe eines Dateisystems. Heute erlauben fast alle UNIX-Derivate größere Dateisysteme. 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. Schreibt das Programm sequentiell in die Datei, wie das beispielsweise bei Protokolldateien der Fall ist, 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. Mit 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 vom Anfang der Datei aus positioniert wird. Dann muss das Programm bereits mit der Absicht geschrieben sein, die 2 GB-Grenze zu durchbrechen. Das ist dann im Allgemeinen auch dokumentiert.

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. Den Parameter kann man ändern, indem man scoadmin startet. Darin findet man den Hardware/Kernel Manager. Als Option wird >>Tune Parameter<< angeboten. Unter der Gruppe >>User and Group configuration<< finden sich zuerst der Parameter NOFILES, der die Anzahl der Dateien pro Prozess bestimmt und als zweites ULIMIT. Nach der Änderung muss unter Hardware/Kernel Manager noch die Option Relink Kernel aufgerufen werden und der Parameter ist korrigiert.

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.

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 Linux Standardinstallation wird die Anzahl der gleichzeitig offenen Dateien auf 1024 begrenzt. Die Einstellung befindet sich in der Datei /usr/src/linux/include/linux/fs.h und heißt NR_FILES. NR_INODES ist um den gleichen Faktor zu erhöhen. Eine Neubildung des Kernels ist notwendig, um den Parameter zu erhöhen. Dieser Wert scheint zunächst hoch. Allerdings kann in einer Serverumgebung mit 200 Benutzern jeder Anwender nur noch 5 Dateien öffnen.

Ansonsten gibt es bei älteren Systemen manchmal eine Begrenzung der Plattenkapazität. So konnte beispielsweise HP-UX bis zur Version 9 nur Platten von maximal 4 GB Größe verwalten.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru
Verlagsrechte bei galileo computing


Homepage (C) Copyright 2002 Arnold Willemer