Kapitel 10. Systemadministration

10.1. Wo befinden sich die Konfigurationsdateien für den Systemstart?
10.2. Wie kann ich am Einfachsten einen Benutzer hinzufügen?
10.3. Warum erhalte ich Meldungen wie “root: not found”, nachdem ich meine crontab geändert habe?
10.4. Wieso meldet mir su(1)you are not in the correct group to su root”, wenn ich mit su root werden will?
10.5. Ich habe einen Fehler in der rc.conf oder einer der anderen Dateien für den Systemstart und jetzt kann ich sie nicht ändern, weil das Dateisystem “read-only” ist. Was kann ich tun?
10.6. Wieso habe ich habe Probleme, meinen Drucker einzurichten?
10.7. Wie kann ich die Tastaturbelegung meines Systems korrigieren?
10.8. Wieso erhalte ich beim Start des Systems Meldungen wie “unknown: <PNP0303> can't assign resources”?
10.9. Wieso funktionieren die Benutzer-Quotas nicht richtig?
10.10. Unterstützt FreeBSD IPC-Grundfunktionen von System V?
10.11. Welchen Mail-Server kann ich an Stelle von sendmail benutzen?
10.12. Was kann ich machen, wenn ich das Rootpasswort vergessen habe?
10.13. Wie verhindere ich, dass das System mit Ctrl+Alt+Delete rebootet werden kann?
10.14. Wie kann ich Textdateien von DOS Systemen auf UNIX® Systemen verwenden?
10.15. Wie beende ich Prozesse namentlich?
10.16. Warum nervt su(1) mich damit, dass ich nicht in der ACL von root bin?
10.17. Wie deinstalliere ich Kerberos?
10.18. Wie füge ich Pseudo-Terminals zum System hinzu?
10.19. Wie lade ich /etc/rc.conf und starte /etc/rc neu, ohne zu rebooten?
10.20. Ich wollte auf das aktuelle -STABLE updaten, und plötzlich läuft hier ein -BETAx, -RC oder -PRERELEASE! Was ist passiert?
10.21. Als ich versucht habe, einen neuen Kernel zu installieren, ist das chflags(1) fehlgeschlagen. Was mache ich jetzt?
10.22. Ich kann die Systemzeit nicht um mehr als eine Sekunde verstellen. Was mache ich jetzt?
10.23. Warum braucht rpc.statd(8) 256 MB Speicher?
10.24. Warum kann ich das Dateiattribut schg nicht löschen?
10.25. Warum funktioniert die .shosts Authentifizierung von SSH in neueren Versionen von FreeBSD nicht mehr?
10.26. Was ist vnlru?
10.27. Was bedeuten die Zustände, die top für Speicherseiten ausgibt?
10.28. Wie viel freien Speicher hat mein System?
10.29. Ich kann /var/empty nicht löschen!

10.1. Wo befinden sich die Konfigurationsdateien für den Systemstart?

/etc/defaults/rc.conf (siehe rc.conf(5)) ist die primäre Konfigurationsdatei. Die Startskripten des Systems, wie /etc/rc und /etc/rc.d (siehe rc(8)) inkludieren diese Datei. Ändern Sie diese Datei nicht! Wenn Sie den Wert einer der in /etc/defaults/rc.conf gesetzten Variablen ändern wollen, fügen Sie die entsprechende Zeile in die Datei /etc/rc.conf ein und ändern die Zeile dort.

Wenn Sie zum Beispiel den mitgelieferten DNS-Server named(8) aktivieren wollen, müssen Sie lediglich das folgende Kommando eingeben:

# echo 'named_enable="YES"' >> /etc/rc.conf

Wenn Sie lokale Server starten wollen, müssen Sie passende Shellskripten im Verzeichnis /usr/local/etc/rc.d/ ablegen. Die Dateien müssen als ausführbar markiert sein und die Dateiberechtigungen 555 besitzen.

10.2. Wie kann ich am Einfachsten einen Benutzer hinzufügen?

Benutzen Sie den Befehl adduser(8) und für kompliziertere Fälle den Befehl pw(8).

Benutzen Sie den Befehl rmuser(8), um einen Benutzer wieder zu löschen. Sie können, wenn nötig. auch pw(8) benutzen.

10.3. Warum erhalte ich Meldungen wie “root: not found”, nachdem ich meine crontab geändert habe?

Die übliche Ursache dieses Problems ist, dass Sie die crontab des Systems (/etc/crontab) geändert und dann mit crontab(1) installiert haben:

# crontab /etc/crontab

Diese Vorgehensweise ist falsch. Die crontab des Systems hat ein anderes Format als die crontabs für die einzelnen Benutzer, die mit crontab(1) aktualisiert werden (genauere Informationen über die Unterschiede erhalten Sie in crontab(5)).

Wenn Sie so vorgegangen sind, ist die zweite crontab einfach nur eine Kopie von /etc/crontab, allerdings im falschen Format. Löschen Sie sie mit dem folgenden Befehl:

# crontab -r

Wenn Sie /etc/crontab wieder ändern müssen, sollten Sie einfach gar nichts tun, um cron(8) über die Änderung zu informieren, er erkennt die Änderung automatisch.

Wenn Sie ein Kommando jeden Tag, jede Woche oder jeden Monat ausführen lassen wollen, ist es wahrscheinlich einfacher, wenn Sie entsprechende Shell-Scripte in /usr/local/etc/periodic ablegen. Diese werden dann von periodic(8) zusammen mit den anderen regelmäßigen cron Tätigkeiten ausgeführt.

Der eigentliche Grund für den Fehler ist die Tatsache, dass die crontab des Systems ein zusätzliches Feld enthält; dieses Feld gibt an, mit welcher Benutzerkennung der Befehl ausgeführt werden soll. In der mitgelieferten crontab ist das bei allen Einträgen die Benutzerkennung root. Wenn diese Datei als die crontab des Benutzers username (die nicht mit der crontab des Systems identisch ist) verwendet wird, hält cron(8) die Zeichenkette root für den Namen des zu startenden Programmes, aber dieses Programm gibt es nicht.

10.4. Wieso meldet mir su(1)you are not in the correct group to su root”, wenn ich mit su root werden will?

Das ist ein Sicherheits-Feature. Wenn Sie mit su zum Account root (oder jedem anderen Account mit Super-User-Privilegien) wechseln wollen, müssen Sie ein Mitglied der Gruppe wheel sein. Wenn es dieses Feature nicht gäbe, könnte jeder, der einen Account auf dem System hat und zufällig das Passwort für root erfährt, mit Super-User-Rechten auf das System zugreifen. Durch dieses Feature ist die Lage anders, wenn Sie nicht Mitglied von wheel sind, können Sie nicht einmal versuchen, dass Passwort einzugeben.

Um einem Benutzer zu erlauben, mit su root zu werden, müssen Sie ihn nur in die Gruppe wheel eintragen.

10.5. Ich habe einen Fehler in der rc.conf oder einer der anderen Dateien für den Systemstart und jetzt kann ich sie nicht ändern, weil das Dateisystem “read-only” ist. Was kann ich tun?

Starten Sie das System mittels boot -s an der Loader-Eingabeaufforderung neu, um in den Single-User-Modus zu gelangen. Wenn Sie aufgefordert werden, den Pfadnamen der Shell einzugeben, drücken Sie einfach Enter. Geben Sie danach mount -urw / ein, um das Root-Dateisystem im Schreib/Lese-Modus zu mounten. Sie werden wahrscheinlich auch mount -a -t ufs ausführen müssen, um das Dateisystem mit Ihrem Lieblingseditor zu mounten. Wenn Ihr Lieblingseditor auf einem Netzwerklaufwerk liegt, müssen Sie entweder das Netzwerk von Hand konfigurieren oder einen Editor benutzen, der auf einem lokalen Laufwerk vorhanden ist, z.B. ed(1).

Wenn Sie einen bildschirmorientierten Editor wie zum Beispiel vi(1) oder emacs(1) benutzen wollen, werden Sie auch den Befehl export TERM=cons25 ausführen müssen, damit diese Editoren die richtigen Einstellungen aus der Datenbank termcap(5) übernehmen.

Sobald Sie diese Schritte ausgeführt, können Sie den Fehler in der /etc/rc.conf ganz normal beheben. Die Fehlermeldungen, die Ihnen unmittelbar nach den Startmeldungen des Kernels angezeigt wurden, sollten Ihnen die Nummer der Zeile mit dem Fehler melden.

10.6. Wieso habe ich habe Probleme, meinen Drucker einzurichten?

Lesen sie den Handbucheintrag über Drucker. Es sollte die meisten Ihrer Probleme behandeln.

Einige Drucker benötigen einen auf dem Rechner laufenden Treiber, um drucken zu können. Diese so genannten “WinPrinter” oder “GDI-Drucker” werden von FreeBSD nicht unterstützt und an diesem Zustand wird sich wohl auch nichts ändern. Wenn Ihr Drucker nicht unter DOS oder Windows® verwendet werden kann, handelt es sich um einen “WinPrinter” und wird in der Regel auch nicht unter FreeBSD funktionieren. Ihre einzige Chance, einen dieser Drucker benutzen können, ist der Port ports/print/pnm2ppa.

10.7. Wie kann ich die Tastaturbelegung meines Systems korrigieren?

Informationen dazu finden Sie im Kapitel länderspezifische Einstellungen des Handbuchs, insbesondere im Abschnitt Konfiguration der Konsole.

10.8. Wieso erhalte ich beim Start des Systems Meldungen wie “unknown: <PNP0303> can't assign resources”?

Die nachfolgende Erklärung stammt aus einer Mail auf der Mailingliste FreeBSD-CURRENT.

 

Die Geräte, für die “can't assign resources”-Meldungen ausgegeben werden, sind “Legacy ISA”Geräte, für die ein nicht PNP-fähiger Treiber in den Kernel eingebunden wurde. Dabei handelt es sich um Geräte wie den Tastaturkontroller, den programmierbaren Interrupt-Kontroller und diverse andere Standardkomponenten. Die Ressourcen können nicht zugewiesen werden, weil es schon einen Treiber gibt, der diese Ressourcen benutzt.

 
--Garrett Wollman , 24 April 2001  

10.9. Wieso funktionieren die Benutzer-Quotas nicht richtig?

  • Es kann sein, dass Ihr Kernel nicht für den Einsatz von Quotas konfiguriert ist. Damit Sie mit Quotas arbeiten können, müssen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei aufnehmen und den Kernel neu bauen:

    options QUOTA
    

    Weitere Informationen zum Einsatz von Quotas finden Sie im entsprechenden Abschnitt des Handbuchs.

  • Benutzen Sie keine Quotas für /.

  • Erstellen Sie die Quotas-Datei in dem Dateisystem, für das die Quotas gelten sollen, z.B.:

    File System Quota file
    /usr /usr/admin/quotas
    /home /home/admin/quotas

10.10. Unterstützt FreeBSD IPC-Grundfunktionen von System V?

Ja, FreeBSD unterstützt IPC im Stil von System V einschließlich gemeinsamen Speicher, Nachrichten und Semaphoren bereits mit dem GENERIC-Kernel. Wenn Sie einen angepassten Kernel verwenden, müssen Sie die folgenden Zeilen in Ihre Kernelkonfigurationsdatei einfügen:


options    SYSVSHM
options    SYSVSHM          # enable shared memory
options    SYSVSEM          # enable for semaphores
options    SYSVMSG          # enable for messaging
         

Danach kompilieren und installieren Sie den neuen Kernel.

10.11. Welchen Mail-Server kann ich an Stelle von sendmail benutzen?

sendmail ist zwar der Mail-Server, der bei FreeBSD standardmäßig installiert wird, aber Sie können Ihn problemlos durch einen anderen MTA (z.B. aus den Ports) ersetzen.

In der Port-Sammlung gibt es bereits viele verschiedene MTAs, mail/exim, mail/postfix, mail/qmail, sowie mail/zmailer sind einige der beliebteren Alternativen.

Konkurrenz belebt das Geschäft und die Tatsache, dass Sie die Qual der Wahl haben, ist ein Vorteil. Daher sollten Sie Fragen wie “Ist sendmail besser als qmail?” besser nicht auf den Mailinglisten stellen. Wenn Sie dieses Thema interessiert, sollten sie zunächst die Archive durchsehen. Die Vorteile und Nachteile jedes einzelnen der verfügbaren MTAs sind schon mehrere Male bis zur Erschöpfung diskutiert worden.

10.12. Was kann ich machen, wenn ich das Rootpasswort vergessen habe?

Keine Panik! Starten Sie Ihr System neu und geben Sie boot -s an der Eingabeaufforderung Boot: ein, um in den Single-User-Modus zu gelangen. Bei der Frage danach, welche Shell benutzt werden soll, drücken Sie einfach Enter. Nun erscheint die Eingabeaufforderung #. Geben Sie mount -urw / ein, um Ihr Root-Dateisystem für Lese- und Schreibzugriffe zu remounten und dann mount -a, um alle Dateisysteme zu remounten. Mit passwd root können Sie das Rootpasswort ändern und mit exit(1) können Sie mit dem Booten fortfahren.

Anmerkung: Wenn Sie immer noch dazu aufgefordert werden, das root Passwort beim Betreten des Single-User-Modus einzugeben, bedeutet das, dass die Konsole als insecure in /etc/ttys markiert wurde. In diesem Fall ist es notwendig, von einem FreeBSD Installationsmedium zu booten, die Fixit-Shell auszuwählen und die oben beschriebenen Befehle einzugeben.

Anmerkung: Wenn Sie ihre root Partition im Single-User-Modus nicht mounten können, liegt es möglicherweise daran, dass die Partionen verschlüsselt sind und es damit unmöglich ist, sie ohne die dazugehörigen Schlüssel zu mounten. Ihre Chancen hängen von der jeweiligen Implementierung ab. Für weitere Informationen lesen Sie den Abschnittt über verschlüsselte Partitionen im FreeBSD Handbuch.

10.13. Wie verhindere ich, dass das System mit Ctrl+Alt+Delete rebootet werden kann?

Falls Sie syscons(4) (der Standard-Treiber für die Konsole) benutzen, fügen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei ein:

options SC_DISABLE_REBOOT

Alternativ können Sie auch die folgende sysctl(8)-Variable setzen (die aktiviert wird, ohne dass Sie Ihr System dazu neu starten oder einen angepassten Kernel erstellen müssen):

# sysctl hw.syscons.kbd_reboot=0

Anmerkung: Die beiden oben genannten Methoden schliessen sich gegenseitig aus: sysctl(8) existiert nicht, wenn Sie ihren Kernel mit der Option SC_DISABLE_REBOOT bauen.

Falls Sie den pcvt(4) Konsolentreiber verwenden, fügen Sie die folgende Zeile in die Kernelkonfigurationsdatei hinzu und bauen Sie einen neuen Kernel:

options PCVT_CTRL_ALT_DEL

10.14. Wie kann ich Textdateien von DOS Systemen auf UNIX® Systemen verwenden?

Benutzen Sie diesen Perl-Befehl:

% perl -i.bak -npe 's/\r\n/\n/g' file(s)

Wobei file(s) eine oder mehrere zu verarbeitende(n) Datei(en) ist/sind. Die Änderungen erfolgen in der Originaldatei, die zuvor mit der Erweiterung .bak gesichert wird.

Alternativ können Sie den Befehl tr(1) benutzen:

% tr -d '\r' < dos-text-file > unix-file

dos-text-file ist die Datei, die den Text im DOS-Format enthält und unix-file wird die konvertierte Ausgabe enthalten. Diese Möglichkeit könnte etwas schneller sein, als die Benutzung von perl.

Die Verwendung des Ports converters/dosunix aus der Ports-Sammlung stellt eine weitere Möglichkeit dar, DOS-Textdateien neu zu formatieren. Konsultieren Sie die Dokumentation für weitere Informationen.

10.15. Wie beende ich Prozesse namentlich?

Benutzen Sie pkill(1).

10.16. Warum nervt su(1) mich damit, dass ich nicht in der ACL von root bin?

Der Fehler stammt vom verteilten Authentifizierungssystem Kerberos. Das Problem ist nicht ernsthaft, aber störend. Sie können entweder su mit der Option -K benutzen, oder Kerberos deinstallieren, wie in der nächsten Frage beschrieben.

10.17. Wie deinstalliere ich Kerberos?

Um Kerberos aus dem System zu entfernen, müssen Sie die base-Distribution der von Ihnen benutzten RELEASE neu installieren. Wenn Sie die CD-ROM besitzen, können Sie sie mounten (wir nehmen an, unter /cdrom) und folgende Befehle ausführen:

# cd /cdrom/base
# ./install.sh

Alternativ können Sie mit der Option NO_KERBEROS in der /etc/make.conf ein make world durchführen.

10.18. Wie füge ich Pseudo-Terminals zum System hinzu?

Wenn Sie viele Benutzer von telnet, ssh, X oder screen haben, werden Ihnen eventuell die Pseudo-Terminals ausgehen. Standardmässig unterstützt FreeBSD 6.2 und vorherige Versionen 256 Pseudo-Terminals, während FreeBSD 6.3 und höher 512 Pseudo-Terminals zur Verfügung stellt.

Tipp: Wenn nötig, können mehr Pseudo-Terminals hinzugefügt werden. Allerdings muss dafür die C-Blibliothek, der Kernel und /etc/ttys erweitert werden. Zum Beispiel erhöht http://www.freebsd.org/~jhb/patches/pty_1152.patch die Anzahl an Pseudo-Terminals auf 1152. Beachten Sie, dass die Erweiterung nur für FreeBSD 6.3 oder höher problemlos funktioniert.

10.19. Wie lade ich /etc/rc.conf und starte /etc/rc neu, ohne zu rebooten?

Gehen Sie in den Single-User-Modus und dann zurück in den Multi-User-Modus.

Geben Sie auf der Konsole folgendes ein:

# shutdown now
(Hinweis: ohne -r oder -h)
# return
# exit

10.20. Ich wollte auf das aktuelle -STABLE updaten, und plötzlich läuft hier ein -BETAx, -RC oder -PRERELEASE! Was ist passiert?

Kurze Antwort: Das ist nur ein anderer Name. RC ist die Abkürzung für “Release Candidate”. Es bedeutet, dass eine neue Release bevorsteht. Und -PRERELEASE bedeutet bei FreeBSD normalerweise, dass die Sourcen zur Vorbereitung auf eine Release “eingefroren” wurden (in einigen Releases wurde -BETA anstelle von -PRERELEASE verwendet).

Ausführliche Antwort: Bei FreeBSD gibt es zwei Quellen für Releases. Die Major Releases wie 7.0-RELEASE und 8.0-RELEASE werden aus dem aktuellen Stand des Hauptzweiges der Entwicklung (besser und kürzer als -CURRENT bekannt) erzeugt. Minor Releases wie 6.3-RELEASE oder 5.2-RELEASE stammen aus dem aktiven -STABLE Zweig. Seit 4.3-RELEASE gibt es es nun auch einen eigenen Zweig für jede Release, der für die Leute gedacht ist, die ein sehr konservativ weiterentwickeltes System benötigen (im Normalfall also nur Updates aus dem Bereich Sicherheit).

Bevor in einem Zweig eine Release erfolgt, muss in diesem Zweig ein bestimmter Prozess ablaufen. Ein Teil dieses Prozesses ist der “code freeze”, der Stop der Weiterentwicklung. Sobald dieser Schritt erfolgt ist, wird der Name des Zweiges geändert, um anzuzeigen, dass demnächst eine Release erfolgen wird. Wenn der Zweig zum Beispiel 6.2-STABLE genannt wurde, wird der Name in 6.3-PRERELEASE geändert, um dies zu verdeutlichen. Weiterhin ist das ein Zeichen, dass jetzt besonders intensiv getestet werden sollte. In dieser Phase können Fehler im Sourcecode noch korrigiert werden. Wenn der Sourcecode so weit “gereift” ist, dass eine Release erstellt werden kann, wird der Name in 6.3-RC geändert, um genau dies anzuzeigen. In dieser Phase können nur noch extrem wichtige Korrekturen aufgenommen werden. Sobald die Release (in diesem Beispiel 6.3-RELEASE) erfolgt ist, wird der Zweig in 6.3-STABLE umbenannt.

Weitere Informationen über Versionsnummern und die verschiedenen Entwicklungszweige enthält der Artikel Release Engineering.

10.21. Als ich versucht habe, einen neuen Kernel zu installieren, ist das chflags(1) fehlgeschlagen. Was mache ich jetzt?

Kurze Antwort: Ihre Sicherheitseinstellung (der securelevel) ist wahrscheinlich größer als 0. Sie müssen das System neu starten und den Kernel im Single-User-Modus installieren.

Ausführliche Antwort: Wenn die Sicherheitseinstellung größer als 0 ist, erlaubt Ihnen FreeBSD nicht, die Systemflags zu ändern. Um den aktuellen Securelevel zu ermitteln, können Sie das folgende Kommando benutzen:

# sysctl kern.securelevel

Sie können die Sicherheitseinstellung nicht verringern. Sie müssen das System neu starten und den Kernel im Single-User-Modus installieren oder die Sicherheitseinstellung in /etc/rc.conf ändern und dann das System neu starten. Weitere Details zu securelevel erhalten Sie in init(8), weitere Informationen zur rc.conf erhalten Sie in /etc/defaults/rc.conf und rc.conf(5).

10.22. Ich kann die Systemzeit nicht um mehr als eine Sekunde verstellen. Was mache ich jetzt?

Kurze Antwort: Ihre Sicherheitseinstellung (der securelevel) ist wahrscheinlich größer als 1. Sie müssen das System neu starten und die Systemzeit im Single-User-Modus verstellen.

Ausführliche Antwort: Wenn die Sicherheitseinstellung größer als 1 ist, erlaubt Ihnen FreeBSD nicht, die Systemzeit zu ändern. Um den aktuellen Securelevel zu ermitteln, können Sie das folgende Kommando benutzen:

# sysctl kern.securelevel

Sie können die Sicherheitseinstellung nicht verringern, Sie müssen das System neu starten und die Systemzeit im Single-User-Modus ändern oder die Sicherheitseinstellung in /etc/rc.conf ändern und dann das System neu starten. Weitere Details zu securelevel erhalten Sie in init(8), weitere Informationen zur rc.conf erhalten Sie in /etc/defaults/rc.conf und rc.conf(5).

10.23. Warum braucht rpc.statd(8) 256 MB Speicher?

Nein, das Programm hat keinen Fehler und es verbraucht auch nicht 256 MB Speicher. rpc.statd projiziert nur einen übertrieben großen Speicherbereich in seinen eigenen Adressraum. Von einem rein technischen Standpunkt aus ist das nichts verwerfliches, allerdings verwirrt es Programme wie top(1) und ps(1).

rpc.statd(8) projiziert seine Statusdatei (die in /var liegt) in seinen Adressraum. Um die Probleme zu vermeiden, die bei einer Vergrößerung dieser Projektion entstehen könnten, wird gleich ein möglichst großer Speicherbereich benutzt. Dies kann man sehr schön im Sourcecode sehen: Die Längenangabe beim Aufruf von mmap(2) ist 0x10000000, ein sechzehntel des Adressraums bei IA32, oder genau 256 MByte.

10.24. Warum kann ich das Dateiattribut schg nicht löschen?

Sie betreiben Ihr System mit einer erhöhten Sicherheitsstufe. Senken Sie die Sicherheitsstufe und versuchen Sie es dann noch einmal. Weitere Informationen erhalten Sie im FAQ Eintrag über Sicherheitsstufen und in der Online-Hilfe init(8).

10.25. Warum funktioniert die .shosts Authentifizierung von SSH in neueren Versionen von FreeBSD nicht mehr?

Die .shosts Authentifizierung funktioniert nicht mehr, weil ssh(1) in neueren Versionen von FreeBSD nicht mehr SUID-root installiert wird. Um dieses Problem zu “lösen”, gibt es die folgenden Möglichkeiten:

  • Um das Problem für immer zu lösen, müssen Sie in /etc/make.conf die Variable ENABLE_SUID_SSH auf true setzen und danach ssh(1) neu übersetzen (oder make world) ausführen.

  • Übergangsweise können Sie auch die Dateirechte von /usr/bin/ssh auf 4555 setzen, indem Sie den Befehl chmod 4555 /usr/bin/ssh als root ausführen. Fügen Sie anschließend ENABLE_SUID_SSH =true in die Datei /etc/make.conf ein, damit diese Änderung erhalten bleibt, wenn Sie das nächste Mal make world ausführen.

10.26. Was ist vnlru?

vnlru schreibt vnodes auf Platte und gibt sie wieder frei, falls das System die Grenzwert kern.maxvnodes erreicht. Dieser Thread des Kernel tut meistens gar nichts und wird nur aktiv, wenn Sie extrem viel RAM haben und gleichzeitig auf viele zehntausende kleine Dateien zugreifen.

10.27. Was bedeuten die Zustände, die top für Speicherseiten ausgibt?

Speicherseiten werden vom Kernel in verschiedenen Listen verwaltet:

  • Active: Seiten, die vor Kurzem benutzt wurden.

  • Inactive: Seiten, die länger nicht benutzt wurden.

  • Cache: Meistens Seiten, die vorher im Zustand Inactive waren und noch gültige Daten enthalten. Diese Seiten können sofort in ihrem alten Kontext oder in einem neuen Kontext verwendet werden. Wenn eine Seite unverändert (clean) ist, kann ein Zustandswechsel direkt von Active nach Cache erfolgen. Ob dieser Zustandswechsel möglich ist, wird durch die Seitenersetzungsstrategie bestimmt, die der Entwickler des VM-Systems festgelegt hat.

  • Free: Seiten, die keine Daten enthalten. Diese Seiten können sofort benutzt werden, wenn Seiten im Zustand Cache nicht benutzt werden können. Seiten im Zustand Free können auch während eines Interrupts angefordert werden.

  • Wired: Seiten, die fest im Speicher liegen und nicht ausgelagert werden können. Normalerweise werden solche Seiten vom Kernel benutzt, manchmal werden Sie aber auch für spezielle Zwecke von Prozessen verwendet.

Seiten im Zustand Inactive werden oft auf Plattenspeicher geschrieben (sozusagen ein sync des VM-Systems). Wenn die CPU erkennen kann, das eine Seite unmodifiziert (clean) ist, kann auch eine Active-Seite auf den Plattenspeicher ausgeschrieben werden. In bestimmten Situationen ist es von Vorteil, wenn ein Block von VM-Seiten, unabhängig von seinem Zustand, ausgeschrieben werden kann. Die Inactive-Liste enthält wenig benutzte Seiten, die ausgeschrieben werden könnten. Seiten im Zustand Cached sind schon ausgeschrieben und stehen Prozessen für die Verwendung im alten oder in einem neuen Kontext zur Verfügung. Seiten im Zustand Cache sind nicht ausreichend geschützt und können während Unterbrechungen nicht benutzt werden.

Die eben beschriebene Behandlung von Speicherseiten kann durch weitere Zustände (wie das das Busy-Flag) verändert werden.

10.28. Wie viel freien Speicher hat mein System?

Es gibt verschiedene Arten von “freiem Speicher”. Eine Art ist die Speichermenge, die sofort, ohne etwas auszulagern, zur Verfügung steht. Der gesamte VM-Bereich ist eine weitere Art des “freien Speichers”. Die Betrachtung ist komplex, hängt aber von der Größe des Swap-Bereichs und der Größe des Arbeitsspeichers ab. Es gibt weitere Definitionen für “freien Speicher”, die aber alle relativ nutzlos sind. Wichtig ist hingegen, dass wenig Seiten ausgelagert werden (paging) und der Swap-Bereich ausreichend groß ist.

10.29. Ich kann /var/empty nicht löschen!

Das Verzeichnis /var/empty wird von sshd(8) benötigt, wenn es mit “Privilege Separation” läuft. Das Verzeichnis /var/empty ist leer, gehört root und ist durch das Dateiattribut schg geschützt.

Wir empfehlen Ihnen, das Verzeichnis zu belassen. Sollten Sie es aber trotzdem löschen wollen, müssen Sie zuerst das schg-Attribut entfernen. Schauen Sie sich dazu die Hilfeseite chflags(1) an und beachten Sie die Antwort auf die Frage wie das schg-Attribut entfernt wird.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.