aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/handbook/config/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'de_DE.ISO8859-1/books/handbook/config/chapter.sgml')
-rw-r--r--de_DE.ISO8859-1/books/handbook/config/chapter.sgml3538
1 files changed, 0 insertions, 3538 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/config/chapter.sgml b/de_DE.ISO8859-1/books/handbook/config/chapter.sgml
deleted file mode 100644
index 888343cc26..0000000000
--- a/de_DE.ISO8859-1/books/handbook/config/chapter.sgml
+++ /dev/null
@@ -1,3538 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
-<!--
- The FreeBSD Documentation Project
- The FreeBSD German Documentation Project
-
- $FreeBSD$
- $FreeBSDde: de-docproj/books/handbook/config/chapter.sgml,v 1.151 2011/12/19 14:55:31 bcr Exp $
- basiert auf: 1.248
--->
-
-<chapter id="config-tuning">
- <chapterinfo>
- <authorgroup>
- <author>
- <firstname>Chern</firstname>
- <surname>Lee</surname>
- <contrib>Geschrieben von </contrib>
- </author>
- </authorgroup>
- <authorgroup>
- <author>
- <firstname>Mike</firstname>
- <surname>Smith</surname>
- <contrib>Nach einem Tutorium von </contrib>
- </author>
- </authorgroup>
- <authorgroup>
- <author>
- <firstname>Matt</firstname>
- <surname>Dillon</surname>
- <contrib>Basiert ebenfalls auf tuning(7) von </contrib>
- </author>
- </authorgroup>
- <authorgroup>
- <author>
- <firstname>Martin</firstname>
- <surname>Heinen</surname>
- <contrib>Übersetzt von </contrib>
- </author>
- </authorgroup>
- </chapterinfo>
-
- <title>Konfiguration und Tuning</title>
-
- <sect1 id="config-synopsis">
- <title>Übersicht</title>
-
- <indexterm><primary>System-Konfiguration</primary></indexterm>
- <indexterm><primary>System-Optimierung</primary></indexterm>
-
- <para>Ein korrekt konfiguriertes System kann die Arbeit,
- die bei der zukünftigen Pflege und bei Migrationen des Systems
- entsteht, erheblich reduzieren. Dieses Kapitel beschreibt die
- Konfiguration von &os; sowie Maßnahmen zur Leistungssteigerung
- von &os;-Systemen.</para>
-
- <para>Nachdem Sie dieses Kapitel durchgearbeitet haben,
- werden Sie Folgendes wissen:</para>
-
- <itemizedlist>
- <listitem>
- <para>Wie Sie effizient Dateisysteme und
- Swap-Partitionen auf Ihrer Festplatte einrichten.</para>
- </listitem>
- <listitem>
- <para>Die Grundlagen der Konfiguration mit
- <filename>rc.conf</filename> und des Systems zum Starten
- von Anwendungen in <filename
- class="directory">/usr/local/etc/rc.d</filename>.</para>
- </listitem>
- <listitem>
- <para>Wie Sie Netzwerkkarten konfigurieren und testen.</para>
- </listitem>
- <listitem>
- <para>Wie Sie virtuelle Hosts und Netzwerkgeräte
- konfigurieren.</para>
- </listitem>
- <listitem>
- <para>Wie Sie die verschiedenen Konfigurationsdateien
- in <filename class="directory">/etc</filename> benutzen.</para>
- </listitem>
- <listitem>
- <para>Wie Sie mit <command>sysctl</command>-Variablen &os;
- einstellen können.</para>
- </listitem>
- <listitem>
- <para>Wie Sie die Platten-Performance einstellen und Kernel-Parameter
- modifizieren können.</para>
- </listitem>
- </itemizedlist>
-
- <para>Bevor Sie dieses Kapitel lesen, sollten Sie</para>
- <itemizedlist>
- <listitem>
- <para>die Grundlagen von &unix; und &os; (<xref linkend="basics"/>)
- verstehen.</para>
- </listitem>
- <listitem>
- <para>Damit vertraut sein, wie Sie einen Kernel konfigurieren
- und kompilieren (<xref linkend="kernelconfig"/>).</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="configtuning-initial">
- <title>Vorbereitende Konfiguration</title>
-
- <sect2>
- <title>Layout von Partitionen</title>
-
- <indexterm><primary>Layout von Partitionen</primary></indexterm>
- <indexterm><primary><filename
- class="directory">/etc</filename></primary></indexterm>
- <indexterm><primary><filename
- class="directory">/var</filename></primary></indexterm>
- <indexterm><primary><filename
- class="directory">/usr</filename></primary></indexterm>
-
- <sect3>
- <title>Partitionen</title>
-
- <para>Wenn Sie Dateisysteme mit &man.bsdlabel.8; oder
- &man.sysinstall.8; anlegen, sollten Sie beachten, dass
- Festplatten auf Daten in den äußeren Spuren
- schneller zugreifen können als auf Daten in den
- inneren Spuren. Daher sollten die kleineren oft benutzten
- Dateisysteme, wie das Root-Dateisystem oder die Swap-Partition,
- an den äußeren Rand der Platte gelegt werden.
- Die größeren Partitionen wie <filename
- class="directory">/usr</filename> sollten in die inneren Bereiche
- gelegt werden. Es empfiehlt sich, die Partitionen in einer
- ähnlichen Reihenfolge wie Root-Partition, Swap, <filename
- class="directory">/var</filename> und <filename
- class="directory">/usr</filename> anzulegen.</para>
-
- <para>Die Größe der <filename
- class="directory">/var</filename>-Partition ist abhängig vom
- Zweck der Maschine. Das <filename
- class="directory">/var</filename>-Dateisystem enthält
- hauptsächlich Postfächer, den Spoolbereich zum Drucken und
- Logdateien. Abhängig von der Anzahl der Systembenutzer und der
- Aufbewahrungszeit für Logdateien, können gerade
- die Postfächer und Logdateien zu ungeahnten Größen
- wachsen. Die meisten Benutzer werden selten mehr als etwa ein
- Gigabyte in <filename class="directory">/var</filename>
- benötigen.</para>
-
- <note>
- <para>Ein paar Mal wird es vorkommen, dass viel Festplattenspeicher
- in <filename class="directory">/var/tmp</filename> gebraucht
- wird. Wenn neue Software mit &man.pkg.add.1; installiert wird,
- extrahieren die Paketwerkzeuge eine vorübergehende Kopie der
- Pakete unter <filename class="directory">/var/tmp</filename>. Die
- Installation grosser Softwarepakete wie
- <application>Firefox</application>,
- <application>Openoffice</application> oder
- <application>LibreOffice</application> kann sich wegen zu wenig
- Speicherplatz in <filename class="directory">/var/tmp</filename>
- als trickreich herausstellen.</para>
- </note>
-
- <para>Die <filename class="directory">/usr</filename>-Partition
- enthält viele der Hauptbestandteile des Systems, dazu
- gehöhren die &man.ports.7;-Sammlung (empfohlen) und die Quellen
- (optional). Sowohl die Ports als auch die Quellen des Basissystems
- sind zum Zeitpunkt der Installation optional, trotzdem sollten Sie
- mindestens zwei&nbsp;Gigabyte für diese Partition
- vorsehen.</para>
-
- <para>Wenn Sie die Größe der Partitionen festlegen,
- beachten Sie bitte das Wachstum Ihres Systems. Wenn Sie den
- Platz auf einer Partition vollständig aufgebraucht haben,
- eine andere Partition aber kaum benutzen, kann die Handhabung des
- Systems schwierig werden.</para>
-
- <note><para>Die automatische Partitionierung von &man.sysinstall.8;
- mit <literal>Auto-defaults</literal> legt manchmal zu kleine
- <filename class="directory">/</filename> und <filename
- class="directory">/var</filename>-Partition an. Partitionieren Sie
- weise und großzügig.</para></note>
- </sect3>
-
- <sect3 id="swap-design">
- <title>Swap Partition</title>
-
- <indexterm>
- <primary>Swap-Partition</primary>
- <secondary>Größe</secondary>
- </indexterm>
- <indexterm><primary>Swap-Partition</primary></indexterm>
-
- <para>Als Daumenregel sollten Sie doppelt soviel Speicher
- für die Swap-Partition vorsehen, als Sie Hauptspeicher
- haben. Verfügt die Maschine beispielsweise über
- 128&nbsp;Megabyte Hauptspeicher, sollten Sie 256&nbsp;Megabyte
- für den Swap-Bereich vorsehen. Systeme mit weniger Speicher
- werden wahrscheinlich mit viel mehr Swap mehr leisten. Es
- wird nicht empfohlen, weniger als 256&nbsp;Megabyte Swap einzurichten.
- Außerdem sollten Sie künftige Speichererweiterungen
- beachten, wenn Sie die Swap-Partition einrichten. Die
- VM-Paging-Algorithmen im Kernel sind so eingestellt, dass
- Sie am besten laufen, wenn die Swap-Partition mindestens
- doppelt so groß wie der Hauptspeicher ist. Zu wenig
- Swap kann zu einer Leistungsverminderung im
- <foreignphrase>VM page scanning</foreignphrase>
- Code führen, sowie Probleme verursachen, wenn Sie später
- mehr Speicher in Ihre Maschine bauen.</para>
-
- <para>Auf größeren Systemen mit mehreren SCSI-Laufwerken
- (oder mehreren IDE-Laufwerken an unterschiedlichen Controllern)
- empfehlen wir Ihnen, Swap-Bereiche auf bis zu
- vier Laufwerken einzurichten. Diese Swap-Partitionen sollten
- ungefähr dieselbe Größe haben. Der Kernel
- kann zwar mit beliebigen Größen umgehen, aber
- die internen Datenstrukturen skalieren bis zur vierfachen
- Größe der größten Partition. Ungefähr
- gleich große Swap-Partitionen erlauben es dem Kernel,
- den Swap-Bereich optimal über die Laufwerke zu verteilen.
- Große Swap-Bereiche, auch wenn sie nicht oft gebraucht
- werden, sind nützlich, da sich ein speicherfressendes
- Programm unter Umständen auch ohne einen Neustart des Systems
- beenden lässt.</para>
- </sect3>
-
- <sect3>
- <title>Warum partitionieren?</title>
-
- <para>Gegen eine einzelne Partition sprechen mehrere Gründe.
- Jede Partition hat im Betrieb unterschiedliche Eigenschaften
- und die Trennung der Partitionen erlaubt es, die Dateisysteme
- an diese Eigenschaften anzupassen. Die Root- und <filename
- class="directory">/usr</filename>-Partitionen weisen meist nur
- lesende Zugriffe auf, während <filename
- class="directory">/var</filename> und <filename
- class="directory">/var/tmp</filename> hauptsächlich
- beschrieben werden.</para>
-
- <para>Indem Sie ein System richtig partitionieren, verhindern
- Sie, dass eine Fragmentierung in den häufig beschriebenen
- Partitionen auf die meist nur gelesenen Partitionen
- übergreift. Wenn Sie die häufig beschriebenen
- Partitionen an den Rand der Platte, legen, dann wird die
- I/O-Leistung diesen Partitionen steigen.
- Die I/O-Leistung ist natürlich auch für große
- Partitionen wichtig, doch erzielen Sie eine größere
- Leistungssteigerung, wenn Sie <filename
- class="directory">/var</filename> an den Rand der Platte legen.
- Schließlich sollten Sie noch die Stabilität des Systems
- beachten. Eine kleine Root-Partition, auf die meist nur lesend
- zugegriffen wird, überlebt einen schlimmen Absturz
- wahrscheinlich eher als eine große Partition.</para>
- </sect3>
- </sect2>
-
- </sect1>
-
- <sect1 id="configtuning-core-configuration">
- <title>Basiskonfiguration</title>
-
- <indexterm>
- <primary>rc-Dateien</primary>
- <secondary><filename>rc.conf</filename></secondary>
- </indexterm>
-
- <para>Informationen zur Systemkonfiguration sind hauptsächlich
- in <filename>/etc/rc.conf</filename>, die meist beim Start
- des Systems verwendet wird, abgelegt. Der Name der Datei zeigt
- ihren Zweck an: Sie enthält die Konfigurationen für
- die <filename>rc*</filename> Dateien.</para>
-
- <para>In <filename>rc.conf</filename> werden die Vorgabewerte aus
- <filename>/etc/defaults/rc.conf</filename> überschrieben.
- Die Vorgabedatei sollte nicht nach <filename
- class="directory">/etc</filename> kopiert werden, da sie die
- Vorgabewerte und keine Beispiele enthält. Jede systemspezifische
- Änderung wird in <filename>rc.conf</filename> vorgenommen.</para>
-
- <para>Um den administrativen Aufwand gering zu halten, existieren
- in geclusterten Anwendungen mehrere Strategien,
- globale Konfigurationen von systemspezifischen Konfigurationen
- zu trennen. Der empfohlene Weg hält die globale Konfiguration
- in einer separaten Datei z.B. <filename>/etc/rc.conf.local</filename>.
- Zum Beispiel so:</para>
-
- <itemizedlist>
- <listitem><para><filename>/etc/rc.conf</filename>:</para>
-
- <programlisting>sshd_enable="YES"
-keyrate="fast"
-defaultrouter="10.1.1.254"</programlisting></listitem>
-
- <listitem><para><filename>/etc/rc.conf.local</filename>:</para>
-
- <programlisting>hostname="node1.example.org"
-ifconfig_fxp0="inet 10.1.1.1/8"</programlisting></listitem>
- </itemizedlist>
-
- <para>Die <filename>rc.conf</filename> Datei kann dann auf jedes
- System mit <command>rsync</command> oder einem ähnlichen Programm
- verteilt werden, während die <filename>rc.conf.local</filename>
- Datei dabei systemspezifisch bleibt.</para>
-
- <para>Bei einem Upgrade des Systems mit &man.sysinstall.8; oder
- <command>make world</command> wird <filename>rc.conf</filename>
- nicht überschrieben, so dass die Systemkonfiguration
- erhalten bleibt.</para>
-
- <tip>
- <para>Die Konfigurationsdatei <filename>/etc/rc.conf</filename> wird
- von &man.sh.1; gelesen. Dies erlaubt es dem Systemadministrator,
- eine bestimmte Menge an Logik dieser Datei hinzuzufügen, was
- dabei helfen kann, komplexe Konfigurationsszenarien zu erstellen.
- Lesen Sie dazu &man.rc.conf.5;, um weitere Informationen zu diesem
- Thema zu erhalten.</para>
- </tip>
- </sect1>
-
- <sect1 id="configtuning-appconfig">
- <title>Konfiguration von Anwendungen</title>
-
- <para>Installierte Anwendungen haben typischerweise
- eigene Konfigurationsdateien, die eine eigene Syntax
- verwenden. Damit diese Dateien leicht von der
- Paketverwaltung gefunden und verwaltet werden können,
- ist es wichtig, sie vom Basissystem zu trennen.</para>
-
- <indexterm><primary>/usr/local/etc</primary></indexterm>
-
- <para>Für gewöhnlich werden diese Dateien in <filename
- class="directory">/usr/local/etc</filename> installiert. Besitzt
- eine Anwendung viele Konfigurationsdateien, werden
- diese in einem separaten Unterverzeichnis abgelegt.</para>
-
- <para>Wenn ein Port oder ein Paket installiert wird, werden
- normalerweise auch Beispiele für die Konfigurationsdateien
- installiert. Diese erkennt man gewöhnlich an dem
- Suffix <filename>.default</filename>. Wenn keine Konfigurationsdateien
- für eine Anwendung existieren, werden sie durch
- Kopieren der <filename>.default</filename> Dateien erstellt.</para>
-
- <para>Als Beispiel sei <filename
- class="directory">/usr/local/etc/apache</filename> gezeigt:</para>
-
- <literallayout class="monospaced">-rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf
--rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default
--rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf
--rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default
--rw-r--r-- 1 root wheel 12205 May 20 1998 magic
--rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default
--rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types
--rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default
--rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf
--rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default</literallayout>
-
- <para>Anhand der Dateigröße erkennen Sie, dass sich
- nur <filename>srm.conf</filename> geändert hat. Eine
- spätere Aktualisierung des <application>Apache</application>-Ports
- überschreibt diese Datei nicht.</para>
-
- </sect1>
-
- <sect1 id="configtuning-starting-services">
- <sect1info>
- <authorgroup>
- <author>
- <firstname>Tom</firstname>
- <surname>Rhodes</surname>
- <contrib>Beigetragen von </contrib>
- </author>
- </authorgroup>
- </sect1info>
- <title>Start von Diensten</title>
-
- <indexterm>
- <primary>Dienste</primary>
- </indexterm>
-
- <para>Viele Benutzer installieren Software Dritter auf &os;
- mithilfe der Ports-Sammlung. Häufig soll die
- Software bei einem Systemstart mitgestartet werden.
- Beispielsweise sollen die Dienste
- <filename role="package">mail/postfix</filename> oder
- <filename role="package">www/apache13</filename> nach
- einem Systemstart laufen. Dieser Abschnitt stellt
- die Startprozeduren für Software Dritter vor.</para>
-
- <para>Unter &os; werden die meisten der im System enthaltenen
- Dienste wie &man.cron.8; mithilfe von Systemskripten gestartet.
- Diese Skripten sind abhängig von der &os;- oder
- Hersteller-Version. Allerdings kann ein Dienst mit
- einfachen Skripten gestartet werden.</para>
-
- <sect2>
- <title>Dienste über das
- <filename>rc.d</filename>-System starten</title>
-
- <para>Mit <filename>rc.d</filename> lässt sich der Start
- von Anwendungen besser steuern als mit den vorher besprochenen
- Startskripten. Mit den im Abschnitt
- <link linkend="configtuning-rcd">rc.d</link>
- besprochenen Schlüsselwörtern können
- Anwendungen in einer bestimmten Reihenfolge (zum Beispiel
- nach <acronym>DNS</acronym>) gestartet werden und
- Optionen können in <filename>rc.conf</filename>
- statt fest im Startskript der Anwendung festgelegt werden.
- Ein einfaches Startskript sieht wie folgt aus:</para>
-
- <programlisting>#!/bin/sh
-#
-# PROVIDE: utility
-# REQUIRE: DAEMON
-# KEYWORD: shutdown
-
-. /etc/rc.subr
-
-name=utility
-rcvar=utility_enable
-
-command="/usr/local/sbin/utility"
-
-load_rc_config $name
-
-#
-# DO NOT CHANGE THESE DEFAULT VALUES HERE
-# SET THEM IN THE /etc/rc.conf FILE
-#
-utility_enable=${utility_enable-"NO"}
-pidfile=${utility_pidfile-"/var/run/utility.pid"}
-
-run_rc_command "$1"</programlisting>
-
- <para>Dieses Skript stellt sicher, dass
- <application>utility</application> nach den
- <literal>DAEMON</literal>-Pseudodiensten gestartet wird.
- Es stellt auch eine Methode bereit, die
- Prozess-<acronym>ID</acronym> (<acronym>PID</acronym>)
- der Anwendung in einer Datei zu speichern.</para>
-
- <para>In <filename>/etc/rc.conf</filename> könnte
- für diese Anwendung die folgende Zeile stehen:</para>
-
- <programlisting>utility_enable="YES"</programlisting>
-
- <para>Die Methode erleichtert den Umgang mit
- Kommandozeilenargumenten, bindet Funktionen aus
- <filename>/etc/rc.subr</filename> ein, ist kompatibel
- zum Werkzeug &man.rcorder.8; und lässt sich
- über <filename>rc.conf</filename> leichter
- konfigurieren.</para>
- </sect2>
-
- <sect2>
- <title>Andere Arten, um Dienste zu starten</title>
-
- <para>Dienste wie <acronym>POP</acronym>3 oder
- <acronym>IMAP</acronym> können über
- &man.inetd.8; gestartet werden. Nach der Installation
- der Anwendung aus der Ports-Sammlung muss eine
- Konfigurationszeile in der Datei
- <filename>/etc/inetd.conf</filename> hinzugefügt oder
- in der aktuellen Konfiguration durch Entfernen der Kommentare
- aktiviert werden. Der Abschnitt <xref
- linkend="network-inetd"/> beschreibt den
- <application>inetd</application> und dessen Konfiguration.</para>
-
- <para>Systemdienste können auch mit &man.cron.8; gestartet
- werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil
- &man.cron.8; die Prozesse unter dem Eigentümer der
- <filename>crontab</filename> startet, ist es möglich, dass
- Dienste von nicht-<username>root</username> Benutzern gestartet
- und gepflegt werden können.</para>
-
- <para>Dies nutzt eine Eigenschaft von &man.cron.8;:
- Für die Zeitangabe kann <literal>@reboot</literal>
- eingesetzt werden. Damit wird das Kommando gestartet, wenn
- &man.cron.8; kurz nach dem Systemboot gestartet wird.</para>
- </sect2>
- </sect1>
-
- <sect1 id="configtuning-cron">
- <sect1info>
- <authorgroup>
- <author>
- <firstname>Tom</firstname>
- <surname>Rhodes</surname>
- <contrib>Beigetragen von </contrib>
- <!-- 20 May 2003 -->
- </author>
- </authorgroup>
- </sect1info>
- <title>Programme mit <command>cron</command> starten</title>
-
- <indexterm>
- <primary><command>cron</command></primary>
- </indexterm>
-
- <para>Ein sehr nützliches Werkzeug von &os; ist &man.cron.8;.
- <command>cron</command> läuft im Hintergrund und
- überprüft fortlaufend die Datei
- <filename>/etc/crontab</filename>. Beim Start sucht
- <command>cron</command> neue <filename>crontab</filename>-Dateien
- im Verzeichnis <filename class="directory">/var/cron/tabs</filename>.
- In den <filename class="directory">crontab</filename>-Dateien wird
- festgelegt, welche Programme zu welchem Zeitpunkt laufen sollen.</para>
-
- <para>Das Werkzeug <command>cron</command> verwendet
- zwei verschiedene Konfigurationsdateien: Die
- System-<filename>crontab</filename> und die
- Benutzer-<filename>crontab</filename>. Der einzige Unterschied
- zwischen beiden Formaten ist das sechste Feld. In der
- System-<filename>crontab</filename> gibt das sechste Feld das
- Konto an, unter dem ein Kommando läuft. Aus der
- System-<filename>crontab</filename> können daher
- Kommandos unter beliebigen Konten gestartet werden.
- In der Benutzer-<filename>crontab</filename> gibt das
- sechste Feld das auszuführende Kommando an. Alle
- Kommandos laufen unter dem Konto, unter dem die
- <filename>crontab</filename> erstellt wurde (ein
- wichtiges Sicherheitsmerkmal).</para>
-
- <note>
- <para>Benutzer können mit Benutzer-<filename>crontabs</filename>
- ohne <username>root</username>-Rechte Befehle terminieren.
- Die Kommandos in Benutzer-<filename>crontabs</filename> laufen
- unter dem Benutzer, der die <filename>crontab</filename>
- erstellt hat.</para>
-
- <para>Der Benutzer <username>root</username> kann, wie
- jeder andere Benutzer, eine Benutzer-<filename>crontab</filename>
- besitzen. Die Benutzer-<filename>crontab</filename> von
- <username>root</username> ist nicht mit der Datei
- <filename>/etc/crontab</filename>, der
- System-<filename>crontab</filename>, zu verwechseln.
- Normalerweise besitzt <username>root</username>, wegen
- der Existenz der System-<filename>crontab</filename>, keine
- eigene Benutzer-<filename>crontab</filename>.</para>
- </note>
-
- <para>Der folgende Auszug aus der System-<filename>crontab</filename>
- <filename>/etc/crontab</filename> zeigt den Aufbau
- einer <filename>crontab</filename>-Datei:</para>
-
- <programlisting># /etc/crontab - root's crontab for FreeBSD
-#
-# &dollar;FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp &dollar;
-# <co id="co-comments"/>
-#
-SHELL=/bin/sh
-PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin <co id="co-env"/>
-HOME=/var/log
-#
-#
-#minute hour mday month wday who command <co id="co-field-descr"/>
-#
-#
-*/5 * * * * root /usr/libexec/atrun <co id="co-main"/></programlisting>
-
- <calloutlist>
- <callout arearefs="co-comments">
- <para>Das Zeichen <literal>#</literal> leitet, wie in
- den meisten Konfigurationsdateien, einen Kommentar ein.
- Benutzen Sie Kommentare, um die Funktion eines Eintrags
- zu erläutern. Kommentare müssen in einer
- extra Zeile stehen. Sie können nicht in derselben
- Zeile wie ein Kommando stehen, da sie sonst Teil des
- Kommandos wären. Leerzeilen in dieser Datei
- werden ignoriert.</para>
- </callout>
-
- <callout arearefs="co-env">
- <para>Umgebungsvariablen werden mit dem Gleichheits-Zeichen
- (<literal>=</literal>) festgelegt. Im Beispiel werden
- die Variablen <envar>SHELL</envar>, <envar>PATH</envar>
- und <envar>HOME</envar> definiert. Wenn die Variable
- <envar>SHELL</envar> nicht definiert wird, benutzt
- <command>cron</command> die Shell <command>sh</command>.
- Wird die Variable <envar>PATH</envar> nicht gesetzt,
- müssen alle Pfadangaben absolut sein, da es keinen
- Vorgabewert für <envar>PATH</envar> gibt. Der
- Vorgabewert für <envar>HOME</envar> ist das
- Heimatverzeichnis des Accounts, dem die
- <filename>crontab</filename> gehört.</para>
- </callout>
-
- <callout arearefs="co-field-descr">
- <para>In dieser Zeile werden sieben Felder beschrieben:
- <literal>minute</literal>, <literal>hour</literal>,
- <literal>mday</literal>, <literal>month</literal>,
- <literal>wday</literal>, <literal>who</literal>
- und <literal>command</literal>. Die ersten Felder
- legen den Zeitpunkt fest, an dem ein Kommando laufen
- soll. Das Feld <literal>minute</literal> legt die
- Minute fest, das Feld <literal>hour</literal> die
- Stunde, das Feld <literal>mday</literal> den Tag
- des Monats. Im Feld <literal>month</literal>
- wird der Monat und im Feld <literal>wday</literal>
- der Wochentag festgelegt. Alle Felder müssen
- numerische Werte enthalten und die Zeitangaben sind
- im 24-Stunden-Format. Das Feld <literal>who</literal>
- gibt es nur in der Datei <filename>/etc/crontab</filename>
- und gibt den Account an, unter dem das Kommando laufen
- soll. In den <filename>crontab</filename>-Dateien
- einzelner Accounts existiert dieses Feld nicht. Im
- letzten Feld wird schließlich das auszuführende
- Kommando angegeben.</para>
- </callout>
-
- <callout arearefs="co-main">
- <para>Diese Zeile definiert die Zeitpunkte an denen das
- Kommando <command>atrun</command> laufen soll. Beachten
- Sie die Zeichenfolge <literal>*/5</literal> gefolgt von
- mehreren <literal>*</literal>-Zeichen. Das Zeichen
- <literal>*</literal> ist ein Platzhalter und steht
- für <emphasis>jede</emphasis> mögliche Zeit.
- Diese Zeile führt das Kommando <command>atrun</command>
- unter dem <username>root</username>-Account alle fünf
- Minuten aus. Mehr über das Kommando
- <command>atrun</command> erfahren Sie in der
- Hilfeseite &man.atrun.8;.</para>
-
- <para>Bei den Kommandos können beliebige Optionen
- angegeben werden. Wenn das Kommando zu lang ist und
- auf der nächsten Zeile fortgesetzt werden soll,
- muss am Ende der Zeile das Fortsetzungszeichen
- (<literal>\</literal>) angegeben werden.</para>
- </callout>
- </calloutlist>
-
- <para>Bis auf das sechste Feld, das den Account angibt, sieht
- jede <filename>crontab</filename>-Datei so wie das Beispiel
- aus. Das sechste Feld existiert nur in der Systemdatei
- <filename>/etc/crontab</filename>. In den restlichen
- <filename>crontab</filename>-Dateien fehlt dieses Feld.</para>
-
- <sect2 id="configtuning-installcrontab">
- <title><filename>crontab</filename> installieren</title>
-
- <important>
- <para>Die nachstehende Prozedur gilt nur für
- Benutzer-<filename>crontabs</filename>. Die
- System-<filename>crontab</filename> können
- Sie einfach mit Ihrem Lieblingseditor editieren.
- Das Werkzeug <command>cron</command> bemerkt, dass
- sich die Datei geändert hat und wird die neue
- Version benutzen. Lesen Sie bitte auch die FAQ
- zur Meldung <ulink
- url="&url.books.faq;/admin.html#ROOT-NOT-FOUND-CRON-ERRORS">root: not found</ulink>.</para>
- </important>
-
- <para>Eine Benutzer-<filename>crontab</filename>, beispielsweise
- die Datei <filename>crontab</filename>, können Sie mit
- jedem Editor erstellen. Die Benutzer-<filename>crontab</filename>
- installieren Sie mit dem nachstehenden Befehl:</para>
-
- <screen>&prompt.root; <userinput>crontab crontab</userinput></screen>
-
- <para>Das Argument zum Befehl <command>crontab</command>
- ist die vorher erstellte Datei <filename>crontab</filename>.</para>
-
- <para>Der Befehl <command>crontab -l</command> zeigt
- die installierte <filename>crontab</filename>-Datei an.</para>
-
- <para>Benutzer, die eine eigene <filename>crontab</filename>-Datei
- ohne Vorlage erstellen wollen, können den Befehl
- <command>crontab -e</command> verwenden. Dieser Befehl
- ruft einen Editor auf und installiert beim Verlassen des
- Editors die <filename>crontab</filename>-Datei.</para>
-
- <para>Wollen Sie die installierte
- Benutzer-<filename>crontab</filename> entfernen, rufen Sie den
- Befehl <command>crontab</command> mit der Option
- <option>-r</option> auf.</para>
- </sect2>
- </sect1>
-
- <sect1 id="configtuning-rcd">
- <sect1info>
- <authorgroup>
- <author>
- <firstname>Tom</firstname>
- <surname>Rhodes</surname>
- <contrib>Beigetragen von </contrib>
- <!-- 16 May 2003 -->
- </author>
- </authorgroup>
- </sect1info>
- <title>Das rc-System für Systemdienste</title>
-
- <para>2002 wurde das <application>rc.d</application>-System von
- NetBSD zum Start von Systemdiensten in &os; integriert.
- Die zu diesem System gehörenden Dateien sind im
- Verzeichnis <filename class="directory">/etc/rc.d</filename> abgelegt.
- Die Skripten in diesem Verzeichnis akzeptieren die
- Optionen <option>start</option>, <option>stop</option>
- und <option>restart</option>. Beispielsweise kann
- &man.sshd.8; mit dem nachstehenden Kommando neu gestartet
- werden:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/sshd restart</userinput></screen>
-
- <para>Analog können Sie andere Dienste starten und stoppen.
- Normalerweise werden die Dienste beim Systemstart über
- Einträge in der Datei &man.rc.conf.5; automatisch gestartet.
- Der Network Address
- Translation D&aelig;mon wird zum Beispiel mit dem folgenden
- Eintrag in <filename>/etc/rc.conf</filename> aktiviert:</para>
-
- <programlisting>natd_enable="YES"</programlisting>
-
- <para>Wenn dort bereits die Zeile <option>natd_enable="NO"</option>
- existiert, ändern Sie einfach <option>NO</option> in
- <option>YES</option>. Die rc-Skripten starten, wie unten
- beschrieben, auch abhängige Dienste.</para>
-
- <para>Da das <application>rcNG</application>-System primär
- zum automatischen Starten und Stoppen von Systemdiensten
- dient, funktionieren die Optionen <option>start</option>,
- <option>stop</option> und <option>restart</option> nur,
- wenn die entsprechenden Variablen in
- <filename>/etc/rc.conf</filename> gesetzt sind. Beispielsweise
- funktioniert das Kommando <command>sshd restart</command>
- nur dann, wenn in <filename>/etc/rc.conf</filename> die
- Variable <varname>sshd_enable</varname> auf <option>YES</option>
- gesetzt wurde. Wenn Sie die Optionen <option>start</option>,
- <option>stop</option> oder <option>restart</option>
- unabhängig von den Einstellungen in
- <filename>/etc/rc.conf</filename> benutzen wollen,
- müssen Sie den Optionen mit dem Präfix
- <quote>one</quote> verwenden. Um beispielsweise
- <command>sshd</command> unabhängig von den
- Einstellungen in <filename>/etc/rc.conf</filename> neu
- zu starten, benutzen Sie das nachstehende Kommando:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/sshd onerestart</userinput></screen>
-
- <para>Ob ein Dienst in <filename>/etc/rc.conf</filename>
- aktiviert ist, können Sie leicht herausfinden, indem
- Sie das entsprechende <filename>rc.d</filename>-Skript
- mit der Option <option>rcvar</option> aufrufen. Ein
- Administrator kann beispielsweise wie folgt prüfen, ob
- der <command>sshd</command>-Dienst in
- <filename>/etc/rc.conf</filename> aktiviert ist:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/sshd rcvar</userinput>
-# sshd
-$sshd_enable=YES</screen>
-
- <note>
- <para>Die zweite Zeile (<literal># sshd</literal>) wird
- vom Kommando <command>sshd</command> ausgegeben; sie
- kennzeichnet nicht die Eingabeaufforderung von
- <username>root</username>.</para>
- </note>
-
- <para>Ob ein Dienst läuft, kann mit der Option
- <option>status</option> abgefragt werden. Das folgende
- Kommando überprüft, ob der <command>sshd</command>
- auch wirklich gestartet wurde:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/sshd status</userinput>
-sshd is running as pid 433.</screen>
-
- <para>Einige Dienste können über die Option
- <option>reload</option> neu initialisiert werden. Dazu wird
- dem Dienst über ein Signal mitgeteilt,
- dass er seine Konfigurationsdateien neu einlesen soll.
- Oft wird dazu das Signal <literal>SIGHUP</literal>
- verwendet. Beachten Sie aber, dass nicht alle Dienste diese
- Option unterstützen.</para>
-
- <para>Die meisten Systemdienste werden beim Systemstart vom
- <application>rc.d</application>-System gestartet. Zum Beispiel
- aktiviert das Skript <filename>bgfsck</filename> die Prüfung
- von Dateisystemen im Hintergrund. Das Skript gibt die folgende
- Meldung aus, wenn es gestartet wird:</para>
-
- <screen>Starting background file system checks in 60 seconds.</screen>
-
- <para>Viele Systemdienste hängen von anderen Diensten
- ab. NIS und andere RPC-basierende Systeme hängen
- beispielsweise von dem <command>rpcbind</command>-Dienst
- (portmapper) ab. Im Kopf der Startskripten befinden sich
- die Informationen über Abhängigkeiten von anderen
- Diensten und weitere Metadaten.Mithilfe dieser Daten
- bestimmt das Programm &man.rcorder.8; beim Systemstart die
- Startreihenfolge der Dienste.</para>
-
- <para>Folgende Schlüsselwörter müssen im Kopf aller
- Startskripten verwendet werden (da sie von &man.rc.subr.8; zum
- <quote>Aktivieren</quote> des Startskripts benötigt
- werden:</para>
-
- <itemizedlist>
- <listitem>
- <para><literal>PROVIDE</literal>: Gibt die Namen der Dienste an,
- die mit dieser Datei zur Verfügung gestellt werden.</para>
- </listitem>
- </itemizedlist>
-
- <para>Die folgenden Schlüsselwörter können im Kopf
- des Startskripts angegeben werden. Sie sind zwar nicht unbedingt
- notwendig, sind aber hilfreich beim Umgang mit
- &man.rcorder.8;:</para>
-
- <itemizedlist>
- <listitem>
- <para><literal>REQUIRE</literal>: Gibt die Namen der Dienste an,
- von denen dieser Dienst abhängt. Diese Datei wird
- <emphasis>nach</emphasis> den angegebenen Diensten
- ausgeführt.</para>
- </listitem>
-
- <listitem>
- <para><literal>BEFORE</literal>: Zählt Dienste auf,
- die auf diesen Dienst angewiesen sind. Diese Datei wird
- <emphasis>vor</emphasis> den angegebenen Diensten
- ausgeführt.</para>
- </listitem>
- </itemizedlist>
-
- <para>Durch das Verwenden dieser Schlüsselwörter kann
- ein Administrator die Startreihenfolge von Systemdiensten
- feingranuliert steuern, ohne mit den
- Schwierigkeiten des <quote>runlevel</quote>-Systems
- anderer &unix; Systeme kämpfen zu müssen.</para>
-
- <para>Weitere Informationen über das
- <filename>rc.d</filename>-System finden sich in den
- Manualpages zu &man.rc.8; sowie &man.rc.subr.8;. Wenn Sie
- Ihre eigenen <filename>rc.d</filename>-Skripte schreiben
- wollen, sollten Sie den Artikel
- <ulink url="&url.articles.rc-scripting.en">Practical rc.d
- scripting in BSD</ulink> lesen.</para>
- </sect1>
-
- <sect1 id="config-network-setup">
- <sect1info>
- <authorgroup>
- <author>
- <firstname>Marc</firstname>
- <surname>Fonvieille</surname>
- <contrib>Beigetragen von </contrib>
- <!-- 6 October 2002 -->
- </author>
- </authorgroup>
- </sect1info>
-
- <title>Einrichten von Netzwerkkarten</title>
-
- <indexterm>
- <primary>Netzwerkkarten</primary>
- <secondary>einrichten</secondary>
- </indexterm>
-
- <para>Ein Rechner ohne Netzanschluss ist heute nicht mehr
- vorstellbar. Die Konfiguration einer Netzwerkkarte gehört zu
- den alltäglichen Aufgaben eines &os; Administrators.</para>
-
- <sect2>
- <title>Bestimmen des richtigen Treibers</title>
-
- <indexterm>
- <primary>Netzwerkkarten</primary>
- <secondary>Treiber</secondary>
- </indexterm>
-
- <para>Bevor Sie anfangen, sollten Sie das Modell Ihrer Karte kennen,
- wissen welchen Chip die Karte benutzt und bestimmen, ob es sich
- um eine PCI- oder ISA-Karte handelt. Eine Aufzählung der
- unterstützten PCI- und ISA-Karten finden Sie in der
- Liste der unterstützen Geräte. Schauen Sie nach, ob Ihre
- Karte dort aufgeführt ist.</para>
-
- <para>Wenn Sie wissen, dass Ihre Karte unterstützt wird,
- müssen Sie den Treiber für Ihre Karte bestimmen.
- <filename>/usr/src/sys/conf/NOTES</filename> und
- <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename>
- enthalten eine
- Liste der verfügbaren Treiber mit Informationen zu den
- unterstützten Chipsätzen und Karten. Wenn Sie sich nicht
- sicher sind, ob Sie den richtigen Treiber ausgewählt haben,
- lesen Sie die Hilfeseite des Treibers. Die Hilfeseite enthält
- weitere Informationen über die unterstützten Geräte
- und macht auch auf mögliche Probleme aufmerksam.</para>
-
- <para>Wenn Sie eine gebräuchliche Karte besitzen, brauchen Sie
- meistens nicht lange nach dem passenden Treiber zu suchen. Die
- Treiber zu diesen Karten sind schon im
- <filename>GENERIC</filename>-Kernel enthalten und die Karte sollte
- während des Systemstarts erkannt werden:</para>
-
-<screen>dc0: &lt;82c169 PNIC 10/100BaseTX&gt; port 0xa000-0xa0ff mem 0xd3800000-0xd38
-000ff irq 15 at device 11.0 on pci0
-miibus0: &lt;MII bus&gt; on dc0
-bmtphy0: &lt;BCM5201 10/100baseTX PHY&gt; PHY 1 on miibus0
-bmtphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
-dc0: Ethernet address: 00:a0:cc:da:da:da
-dc0: [ITHREAD]
-dc1: &lt;82c169 PNIC 10/100BaseTX&gt; port 0x9800-0x98ff mem 0xd3000000-0xd30
-000ff irq 11 at device 12.0 on pci0
-miibus1: &lt;MII bus&gt; on dc1
-bmtphy1: &lt;BCM5201 10/100baseTX PHY&gt; PHY 1 on miibus1
-bmtphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
-dc1: Ethernet address: 00:a0:cc:da:da:db
-dc1: [ITHREAD]</screen>
-
- <para>Im Beispiel erkennt das System zwei Karten, die den
- &man.dc.4; Treiber benutzen.</para>
-
- <para>Ist der Treiber für Ihre Netzwerkkarte nicht
- in <filename>GENERIC</filename> enthalten, müssen
- Sie den Treiber laden, um die Karte zu benutzen.
- Sie können den Treiber auf zwei Arten laden:</para>
-
- <itemizedlist>
- <listitem>
- <para>Am einfachsten ist es, das Kernelmodul für
- Ihre Karte mit &man.kldload.8; zu laden. Allerdings
- gibt es nicht für alle Karten Kernelmodule;
- zum Beispiel gibt es keine Kernelmodule für
- ISA-Karten.</para>
- </listitem>
-
- <listitem>
- <para>Alternativ können Sie den Treiber für die
- Karte fest in den Kernel einbinden. Schauen Sie sich dazu
- <filename>/usr/src/sys/conf/NOTES</filename>,
- <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename>
- und die Hilfeseite des Treibers, den Sie in den Kernel
- einbinden möchten, an. Die Übersetzung des Kernels
- wird in <xref linkend="kernelconfig"/> beschrieben. Wenn
- Ihre Karte während des Systemstarts vom Kernel
- (<filename>GENERIC</filename>) erkannt wurde, müssen
- Sie den Kernel nicht neu übersetzen.</para>
- </listitem>
- </itemizedlist>
-
- <sect3 id="config-network-ndis">
- <title>&windows;-NDIS-Treiber einsetzen</title>
-
- <indexterm><primary>NDIS</primary></indexterm>
- <indexterm><primary>NDISulator</primary></indexterm>
- <indexterm><primary>&windows;-Treiber</primary></indexterm>
- <indexterm><primary>Microsoft Windows</primary></indexterm>
- <indexterm>
- <primary>Microsoft Windows</primary>
- <secondary>Gerätetreiber</secondary></indexterm>
- <indexterm><primary>KLD (kernel loadable object)</primary></indexterm>
-
- <!-- Hm. Soll man den letzten Indexterm abwandeln, d.h. die
- Langversion weglassen? Keine Ahnung. Wenn ja, dann muss das
- auch in handbook/linuxemu/chapter.sgml passieren! -->
-
- <para>Leider stellen nach wie vor viele Unternehmen die
- Spezifikationen ihrer Treiber der Open Source Gemeinde
- nicht zur Verfügung, weil sie diese Informationen
- als Geschäftsgeheimnisse betrachten. Daher haben die
- Entwickler von FreeBSD und anderen Betriebssystemen nur
- zwei Möglichkeiten. Entweder versuchen sie in einem
- aufwändigen Prozess den Treiber durch
- <foreignphrase>Reverse Engineering</foreignphrase>
- nachzubauen, oder sie versuchen, die vorhandenen
- Binärtreiber der &microsoft.windows;-Plattform zu
- verwenden. Die meisten Entwickler, darunter auch die an
- FreeBSD beteiligten, haben sich für den zweiten Ansatz
- entschieden.</para>
-
- <para>Bill Paul (wpaul) ist es zu verdanken, dass es seit
- eine <quote>native</quote> Unterstützung der
- <foreignphrase>Network Driver Interface
- Specification</foreignphrase> (NDIS) gibt. Der
- FreeBSD NDISulator (auch als Project Evil bekannt) nutzt
- den binären &windows;-Treiber, indem er diesem vorgibt,
- unter &windows; zu laufen. Da der &man.ndis.4;-Treiber
- eine &windows;-Binärdatei nutzt, kann er nur auf
- &i386;- und amd64-Systemen verwendet werden.</para>
-
- <note>
- <para>Der &man.ndis.4;-Treiber unterstützt primär
- PCI-, CardBus- sowie PCMCIA-Geräte, USB-Geräte
- werden hingegen noch nicht unterstützt.</para>
- </note>
-
- <para>Um den NDISulator zu verwenden, benötigen Sie drei
- Dinge:</para>
-
- <orderedlist>
- <listitem>
- <para>Die Kernelquellen</para>
- </listitem>
-
- <listitem>
- <para>Den &windowsxp;-Binärtreiber
- (mit der Erweiterung <filename>.SYS</filename>)</para>
- </listitem>
-
- <listitem>
- <para>Die Konfigurationsdatei des &windowsxp;-Treibers
- (mit der Erweiterung <filename>.INF</filename>)</para>
- </listitem>
- </orderedlist>
-
- <para>Suchen Sie die Dateien für Ihre Karte. Diese
- befinden sich meistens auf einer beigelegten CD-ROM, oder
- können von der Internetseite des Herstellers
- heruntergeladen werden. In den folgenden Beispielen werden
- die Dateien <filename>W32DRIVER.SYS</filename> und
- <filename>W32DRIVER.INF</filename> verwendet.</para>
-
- <note>
- <para>Sie können einen &windows;/i386-Treiber nicht
- unter &os;/amd64 einsetzen, vielmehr benötigen Sie
- dafür einen &windows;/amd64-Treiber.</para>
- </note>
-
- <para>Als Nächstes kompilieren Sie den binären
- Treiber, um ein Kernelmodul zu erzeugen. Dazu rufen Sie als
- <username>root</username> &man.ndisgen.8; auf:</para>
-
- <screen>&prompt.root; <userinput>ndisgen <replaceable>/path/to/W32DRIVER.INF</replaceable> <replaceable>/path/to/W32DRIVER.SYS</replaceable></userinput></screen>
-
- <para>&man.ndisgen.8; arbeitet interaktiv, benötigt es
- weitere Informationen, so fragt es Sie danach. Als Ergebnis
- erhalten Sie ein Kernelmodul im Arbeitsverzeichnis, das Sie
- wie folgt laden können:</para>
-
- <screen>&prompt.root; <userinput>kldload <replaceable>./W32DRIVER.ko</replaceable></userinput></screen>
-
- <para>Neben dem vorhin erzeugten Kernelmodul müssen Sie
- auch die Kernelmodule <filename>ndis.ko</filename> und
- <filename>if_ndis.ko</filename> laden. Diese Module sollten
- automatisch geladen werden, wenn Sie ein von &man.ndis.4;
- abhängiges Modul laden. Wollen Sie die Module hingegen
- manuell laden, geben Sie die folgenden Befehle ein:</para>
-
- <screen>&prompt.root; <userinput>kldload ndis</userinput>
-&prompt.root; <userinput>kldload if_ndis</userinput></screen>
-
- <para>Der erste Befehl lädt dabei den NDIS-Miniport-Treiber,
- der zweite das tatsächliche Netzwerkgerät.</para>
-
- <para>Überprüfen Sie nun die Ausgabe von &man.dmesg.8;
- auf eventuelle Fehler während des Ladevorgangs. Gab es
- dabei keine Probleme, sollten Sie eine Ausgabe ähnlich
- der folgenden erhalten:</para>
-
- <screen>ndis0: &lt;Wireless-G PCI Adapter&gt; mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
-ndis0: NDIS API version: 5.0
-ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
-ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
-ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps</screen>
-
- <para>Ab jetzt können Sie mit dem Gerät
- <devicename>ndis0</devicename> wie mit jeder anderen
- Gerätedatei (etwa <devicename>dc0</devicename>)
- arbeiten.</para>
-
- <para>Wie jedes Kernelmodul können auch die NDIS-Module
- beim Systemstart automatisch geladen werden. Dazu kopieren
- Sie das erzeugte Modul (<filename>W32DRIVER_SYS.ko</filename>)
- in das Verzeichnis <filename
- class="directory">/boot/modules</filename>. Danach
- fügen Sie die folgende Zeile in
- <filename>/boot/loader.conf</filename> ein:</para>
-
- <programlisting>W32DRIVER_SYS_load="YES"</programlisting>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Konfiguration von Netzwerkkarten</title>
-
- <indexterm>
- <primary>Netzwerkkarten</primary>
- <secondary>einrichten</secondary>
- </indexterm>
-
- <para>Nachdem der richtige Treiber für die Karte geladen ist,
- muss die Karte konfiguriert werden. Unter Umständen ist
- die Karte schon während der Installation mit
- <application>sysinstall</application> konfiguriert worden.</para>
-
- <para>Das nachstehende Kommando zeigt die Konfiguration der Karten
- eines Systems an:</para>
-
-<screen>&prompt.user; <userinput>ifconfig</userinput>
-dc0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
- options=80008&lt;VLAN_MTU,LINKSTATE&gt;
- ether 00:a0:cc:da:da:da
- inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
- media: Ethernet autoselect (100baseTX &lt;full-duplex&gt;)
- status: active
-dc1: flags=8802&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
- options=80008&lt;VLAN_MTU,LINKSTATE&gt;
- ether 00:a0:cc:da:da:db
- inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
- media: Ethernet 10baseT/UTP
- status: no carrier
-plip0: flags=8810&lt;POINTOPOINT,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
-lo0: flags=8049&lt;UP,LOOPBACK,RUNNING,MULTICAST&gt; metric 0 mtu 16384
- options=3&lt;RXCSUM,TXCSUM&gt;
- inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
- inet6 ::1 prefixlen 128
- inet 127.0.0.1 netmask 0xff000000
- nd6 options=3&lt;PERFORMNUD,ACCEPT_RTADV&gt;</screen>
-
- <para>Im Beispiel werden Informationen zu den folgenden Geräten
- angezeigt:</para>
-
- <itemizedlist>
- <listitem>
- <para><devicename>dc0</devicename>: Der erste
- Ethernet-Adapter</para>
- </listitem>
-
- <listitem>
- <para><devicename>dc1</devicename>: Der zweite
- Ethernet-Adapter</para>
- </listitem>
-
- <listitem>
- <para><devicename>plip0</devicename>: Die parallele
- Schnittstelle (falls Ihr System über eine
- derartige Schnittstelle verfügt)</para>
- </listitem>
-
- <listitem>
- <para><devicename>lo0</devicename>: Das Loopback-Gerät</para>
- </listitem>
- </itemizedlist>
-
- <para>Der Name der Netzwerkkarte wird aus dem Namen des Treibers und
- einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge an, in
- der die Geräte beim Systemstart erkannt wurden. Die dritte
- Karte, die den &man.sis.4; Treiber benutzt, würde
- beispielsweise <devicename>sis2</devicename> heißen.</para>
-
- <para>Der Adapter <devicename>dc0</devicename> aus dem Beispiel ist
- aktiv. Sie erkennen das an den folgenden Hinweisen:</para>
-
- <orderedlist>
- <listitem>
- <para><literal>UP</literal> bedeutet, dass die Karte
- konfiguriert und aktiv ist.</para>
- </listitem>
-
- <listitem>
- <para>Der Karte wurde die Internet-Adresse (<literal>inet</literal>)
- <hostid role="ipaddr">192.168.1.3</hostid> zugewiesen.</para>
- </listitem>
-
- <listitem>
- <para>Die Subnetzmaske ist richtig
- (<hostid role="netmask">0xffffff00</hostid> entspricht
- <hostid role="netmask">255.255.255.0</hostid>).</para>
- </listitem>
-
- <listitem>
- <para>Die Broadcast-Adresse <hostid
- role="ipaddr">192.168.1.255</hostid> ist richtig.</para>
- </listitem>
-
- <listitem>
- <para>Die MAC-Adresse der Karte (<literal>ether</literal>)
- lautet <hostid role="mac">00:a0:cc:da:da:da</hostid>.</para>
- </listitem>
-
- <listitem>
- <para>Die automatische Medienerkennung ist aktiviert
- (<literal>media: Ethernet autoselect (100baseTX
- &lt;full-duplex&gt;)</literal>). Der Adapter
- <devicename>dc1</devicename> benutzt das Medium
- <literal>10baseT/UTP</literal>. Weitere Informationen
- über die einstellbaren Medien entnehmen
- Sie bitte der Hilfeseite des Treibers.</para>
- </listitem>
-
- <listitem>
- <para>Der Verbindungsstatus (<literal>status</literal>) ist
- <literal>active</literal>, das heißt es wurde ein
- Trägersignal entdeckt. Für
- <devicename>dc1</devicename> wird <literal>status: no
- carrier</literal> angezeigt. Das ist normal, wenn kein Kabel
- an der Karte angeschlossen ist.</para>
- </listitem>
- </orderedlist>
-
- <para>Wäre die Karte nicht konfiguriert, würde die Ausgabe
- von &man.ifconfig.8; so aussehen:</para>
-
-<screen>dc0: flags=8843&lt;BROADCAST,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
- options=80008&lt;VLAN_MTU,LINKSTATE&gt;
- ether 00:a0:cc:da:da:da
- media: Ethernet autoselect (100baseTX &lt;full-duplex&gt;)
- status: active</screen>
-
- <para>Sie brauchen die Berechtigungen von <username>root</username>, um
- Ihre Karte zu konfigurieren. Die Konfiguration kann auf der
- Kommandozeile mit &man.ifconfig.8; erfolgen, allerdings
- müsste sie dann nach jedem Neustart wiederholt werden.
- Dauerhaft wird die Karte in <filename>/etc/rc.conf</filename>
- konfiguriert.</para>
-
- <para>Öffnen Sie <filename>/etc/rc.conf</filename> mit Ihrem
- Lieblingseditor und fügen Sie für jede Karte Ihres
- Systems eine Zeile hinzu. In dem hier diskutierten Fall wurden
- die nachstehenden Zeilen eingefügt:</para>
-
-<programlisting>ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
-ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"</programlisting>
-
- <para>Ersetzen Sie <devicename>dc0</devicename>,
- <devicename>dc1</devicename> usw. durch die Gerätenamen Ihrer
- Karten und setzen Sie die richtigen IP-Adressen ein. Die
- Hilfeseiten des Treibers und &man.ifconfig.8; enthalten weitere
- Einzelheiten über verfügbare Optionen. Die Syntax von
- <filename>/etc/rc.conf</filename> wird in &man.rc.conf.5;
- erklärt.</para>
-
- <para>Wenn Sie das Netz während der Installation
- konfiguriert haben, existieren vielleicht schon Einträge
- für Ihre Karten. Überprüfen Sie
- <filename>/etc/rc.conf</filename> bevor Sie weitere Zeilen
- hinzufügen.</para>
-
- <para>In <filename>/etc/hosts</filename> können Sie die Namen
- und IP-Adressen der Rechner Ihres LANs eintragen. Weitere
- Informationen entnehmen Sie bitte &man.hosts.5; und
- <filename>/usr/share/examples/etc/hosts</filename>.</para>
-
- <note>
- <para>Soll Ihr System sich auch mit dem Internet verbinden
- können, müssen Sie Default-Gateway und
- Nameserver manuell konfigurieren:</para>
-
- <screen>&prompt.root; <userinput>echo 'defaultrouter="<replaceable>Ihr_Default_Gateway</replaceable>"' &gt;&gt; /etc/rc.conf</userinput>
-&prompt.root; <userinput>echo 'nameserver <replaceable>Ihr_DNS_Server</replaceable>' &gt;&gt; /etc/resolv.conf</userinput></screen>
- </note>
- </sect2>
-
- <sect2>
- <title>Test und Fehlersuche</title>
-
- <para>Nachdem Sie die notwendigen Änderungen in
- <filename>/etc/rc.conf</filename> vorgenommen haben, führen
- Sie einen Neustart Ihres Systems durch. Dadurch werden die Adapter
- konfiguriert und Sie stellen sicher, dass der Start ohne
- Konfigurationsfehler erfolgt. Alternativ können Sie
- auch lediglich die Netzwerkeinstellungen neu initialisieren:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/netif restart</userinput></screen>
-
- <note>
- <para>Haben Sie ein Default-Gateway definiert (in der Datei
- <filename>/etc/rc.conf</filename>), müssen Sie
- auch den folgenden Befehl ausführen:</para>
-
- <screen>&prompt.root; <userinput>/etc/rc.d/routing restart</userinput></screen>
- </note>
-
- <para>Wenn das System gestartet ist, sollten Sie die Netzwerkkarten
- testen.</para>
-
- <sect3>
- <title>Test der Ethernet-Karte</title>
-
- <indexterm>
- <primary>Netzwerkkarten</primary>
- <secondary>testen</secondary>
- </indexterm>
-
- <para>Mit zwei Tests können Sie prüfen, ob die
- Ethernet-Karte richtig konfiguriert ist. Testen Sie zuerst mit
- <command>ping</command> den Adapter selbst und sprechen Sie dann
- eine andere Maschine im LAN an.</para>
-
- <para>Zuerst, der Test des Adapters:</para>
-
-<screen>&prompt.user; <userinput>ping -c5 192.168.1.3</userinput>
-PING 192.168.1.3 (192.168.1.3): 56 data bytes
-64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
-64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
-64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
-64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
-64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms
-
---- 192.168.1.3 ping statistics ---
-5 packets transmitted, 5 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms</screen>
-
- <para>Jetzt versuchen wir, eine andere Maschine im LAN zu
- erreichen:</para>
-
-<screen>&prompt.user; <userinput>ping -c5 192.168.1.2</userinput>
-PING 192.168.1.2 (192.168.1.2): 56 data bytes
-64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
-64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
-64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
-64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
-64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms
-
---- 192.168.1.2 ping statistics ---
-5 packets transmitted, 5 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms</screen>
-
- <para>Sie können auch den Namen der Maschine anstelle von
- <hostid role="ipaddr">192.168.1.2</hostid> benutzen, wenn Sie
- <filename>/etc/hosts</filename> entsprechend eingerichtet
- haben.</para>
- </sect3>
-
- <sect3>
- <title>Fehlersuche</title>
-
- <indexterm>
- <primary>Netzwerkkarten</primary>
- <secondary>Fehlersuche</secondary>
- </indexterm>
-
- <para>Fehler zu beheben, ist immer sehr mühsam.
- Indem Sie die einfachen Sachen zuerst prüfen,
- erleichtern Sie sich die Aufgabe. Steckt das Netwerkkabel?
- Sind die Netzwerkdienste richtig konfiguriert? Funktioniert
- die Firewall? Wird die Netwerkkarte von &os;
- unterstützt? Lesen Sie immer die Hardware-Informationen
- des Releases, bevor Sie einen Fehlerbericht einsenden.
- Aktualisieren Sie Ihre &os;-Version
- auf -STABLE. Suchen Sie in den Archiven der Mailinglisten
- oder auf dem Internet nach bekannten Lösungen.</para>
-
- <para>Wenn die Karte funktioniert, die Verbindungen aber
- zu langsam sind, lesen Sie bitte die Hilfeseite
- &man.tuning.7;. Prüfen Sie auch die
- Netzwerkkonfiguration, da falsche Einstellungen die
- Ursache für langsame Verbindungen sein können.</para>
-
- <para>Wenn Sie viele <errorname>device timeout</errorname>
- Meldungen in den Systemprotokollen finden, prüfen
- Sie, dass es keinen Konflikt zwischen der Netzwerkkarte
- und anderen Geräten Ihres Systems gibt.
- Überprüfen Sie nochmals die Verkabelung.
- Unter Umständen benötigen Sie eine neue
- Netzwerkkarte.</para>
-
- <para>Wenn Sie in den Systemprotokollen
- <errorname>watchdog timeout</errorname> Fehlermeldungen
- finden, kontrollieren Sie zuerst die Verkabelung.
- Überprüfen Sie dann, ob der PCI-Steckplatz der
- Karte Bus Mastering unterstützt. Auf einigen
- älteren Motherboards ist das nur für einen
- Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie
- in der Dokumentation Ihrer Karte und Ihres Motherboards
- nach, ob das vielleicht die Ursache des Problems sein
- könnte.</para>
-
- <para>Die Meldung <errorname>No route to host</errorname>
- erscheint, wenn Ihr System ein Paket nicht zustellen
- kann. Das kann vorkommen weil beispielsweise keine
- Default-Route gesetzt wurde oder das Netzwerkkabel
- nicht richtig steckt. Schauen Sie in der Ausgabe
- von <command>netstat -rn</command> nach, ob eine
- Route zu dem Zielsystem existiert. Wenn nicht, lesen
- Sie bitte das <xref linkend="advanced-networking"/>.</para>
-
- <para>Die Meldung <errorname>ping: sendto: Permission
- denied</errorname> wird oft von einer falsch konfigurierten
- Firewall verursacht. Wenn keine Regeln definiert wurden,
- blockiert eine aktivierte Firewall alle Pakete, selbst
- einfache <command>ping</command>-Pakete. Weitere
- Informationen erhalten Sie in <xref linkend="firewalls"/>.</para>
-
- <para>Falls die Leistung der Karte schlecht ist, setzen
- Sie die Medienerkennung von <literal>autoselect</literal>
- (automatisch) auf das richtige Medium. In vielen Fällen
- löst diese Maßnahme Leistungsprobleme. Wenn
- nicht, prüfen Sie nochmal die Netzwerkeinstellungen
- und lesen Sie die Hilfeseite &man.tuning.7;.</para>
- </sect3>
- </sect2>
- </sect1>
-
- <sect1 id="configtuning-virtual-hosts">
- <title>Virtual Hosts</title>
-
- <indexterm><primary>virtual hosts</primary></indexterm>
- <indexterm><primary>IP-Aliase</primary></indexterm>
-
- <para>Ein gebräuchlicher Zweck von &os; ist das
- virtuelle Hosting, bei dem ein Server im Netzwerk wie
- mehrere Server aussieht. Dies wird dadurch erreicht,
- dass einem Netzwerkinterface mehrere Netzwerk-Adressen
- zugewiesen werden.</para>
-
- <para>Ein Netzwerkinterface hat eine <quote>echte</quote>
- Adresse und kann beliebig viele <quote>alias</quote> Adressen
- haben. Die Aliase werden durch entsprechende alias Einträge
- in <filename>/etc/rc.conf</filename> festgelegt.</para>
-
- <para>Ein alias Eintrag für das Interface
- <devicename>fxp0</devicename> sieht wie folgt aus:</para>
-
-<programlisting>ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"</programlisting>
-
- <para>Beachten Sie, dass die Alias-Einträge mit
- <literal>alias0</literal> anfangen müssen und
- weiter hochgezählt werden, das heißt
- <literal>_alias1</literal>, <literal>_alias2</literal>,
- und so weiter. Die Konfiguration der Aliase hört
- bei der ersten fehlenden Zahl auf.</para>
-
- <para>Die Berechnung der Alias-Netzwerkmasken ist wichtig, doch
- zum Glück einfach. Für jedes Interface muss es
- eine Adresse geben, die die Netzwerkmaske des Netzwerkes richtig
- beschreibt. Alle anderen Adressen in diesem Netzwerk haben dann
- eine Netzwerkmaske, die mit <literal>1</literal> gefüllt
- ist (also <hostid role="netmask">255.255.255.255</hostid>
- oder hexadezimal
- <hostid role="netmask">0xffffffff</hostid>).</para>
-
- <para>Als Beispiel betrachten wir den Fall, in dem
- <devicename>fxp0</devicename> mit zwei Netzwerken verbunden
- ist: dem Netzwerk <hostid role="ipaddr">10.1.1.0</hostid> mit der
- Netzwerkmaske <hostid role="netmask">255.255.255.0</hostid>
- und dem Netzwerk <hostid role="ipaddr">202.0.75.16</hostid> mit der
- Netzwerkmaske <hostid role="netmask">255.255.255.240</hostid>.
- Das System soll die Adressen <hostid role="ipaddr">10.1.1.1</hostid>
- bis <hostid role="ipaddr">10.1.1.5</hostid> und
- <hostid role="ipaddr">202.0.75.17</hostid> bis
- <hostid role="ipaddr">202.0.75.20</hostid> belegen.
- Wie eben beschrieben, hat nur die erste Adresse in einem
- Netzwerk (hier <hostid role="ipaddr">10.0.1.1</hostid>
- und <hostid role="ipaddr">202.0.75.17</hostid>) die
- richtige Netzwerkmaske. Alle anderen Adressen
- (<hostid role="ipaddr">10.1.1.2</hostid> bis <hostid
- role="ipaddr">10.1.1.5</hostid> und <hostid
- role="ipaddr">202.0.75.18</hostid> bis <hostid
- role="ipaddr">202.0.75.20</hostid>) erhalten die Maske
- <hostid role="netmask">255.255.255.255</hostid>.</para>
-
- <para>Die folgenden Einträge in
- <filename>/etc/rc.conf</filename> konfigurieren den Adapter
- entsprechend dem Beispiel:</para>
-
-<programlisting>ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
-ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
-ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
-ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
-ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
-ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
-ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
-ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
-ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"</programlisting>
-
- </sect1>
-
- <sect1 id="configtuning-configfiles">
- <title>Konfigurationsdateien</title>
-
- <sect2>
- <title><filename class="directory">/etc</filename> Layout</title>
- <para>Konfigurationsdateien finden sich in einigen Verzeichnissen
- unter anderem in:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <colspec colwidth="1*"/>
- <colspec colwidth="2*"/>
-
- <tbody>
- <row>
- <entry><filename class="directory">/etc</filename></entry>
- <entry>Enthält generelle Konfigurationsinformationen,
- die Daten hier sind systemspezifisch.</entry>
- </row>
- <row>
- <entry><filename
- class="directory">/etc/defaults</filename></entry>
- <entry>Default Versionen der Konfigurationsdateien.</entry>
- </row>
- <row>
- <entry><filename class="directory">/etc/mail</filename></entry>
- <entry>Enthält die &man.sendmail.8; Konfiguration
- und weitere MTA Konfigurationsdateien.</entry>
- </row>
- <row>
- <entry><filename class="directory">/etc/ppp</filename></entry>
- <entry>Hier findet sich die Konfiguration für
- die User- und Kernel-ppp Programme.</entry>
- </row>
- <row>
- <entry><filename class="directory">/etc/namedb</filename></entry>
- <entry>Das Vorgabeverzeichnis, in dem Daten von
- &man.named.8; gehalten werden. Normalerweise
- werden hier <filename>named.conf</filename> und Zonendaten
- abgelegt.</entry>
- </row>
- <row>
- <entry><filename
- class="directory">/usr/local/etc</filename></entry>
- <entry>Installierte Anwendungen legen hier ihre
- Konfigurationsdateien ab. Dieses Verzeichnis kann
- Unterverzeichnisse für bestimmte Anwendungen
- enthalten.</entry>
- </row>
- <row>
- <entry><filename
- class="directory">/usr/local/etc/rc.d</filename></entry>
- <entry>Ort für Start- und Stopskripten installierter
- Anwendungen.</entry>
- </row>
- <row>
- <entry><filename class="directory">/var/db</filename></entry>
- <entry>Automatisch generierte systemspezifische Datenbanken,
- wie die Paket-Datenbank oder die
- <command>locate</command>-Datenbank.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect2>
-
- <sect2>
- <title>Hostnamen</title>
-
- <indexterm><primary>hostname</primary></indexterm>
- <indexterm><primary>DNS</primary></indexterm>
-
- <sect3>
- <title><filename>/etc/resolv.conf</filename></title>
-
- <indexterm><primary><filename>resolv.conf</filename></primary></indexterm>
-
- <para>Wie der &os;-Resolver auf das Internet Domain Name
- System (DNS) zugreift, wird in <filename>/etc/resolv.conf</filename>
- festgelegt.</para>
-
- <para>Die gebräuchlichsten Einträge in
- <filename>/etc/resolv.conf</filename> sind:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <colspec colwidth="1*"/>
- <colspec colwidth="2*"/>
-
- <tbody>
- <row>
- <entry><literal>nameserver</literal></entry>
- <entry>Die IP-Adresse eines Nameservers, den
- der Resolver abfragen soll. Bis zu drei Server werden
- in der Reihenfolge, in der sie aufgezählt
- sind, abgefragt.</entry>
- </row>
- <row>
- <entry><literal>search</literal></entry>
- <entry>Suchliste mit Domain-Namen zum Auflösen von
- Hostnamen. Die Liste wird normalerweise durch den
- Domain-Teil des lokalen Hostnamens festgelegt.</entry>
- </row>
- <row>
- <entry><literal>domain</literal></entry>
- <entry>Der lokale Domain-Name.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Beispiel für eine typische
- <filename>resolv.conf</filename>:</para>
-
- <programlisting>search example.com
-nameserver 147.11.1.11
-nameserver 147.11.100.30</programlisting>
-
- <note><para>Nur eine der Anweisungen <literal>search</literal>
- oder <literal>domain</literal> sollte benutzt werden.</para></note>
-
- <para>Wenn Sie DHCP benutzen, überschreibt &man.dhclient.8;
- für gewöhnlich <filename>resolv.conf</filename>
- mit den Informationen vom DHCP-Server.</para>
- </sect3>
-
- <sect3>
- <title><filename>/etc/hosts</filename></title>
-
- <indexterm><primary>hosts</primary></indexterm>
-
- <para><filename>/etc/hosts</filename> ist eine einfache textbasierte
- Datenbank, die aus alten Internetzeiten stammt. Zusammen
- mit DNS und NIS stellt sie eine Abbildung zwischen Namen und
- IP-Adressen zur Verfügung. Anstatt &man.named.8;
- zu konfigurieren, können hier lokale Rechner, die über
- ein LAN verbunden sind, eingetragen werden. Lokale Einträge
- für gebräuchliche Internet-Adressen in
- <filename>/etc/hosts</filename> verhindern die Abfrage eines
- externen Servers und beschleunigen die Namensauflösung.</para>
-
- <programlisting># &dollar;FreeBSD&dollar;
-#
-#
-# Host Database
-#
-# This file should contain the addresses and aliases for local hosts that
-# share this file. Replace 'my.domain' below with the domainname of your
-# machine.
-#
-# In the presence of the domain name service or NIS, this file may
-# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
-#
-#
-::1 localhost localhost.my.domain
-127.0.0.1 localhost localhost.my.domain
-#
-# Imaginary network.
-#10.0.0.2 myname.my.domain myname
-#10.0.0.3 myfriend.my.domain myfriend
-#
-# According to RFC 1918, you can use the following IP networks for
-# private nets which will never be connected to the Internet:
-#
-# 10.0.0.0 - 10.255.255.255
-# 172.16.0.0 - 172.31.255.255
-# 192.168.0.0 - 192.168.255.255
-#
-# In case you want to be able to connect to the Internet, you need
-# real official assigned numbers. Do not try to invent your own network
-# numbers but instead get one from your network provider (if any) or
-# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
-#</programlisting>
-
- <para><filename>/etc/hosts</filename> hat ein einfaches Format:</para>
- <programlisting>[Internet Adresse] [Offizieller Hostname] [Alias1] [Alias2] ...</programlisting>
-
- <para>Zum Beispiel:</para>
-
- <programlisting>10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2</programlisting>
-
- <para>Weitere Informationen entnehmen Sie bitte &man.hosts.5;.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Konfiguration von Logdateien</title>
-
- <indexterm><primary>Logdateien</primary></indexterm>
-
- <sect3>
- <title><filename>syslog.conf</filename></title>
-
- <indexterm><primary>syslog.conf</primary></indexterm>
-
- <para><filename>syslog.conf</filename> ist die Konfigurationsdatei
- von &man.syslogd.8;. Sie legt fest, welche
- <application>syslog</application> Meldungen in welche
- Logdateien geschrieben werden.</para>
-
- <programlisting># &dollar;FreeBSD&dollar;
-#
-# Spaces ARE valid field separators in this file. However,
-# other *nix-like systems still insist on using tabs as field
-# separators. If you are sharing this file between systems, you
-# may want to use only tabs as field separators here.
-# Consult the syslog.conf(5) manpage.
-*.err;kern.debug;auth.notice;mail.crit /dev/console
-*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
-security.* /var/log/security
-mail.info /var/log/maillog
-lpr.info /var/log/lpd-errs
-cron.* /var/log/cron
-*.err root
-*.notice;news.err root
-*.alert root
-*.emerg *
-# uncomment this to log all writes to /dev/console to /var/log/console.log
-#console.info /var/log/console.log
-# uncomment this to enable logging of all log messages to /var/log/all.log
-#*.* /var/log/all.log
-# uncomment this to enable logging to a remote log host named loghost
-#*.* @loghost
-# uncomment these if you're running inn
-# news.crit /var/log/news/news.crit
-# news.err /var/log/news/news.err
-# news.notice /var/log/news/news.notice
-!startslip
-*.* /var/log/slip.log
-!ppp
-*.* /var/log/ppp.log</programlisting>
-
- <para>Weitere Informationen enthält &man.syslog.conf.5;.</para>
- </sect3>
-
- <sect3>
- <title><filename>newsyslog.conf</filename></title>
-
- <indexterm><primary>newsyslog.conf</primary></indexterm>
-
- <para>Die Konfigurationsdatei für &man.newsyslog.8;, das
- normalerweise von &man.cron.8; aufgerufen wird, ist
- <filename>newsyslog.conf</filename>. &man.newsyslog.8;
- stellt fest, ob Logdateien archiviert oder verschoben
- werden müssen. So wird <filename>logfile</filename>
- nach <filename>logfile.0</filename> geschoben und
- <filename>logfile.0</filename> nach <filename>logfile.1</filename>
- usw. Zudem können Logdateien mit &man.gzip.1;
- komprimiert werden. Die Namen der Logdateien sind dann
- <filename>logfile.0.gz</filename>, <filename>logfile.1.gz</filename>
- usw.</para>
-
- <para><filename>newsyslog.conf</filename> legt fest, welche
- Logdateien wann bearbeitet und wie viele Dateien behalten werden.
- Logdateien können auf Basis ihrer Größe oder zu
- einem gewissen Zeitpunkt archiviert bzw. umbenannt werden.</para>
-
- <programlisting># configuration file for newsyslog
-# &dollar;FreeBSD&dollar;
-#
-# filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num]
-/var/log/cron 600 3 100 * Z
-/var/log/amd.log 644 7 100 * Z
-/var/log/kerberos.log 644 7 100 * Z
-/var/log/lpd-errs 644 7 100 * Z
-/var/log/maillog 644 7 * @T00 Z
-/var/log/sendmail.st 644 10 * 168 B
-/var/log/messages 644 5 100 * Z
-/var/log/all.log 600 7 * @T00 Z
-/var/log/slip.log 600 3 100 * Z
-/var/log/ppp.log 600 3 100 * Z
-/var/log/security 600 10 100 * Z
-/var/log/wtmp 644 3 * @01T05 B
-/var/log/daily.log 640 7 * @T00 Z
-/var/log/weekly.log 640 5 1 $W6D0 Z
-/var/log/monthly.log 640 12 * $M1D0 Z
-/var/log/console.log 640 5 100 * Z</programlisting>
-
- <para>Um mehr zu erfahren, lesen Sie bitte &man.newsyslog.8;.</para>
- </sect3>
- </sect2>
-
- <sect2 id="configtuning-sysctlconf">
- <title><filename>sysctl.conf</filename></title>
-
- <indexterm><primary>sysctl.conf</primary></indexterm>
- <indexterm><primary>sysctl</primary></indexterm>
-
- <para><filename>sysctl.conf</filename> sieht ähnlich
- wie <filename>rc.conf</filename> aus. Werte werden in der
- Form <literal>Variable=Wert</literal> gesetzt.
- Die angegebenen Werte werden gesetzt, nachdem sich das
- System bereits im Mehrbenutzermodus befindet. Allerdings
- lassen sich im Mehrbenutzermodus nicht alle Werte
- setzen.</para>
-
- <para>Um das Protokollieren von fatalen Signalen abzustellen
- und Benutzer daran zu hindern, von anderen Benutzern
- gestartete Prozesse zu sehen, können Sie in der
- Datei <filename>sysctl.conf</filename> die folgenden
- Variablen setzen:</para>
-
- <programlisting># Do not log fatal signal exits (e.g. sig 11)
-kern.logsigexit=0
-
-# Prevent users from seeing information about processes that
-# are being run under another UID.
-security.bsd.see_other_uids=0</programlisting>
-
- </sect2>
- </sect1>
-
- <sect1 id="configtuning-sysctl">
- <title>Einstellungen mit sysctl</title>
-
- <indexterm><primary>sysctl</primary></indexterm>
- <indexterm>
- <primary>Einstellungen</primary>
- <secondary>mit sysctl</secondary>
- </indexterm>
-
- <para>Mit &man.sysctl.8; können Sie Änderungen an
- einem laufenden &os;-System vornehmen. Unter anderem
- können Optionen des TCP/IP-Stacks oder des
- virtuellen Speichermanagements verändert werden. Unter
- der Hand eines erfahrenen Systemadministrators kann dies
- die Systemperformance erheblich verbessern. Über 500
- Variablen können mit &man.sysctl.8; gelesen und gesetzt
- werden.</para>
-
- <para>Der Hauptzweck von &man.sysctl.8; besteht darin, Systemeinstellungen
- zu lesen und zu verändern.</para>
-
- <para>Alle auslesbaren Variablen werden wie folgt angezeigt:</para>
-
- <screen>&prompt.user; <userinput>sysctl -a</userinput></screen>
-
- <para>Sie können auch eine spezielle Variable, z.B.
- <varname>kern.maxproc</varname> lesen:</para>
-
- <screen>&prompt.user; <userinput>sysctl kern.maxproc</userinput>
-kern.maxproc: 1044</screen>
-
- <para>Um eine Variable zu setzen, benutzen Sie die Syntax
- <replaceable>Variable</replaceable>=
- <replaceable>Wert</replaceable>:</para>
-
- <screen>&prompt.root; <userinput>sysctl kern.maxfiles=5000</userinput>
-kern.maxfiles: 2088 -&gt; 5000</screen>
-
- <para>Mit sysctl können Sie Strings, Zahlen oder
- Boolean-Werte setzen. Bei Boolean-Werten setzen sie <literal>1</literal>
- für wahr und <literal>0</literal> für falsch.</para>
-
- <para>Wenn Sie Variablen automatisch während des Systemstarts
- setzen wollen, fügen Sie die Variablen in die Datei
- <filename>/etc/sysctl.conf</filename> ein. Weiteres
- entnehmen Sie bitte der Hilfeseite &man.sysctl.conf.5;
- und dem <xref linkend="configtuning-sysctlconf"/>.</para>
-
- <sect2 id="sysctl-readonly">
- <sect2info>
- <authorgroup>
- <author>
- <firstname>Tom</firstname>
- <surname>Rhodes</surname>
- <contrib>Contributed by </contrib>
- </author>
- </authorgroup>
- </sect2info>
- <title>Schreibgeschützte Variablen</title>
-
- <para>Schreibgeschützte sysctl-Variablen können nur
- während des Systemstarts verändert werden.</para>
-
- <para>Beispielsweise hat &man.cardbus.4; auf einigen Laptops
- Schwierigkeiten, Speicherbereiche zu erkennen. Es treten
- dann Fehlermeldungen wie die folgende auf:</para>
-
- <screen>cbb0: Could not map register memory
-device_probe_and_attach: cbb0 attach returned 12</screen>
-
- <para>Um dieses Problem zu lösen, muss eine
- schreibgeschützte sysctl-Variable verändert
- werden. Eine <acronym>OID</acronym> kann in der Datei
- <filename>/boot/loader.conf</filename> überschrieben
- werden. Die Datei <filename>/boot/defaults/loader.conf</filename>
- enthält Vorgabewwerte für sysctl-Variablen.</para>
-
- <para>Das oben erwähnte Problem wird durch die Angabe von
- <option>hw.pci.allow_unsupported_io_range=1</option> in
- <filename>/boot/loader.conf</filename> gelöst.
- Danach sollte &man.cardbus.4; fehlerfrei funktionieren.</para>
- </sect2>
- </sect1>
-
- <sect1 id="configtuning-disk">
- <title>Tuning von Laufwerken</title>
-
- <sect2>
- <title>Sysctl Variablen</title>
-
- <sect3>
- <title><varname>vfs.vmiodirenable</varname></title>
-
- <indexterm>
- <primary><varname>vfs.vmiodirenable</varname></primary>
- </indexterm>
-
- <para>Die Variable <varname>vfs.vmiodirenable</varname> besitzt
- in der Voreinstellung den Wert 1. Die Variable kann auf den Wert
- 0 (ausgeschaltet) oder 1 (angeschaltet) gesetzt werden. Sie
- steuert, wie Verzeichnisse vom System zwischengespeichert
- werden. Die meisten Verzeichnisse sind klein und benutzen
- nur ein einzelnes Fragment, typischerweise 1&nbsp;kB,
- im Dateisystem. Im Buffer-Cache verbrauchen sie mit
- 512&nbsp;Bytes noch weniger Platz. Ist die Variable
- ausgeschaltet (auf 0) wird der Buffer-Cache nur
- eine limitierte Anzahl Verzeichnisse zwischenspeichern, auch
- wenn das System über sehr viel Speicher verfügt.
- Ist die Variable aktiviert (auf 1), kann der Buffer-Cache den
- VM-Page-Cache benutzen, um Verzeichnisse zwischenzuspeichern.
- Der ganze Speicher steht damit zum Zwischenspeichern von
- Verzeichnissen zur Verfügung. Der Nachteil bei dieser
- Vorgehensweise ist, dass zum Zwischenspeichern eines
- Verzeichnisses mindestens eine physikalische Seite im
- Speicher, die normalerweise 4&nbsp;kB groß ist,
- anstelle von 512&nbsp;Bytes gebraucht wird. Wir empfehlen,
- diese Option aktiviert zu lassen, wenn Sie Dienste zur
- Verfügung stellen, die viele Dateien manipulieren.
- Beispiele für solche Dienste sind Web-Caches,
- große Mail-Systeme oder Netnews. Die aktivierte
- Variable vermindert, trotz des verschwendeten Speichers,
- in aller Regel nicht die Leistung des Systems, obwohl Sie
- das nachprüfen sollten.</para>
- </sect3>
-
- <sect3>
- <title><varname>vfs.write_behind</varname></title>
-
- <indexterm>
- <primary><varname>vfs.write_behind</varname></primary>
- </indexterm>
-
- <para>In der Voreinstellung besitzt die Variable
- <varname>vfs.write_behind</varname> den Wert
- <literal>1</literal> (aktiviert). Mit dieser Einstellung
- schreibt das Dateisystem anfallende vollständige Cluster,
- die besonders beim sequentiellen Schreiben großer Dateien
- auftreten, direkt auf das Medium aus. Dies verhindert,
- dass sich im Buffer-Cache veränderte Puffer
- (<foreignphrase>dirty buffers</foreignphrase>) ansammeln,
- die die I/O-Verarbeitung nicht mehr beschleunigen
- würden. Unter bestimmten Umständen blockiert
- diese Funktion allerdings Prozesse. Setzen Sie in diesem
- Fall die Variable <varname>vfs.write_behind</varname> auf
- den Wert <literal>0</literal>.</para>
- </sect3>
-
- <sect3>
- <title><varname>vfs.hirunningspace</varname></title>
-
- <indexterm>
- <primary><varname>vfs.hirunningspace</varname></primary>
- </indexterm>
-
- <para>Die Variable <varname>vfs.hirunningspace</varname>
- bestimmt systemweit die Menge ausstehender Schreiboperationen,
- die dem Platten-Controller zu jedem beliebigen Zeitpunkt
- übergeben werden können. Normalerweise können
- Sie den Vorgabewert verwenden. Auf Systemen mit
- vielen Platten kann der Wert aber auf 4 bis
- 5&nbsp;<emphasis>Megabyte</emphasis> erhöht werden.
- Beachten Sie, dass ein zu hoher Wert (größer
- als der Schreib-Schwellwert des Buffer-Caches) zu
- Leistungverlusten führen kann. Setzen Sie den Wert daher
- nicht zu hoch! Hohe Werte können auch Leseoperationen
- verzögern, die gleichzeitig mit Schreiboperationen
- ausgeführt werden.</para>
-
- <para>Es gibt weitere Variablen, mit denen Sie den Buffer-Cache
- und den VM-Page-Cache beeinflussen können. Wir raten
- Ihnen allerdings davon ab, diese Variablen zu verändern,
- da das VM-System den virtuellen Speicher selbst sehr gut
- verwaltet.</para>
- </sect3>
-
- <sect3>
- <title><varname>vm.swap_idle_enabled</varname></title>
-
- <indexterm>
- <primary><varname>vm.swap_idle_enabled</varname></primary>
- </indexterm>
-
- <para>Die Variable <varname>vm.swap_idle_enabled</varname>
- ist für große Mehrbenutzer-Systeme gedacht, auf
- denen sich viele Benutzer an- und abmelden und auf denen
- es viele Prozesse im Leerlauf
- (<foreignphrase>idle</foreignphrase>) gibt. Solche Systeme
- fragen kontinuierlich freien Speicher an. Wenn Sie die
- Variable <varname>vm.swap_idle_enabled</varname> aktivieren,
- können Sie die Auslagerungs-Hysterese von Seiten mit
- den Variablen <varname>vm.swap_idle_threshold1</varname> und
- <varname>vm.swap_idle_threshold2</varname> einstellen. Die
- Schwellwerte beider Variablen geben die Zeit in Sekunden an,
- in denen sich ein Prozess im Leerlauf befinden muss. Wenn die
- Werte so eingestellt sind, dass Seiten früher als nach dem
- normalen Algorithmus ausgelagert werden, verschafft das dem
- Auslagerungs-Prozess mehr Luft. Aktivieren Sie diese Funktion
- nur, wenn Sie sie wirklich benötigen: Die Speicherseiten
- werden eher früher als später ausgelagert. Der
- Platz im Swap-Bereich wird dadurch schneller verbraucht und
- die Plattenaktivitäten steigen an. Auf kleine Systeme
- hat diese Funktion spürbare Auswirkungen. Auf großen
- Systemen, die sowieso schon Seiten auslagern müssen,
- können ganze Prozesse leichter in den Speicher geladen
- oder ausgelagert werden.</para>
- </sect3>
-
- <sect3>
- <title><varname>hw.ata.wc</varname></title>
-
- <indexterm>
- <primary><varname>hw.ata.wc</varname></primary>
- </indexterm>
-
- <para>In &os;&nbsp;4.3 wurde versucht, den IDE-Schreib-Zwischenspeicher
- abzustellen. Obwohl dies die Bandbreite zum Schreiben auf
- IDE-Platten verringerte, wurde es aus Gründen der
- Datenkonsistenz als notwenig angesehen. Der Kern des
- Problems ist, dass IDE-Platten keine zuverlässige
- Aussage über das Ende eines Schreibvorgangs treffen.
- Wenn der Schreib-Zwischenspeicher aktiviert ist, werden die Daten
- nicht in der Reihenfolge ihres Eintreffens geschrieben. Es kann
- sogar passieren, dass das Schreiben mancher Blöcke
- im Fall von starker Plattenaktivität auf unbefristete
- Zeit verzögert wird. Ein Absturz oder Stromausfall
- zu dieser Zeit kann die Dateisysteme erheblich beschädigen.
- Wir entschieden uns daher für die sichere Variante
- und stellten den Schreib-Zwischenspeicher ab. Leider war
- damit auch ein großer Leistungsverlust verbunden, so
- dass wir die Variable
- nach dem Release wieder aktiviert haben. Sie sollten den
- Wert der Variable <varname>hw.ata.wc</varname> auf Ihrem
- System überprüfen. Wenn der Schreib-Zwischenspeicher
- abgestellt ist, können Sie ihn aktivieren, indem Sie die
- Variable auf den Wert 1 setzen. Dies muss zum Zeitpunkt
- des Systemstarts im Boot-Loader geschehen. Eine Änderung
- der Variable, nachdem der Kernel gestartet ist, hat keine
- Auswirkungen.</para>
-
- <para>Weitere Informationen finden Sie in &man.ata.4;.</para>
- </sect3>
-
- <sect3>
- <title><literal>SCSI_DELAY</literal>
- (<varname>kern.cam.scsi_delay</varname>)</title>
-
- <indexterm>
- <primary><varname>kern.cam.scsi_delay</varname></primary>
- </indexterm>
-
- <indexterm>
- <primary>Kerneloptionen</primary>
- <secondary><literal>SCSI_DELAY</literal></secondary>
- </indexterm>
-
- <para>Mit der Kerneloption <literal>SCSI_DELAY</literal> kann
- die Dauer des Systemstarts verringert werden. Der Vorgabewert
- ist recht hoch und er verzögert den Systemstart um 15 oder
- mehr Sekunden. Normalerweise kann dieser Wert, insbesondere
- mit modernen Laufwerken, auf 5&nbsp;Sekunden heruntergesetzt
- werden (durch Setzen der <command>sysctl</command>-Variable
- <varname>kern.cam.scsi_delay</varname>). Die Variable
- sowie die Kerneloption verwenden für die Zeitangabe
- Millisekunden und <emphasis>nicht</emphasis> Sekunden.</para>
- </sect3>
- </sect2>
-
- <sect2 id="soft-updates">
- <title>Soft Updates</title>
-
- <indexterm><primary>Soft Updates</primary></indexterm>
- <indexterm><primary>tunefs</primary></indexterm>
-
- <para>Mit &man.tunefs.8; lassen sich Feineinstellungen an
- Dateisystemen vornehmen. Das Programm hat verschiedene Optionen,
- von denen hier nur Soft Updates betrachtet werden. Soft Updates
- werden wie folgt ein- und ausgeschaltet:</para>
-
- <screen>&prompt.root; <userinput>tunefs -n enable /filesystem</userinput>
-&prompt.root; <userinput>tunefs -n disable /filesystem</userinput></screen>
-
- <para>Ein eingehängtes Dateisystem kann nicht mit &man.tunefs.8;
- modifiziert werden. Soft Updates werden am besten im Single-User
- Modus aktiviert, bevor Partitionen eingehangen sind.</para>
-
- <para>Durch Einsatz eines Zwischenspeichers wird die Performance
- im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen
- von Dateien, gesteigert. Wir empfehlen, Soft Updates auf allen
- Dateisystemen zu aktivieren. Allerdings sollten Sie sich über
- die zwei Nachteile von Soft Updates bewusst sein:
- Erstens garantieren Soft Updates zwar die Konsistenz der Daten
- im Fall eines Absturzes, aber es kann leicht passieren, dass
- das Dateisystem über mehrere Sekunden oder gar eine Minute
- nicht synchronisiert wurde. Im Fall eines Absturzes verlieren
- Sie mit Soft Updates unter Umständen mehr Daten als ohne.
- Zweitens verzögern Soft Updates die Freigabe von
- Datenblöcken. Eine größere Aktualisierung
- eines fast vollen Dateisystems, wie dem Root-Dateisystem,
- z.B. während eines <command>make installworld</command>,
- kann das Dateisystem vollaufen lassen. Dadurch würde
- die Aktualisierung fehlschlagen.</para>
-
- <sect3>
- <title>Details über Soft Updates</title>
-
- <indexterm>
- <primary>Soft Updates</primary>
- <secondary>Details</secondary>
- </indexterm>
-
- <para>Es gibt zwei klassische Herangehensweisen, wie
- man die Metadaten des Dateisystems (also Daten
- über Dateien, wie inode Bereiche oder Verzeichniseinträge)
- aktualisiert auf die Platte zurückschreibt:</para>
-
- <para>Das historisch übliche Verfahren waren synchrone
- Updates der Metadaten, d. h. wenn eine Änderung an
- einem Verzeichnis nötig war, wurde anschließend
- gewartet, bis diese Änderung tatsächlich auf die
- Platte zurückgeschrieben worden war. Der
- <emphasis>Inhalt</emphasis> der Dateien wurde im
- <quote>Buffer Cache</quote> zwischengespeichert und
- asynchron irgendwann später auf die Platte geschrieben.
- Der Vorteil dieser Implementierung ist, dass sie
- sicher funktioniert. Wenn während eines Updates ein
- Ausfall erfolgt, haben die Metadaten immer einen
- konsistenten Zustand. Eine Datei ist entweder komplett
- angelegt oder gar nicht. Wenn die Datenblöcke einer
- Datei im Fall eines Absturzes noch nicht den Weg aus dem
- <quote>Buffer Cache</quote> auf die Platte gefunden haben,
- kann &man.fsck.8; das Dateisystem reparieren, indem es die
- Dateilänge einfach auf 0 setzt. Außerdem
- ist die Implementierung einfach und überschaubar. Der
- Nachteil ist, dass Änderungen der Metadaten sehr
- langsam vor sich gehen. Ein <command>rm -r</command>
- beispielsweise fasst alle Dateien eines Verzeichnisses
- der Reihe nach an, aber jede dieser Änderungen am
- Verzeichnis (Löschen einer Datei) wird einzeln synchron
- auf die Platte geschrieben. Gleiches beim Auspacken
- großer Hierarchien (<command>tar -x</command>).</para>
-
- <para>Der zweite Fall sind asynchrone Metadaten-Updates. Das
- ist z. B. der Standard bei Linux/ext2fs oder die Variante
- <command>mount -o async</command> für *BSD UFS. Man
- schickt die Updates der Metadaten einfach auch noch
- über den <quote>Buffer Cache</quote>, sie werden also
- zwischen die Updates der normalen Daten eingeschoben.
- Vorteil ist, dass man nun nicht mehr auf jeden Update
- warten muss, Operationen, die zahlreiche Metadaten
- ändern, werden also viel schneller. Auch
- hier ist die Implementierung sehr einfach und wenig
- anfällig für Fehler. Nachteil ist, dass
- keinerlei Konsistenz des Dateisystems mehr gesichert ist.
- Wenn mitten in einer Operation, die viele Metadaten
- ändert, ein Ausfall erfolgt (Stromausfall, drücken
- des Reset-Tasters), dann ist das Dateisystem
- anschließend in einem unbestimmten Zustand. Niemand
- kann genau sagen, was noch geschrieben worden ist und was
- nicht mehr; die Datenblöcke einer Datei können
- schon auf der Platte stehen, während die inode Tabelle
- oder das zugehörige Verzeichnis nicht mehr aktualisiert
- worden ist. Man kann praktisch kein <command>fsck</command>
- mehr implementieren, das diesen Zustand
- wieder reparieren kann, da die dazu nötigen
- Informationen einfach auf der Platte fehlen. Wenn ein
- Dateisystem derart beschädigt worden ist, kann man es
- nur neu erzeugen (&man.newfs.8;) und die Daten
- vom Backup zurückspielen.
- </para>
-
- <para>Der historische Ausweg aus diesem Dilemma war ein
- <emphasis>dirty region logging</emphasis> (auch als
- <emphasis>Journalling</emphasis> bezeichnet, wenngleich
- dieser Begriff nicht immer gleich benutzt und manchmal auch
- für andere Formen von Transaktionsprotokollen gebraucht
- wird). Man schreibt die Metadaten-Updates zwar synchron,
- aber nur in einen kleinen Plattenbereich, die
- <emphasis>logging area</emphasis>. Von da aus werden sie
- dann asynchron auf ihre eigentlichen Bereiche verteilt. Da
- die <emphasis>logging area</emphasis> ein kleines
- zusammenhängendes Stückchen ist, haben die
- Schreibköpfe der Platte bei massiven Operationen auf
- Metadaten keine allzu großen Wege zurückzulegen,
- so dass alles ein ganzes Stück schneller geht als
- bei klassischen synchronen Updates. Die Komplexität
- der Implementierung hält sich ebenfalls in Grenzen,
- somit auch die Anfälligkeit für Fehler. Als
- Nachteil ergibt sich, dass Metadaten zweimal auf die
- Platte geschrieben werden müssen (einmal in die
- <emphasis>logging area</emphasis>, einmal an die richtige
- Stelle), so dass das im Falle regulärer
- Arbeit (also keine gehäuften Metadatenoperationen) eine
- <quote>Pessimisierung</quote> des Falls der synchronen
- Updates eintritt, es wird alles langsamer. Dafür hat man
- als Vorteil, dass im Falle eines Crashes der
- konsistente Zustand dadurch erzielbar ist, dass die
- angefangenen Operationen aus dem <emphasis>dirty region
- log</emphasis> entweder zu Ende ausgeführt oder
- komplett verworfen werden, wodurch das Dateisystem schnell
- wieder zur Verfügung steht.</para>
-
- <para>Die Lösung von Kirk McKusick, dem Schöpfer von
- Berkeley FFS, waren <emphasis>Soft Updates</emphasis>: die
- notwendigen Updates der Metadaten werden im Speicher
- gehalten und dann sortiert auf die Platte geschrieben
- (<quote>ordered metadata updates</quote>). Dadurch hat man
- den Effekt, dass im Falle massiver
- Metadaten-Änderungen spätere Operationen die
- vorhergehenden, noch nicht auf die Platte geschriebenen
- Updates desselben Elements im Speicher
- <quote>einholen</quote>. Alle Operationen, auf ein
- Verzeichnis beispielsweise, werden also in der Regel noch im
- Speicher abgewickelt, bevor der Update überhaupt auf
- die Platte geschrieben wird (die dazugehörigen
- Datenblöcke werden natürlich auch so sortiert,
- dass sie nicht vor ihren Metadaten auf der Platte
- sind). Im Fall eines Absturzes hat man ein implizites <quote>log
- rewind</quote>: alle Operationen, die noch nicht den Weg auf
- die Platte gefunden haben, sehen danach so aus, als
- hätten sie nie stattgefunden. Man hat so also den
- konsistenten Zustand von ca. 30 bis 60&nbsp;Sekunden früher
- sichergestellt. Der verwendete Algorithmus garantiert
- dabei, dass alle tatsächlich benutzten Ressourcen
- auch in den entsprechenden Bitmaps (Block- und inode
- Tabellen) als belegt markiert sind. Der einzige Fehler, der
- auftreten kann, ist, dass Ressourcen noch als
- <quote>belegt</quote> markiert sind, die tatsächlich
- <quote>frei</quote> sind. &man.fsck.8; erkennt dies und
- korrigiert diese nicht mehr belegten Ressourcen. Die
- Notwendigkeit eines Dateisystem-Checks darf aus diesem
- Grunde auch ignoriert und das Dateisystem mittels
- <command>mount -f</command> zwangsweise eingebunden werden.
- Um noch allozierte Ressourcen freizugeben muss
- später ein &man.fsck.8; nachgeholt werden. Das ist
- dann auch die Idee des <emphasis>background fsck</emphasis>:
- beim Starten des Systems wird lediglich ein
- <emphasis>Schnappschuss</emphasis> des Filesystems
- gemacht, mit dem &man.fsck.8; dann später arbeiten
- kann. Alle Dateisysteme dürfen <quote>unsauber</quote>
- eingebunden werden und das System kann sofort in den
- Multiuser-Modus gehen. Danach wird ein
- Hintergrund-<command>fsck</command> für die
- Dateisysteme gestartet, die dies benötigen, um
- möglicherweise irrtümlich belegte Ressourcen
- freizugeben. (Dateisysteme ohne <emphasis>Soft
- Updates</emphasis> benötigen natürlich immer noch
- den üblichen (Vordergrund-)<command>fsck</command>,
- bevor sie eingebunden werden können.)</para>
-
- <para>Der Vorteil ist, dass die Metadaten-Operationen
- beinahe so schnell ablaufen wie im asynchronen Fall (also
- durchaus auch schneller als beim <quote>logging</quote>, das
- ja die Metadaten immer zweimal schreiben muss). Als
- Nachteil stehen dem die Komplexität des Codes (mit
- einer erhöhten Fehlerwahrscheinlichkeit in einem
- bezüglich Datenverlust hoch sensiblen Bereich) und ein
- erhöhter Speicherverbrauch entgegen. Außerdem
- muss man sich an einige Eigenheiten
- gewöhnen: Nach einem Absturz ist ein etwas älterer
- Stand auf der Platte &ndash; statt einer leeren, aber bereits
- angelegten Datei (wie nach einem herkömmlichen
- <command>fsck</command> Lauf) ist auf einem Dateisystem mit
- <emphasis>Soft Updates</emphasis> keine Spur der
- entsprechenden Datei mehr zu sehen, da weder die Metadaten
- noch der Dateiinhalt je auf die Platte geschrieben wurden.
- Weiterhin kann der Platz nach einem <command>rm -r</command>
- nicht sofort wieder als verfügbar markiert werden,
- sondern erst dann, wenn der Update auch auf die Platte
- vermittelt worden ist. Dies kann besonders dann Probleme
- bereiten, wenn große Datenmengen in einem Dateisystem
- ersetzt werden, das nicht genügend Platz hat, um alle
- Dateien zweimal unterzubringen.</para>
- </sect3>
- </sect2>
- </sect1>
-
- <sect1 id="configtuning-kernel-limits">
- <title>Einstellungen von Kernel Limits</title>
-
- <indexterm>
- <primary>Einstellungen</primary>
- <secondary>von Kernel Limits</secondary>
- </indexterm>
-
- <sect2 id="file-process-limits">
- <title>Datei und Prozeß Limits</title>
-
- <sect3 id="kern-maxfiles">
- <title><varname>kern.maxfiles</varname></title>
-
- <indexterm>
- <primary><varname>kern.maxfiles</varname></primary>
- </indexterm>
-
- <para>Abhängig von den Anforderungen Ihres Systems
- kann <varname>kern.maxfiles</varname> erhöht oder
- erniedrigt werden. Die Variable legt die maximale
- Anzahl von Dateideskriptoren auf Ihrem System fest. Wenn
- die Dateideskriptoren aufgebraucht sind, werden Sie
- die Meldung <errorname>file: table is full</errorname>
- wiederholt im Puffer für Systemmeldungen sehen. Den
- Inhalt des Puffers können Sie sich mit <command>dmesg</command>
- anzeigen lassen.</para>
-
- <para>Jede offene Datei, jedes Socket und jede FIFO verbraucht
- einen Dateideskriptor. Auf <quote>dicken</quote> Produktionsservern
- können leicht Tausende Dateideskriptoren benötigt
- werden, abhängig von der Art und Anzahl der gleichzeitig
- laufenden Dienste.</para>
-
- <para>In älteren &os;-Versionen wurde die Voreinstellung
- von <varname>kern.maxfile</varname> aus der
- Kernelkonfigurationsoption <literal>maxusers</literal>
- bestimmt. <varname>kern.maxfiles</varname> wächst
- proportional mit dem Wert von <literal>maxusers</literal>.
- Wenn Sie einen angepassten Kernel kompilieren, empfiehlt es sich
- diese Option entsprechend der maximalen Benutzerzahl Ihres
- Systems einzustellen. Obwohl auf einer Produktionsmaschine
- vielleicht nicht 256 Benutzer gleichzeitig angemeldet sind,
- können die benötigten Ressourcen ähnlich denen
- eines großen Webservers sein.</para>
-
- <para>Die Variable <varname>kern.maxusers</varname> wird beim
- Systemstart automatisch aus dem zur Verfügung stehenden
- Hauptspeicher bestimmt. Im laufenden Betrieb kann dieser Wert
- aus der (nur lesbaren) sysctl-Variable
- <varname>kern.maxusers</varname> ermittelt werden. Falls ein
- System für diese Variable einen anderen Wert benötigt,
- kann der Wert über den Loader angepasst werden.
- Häufig verwendete Werte sind dabei 64, 128, sowie 256.
- Es ist empfehlenswert, die Anzahl der Dateideskriptoren nicht
- auf einen Wert größer 256 zu setzen, es sei denn,
- Sie benötigen wirklich eine riesige Anzahl von ihnen.
- Viele der von <varname>kern.maxusers</varname> auf einen
- Standardwert gesetzten Parameter können beim Systemstart
- oder im laufenden Betrieb in der Datei
- <filename>/boot/loader.conf</filename> (sehen Sie sich dazu
- auch &man.loader.conf.5; sowie die Datei
- <filename>/boot/defaults/loader.conf</filename> an) an Ihre
- Bedürfnisse angepasst werden, so wie es bereits an anderer
- Stelle dieses Dokuments beschrieben ist.</para>
-
- <para>Ältere &os;-Versionen setzen diesen Wert selbst,
- wenn Sie in der Konfigurationsdatei den Wert <literal>0</literal>
- <footnote><para>Der verwendete Algorithmus setzt
- <literal>maxusers</literal> auf die Speichergröße
- des Systems. Der minimale Wert beträgt dabei
- <literal>32</literal>, das Maximum ist
- <literal>384</literal>.</para></footnote>
- angeben. Wenn Sie den Wert selbst bestimmen wollen,
- sollten Sie <literal>maxusers</literal> mindestens auf
- <literal>4</literal> setzen. Dies gilt insbesondere dann,
- wenn Sie beabsichtigen, das X&nbsp;Window-System zu benutzen
- oder Software zu kompilieren. Der Grund dafür ist, dass
- der wichtigste Wert, der durch <literal>maxusers</literal>
- bestimmt wird, die maximale Anzahl an Prozessen ist, die auf
- <literal>20 + 16 * maxusers</literal> gesetzt wird. Wenn Sie
- also <literal>maxusers</literal> auf 1 setzen, können
- gleichzeitig nur 36 Prozesse laufen, von denen ungefähr
- 18 schon beim Booten des Systems gestartet werden. Dazu
- kommen nochmals etwa 15 Prozesse beim Start des
- X&nbsp;Window-Systems. Selbst eine einfache Aufgabe wie das
- Lesen einer Manualpage benötigt neun Prozesse zum Filtern,
- Dekomprimieren und Betrachten der Datei. Für die meisten
- Benutzer sollte es ausreichen, <literal>maxusers</literal> auf
- 64 zu setzen, womit 1044 gleichzeitige Prozesse zur
- Verfügung stehen. Wenn Sie allerdings den
- gefürchteten Fehler <errortype>proc table full</errortype>
- beim Start eines Programms oder auf einem Server mit einer
- großen Benutzerzahl (wie
- <hostid role="fqdn">ftp.FreeBSD.org</hostid>) sehen, dann
- sollten Sie den Wert nochmals erhöhen und den Kernel
- neu bauen.</para>
-
- <note><para>Die Anzahl der Benutzer, die sich auf einem Rechner
- anmelden kann, wird durch <literal>maxusers</literal>
- <emphasis>nicht</emphasis> begrenzt. Der Wert dieser
- Variablen legt neben der möglichen Anzahl der Prozesse
- eines Benutzers weitere sinnvolle Größen für
- bestimmte Systemtabellen fest.</para>
- </note>
- </sect3>
-
- <sect3>
- <title><varname>kern.ipc.somaxconn</varname></title>
-
- <indexterm>
- <primary><varname>kern.ipc.somaxconn</varname></primary>
- </indexterm>
-
- <para>Die Variable <varname>kern.ipc.somaxconn</varname>
- beschränkt die Größe der Warteschlange
- (<foreignphrase>Listen-Queue</foreignphrase>) für
- neue TCP-Verbindungen. Der Vorgabewert von
- <literal>128</literal> ist normalerweise zu klein, um neue
- Verbindungen auf einem stark ausgelasteten Webserver
- zuverlässig zu handhaben. Auf solchen Servern sollte
- der Wert auf <literal>1024</literal> oder höher gesetzt
- werden. Ein Dienst (z.B. &man.sendmail.8;, oder
- <application>Apache</application>) kann die Größe
- der Queue selbst einschränken. Oft gibt es die
- Möglichkeit, die Größe der Listen-Queue in
- einer Konfigurationsdatei einzustellen. Eine große
- Listen-Queue übersteht vielleicht auch einen
- Denial of Service Angriff (<abbrev>DoS</abbrev>).</para>
- </sect3>
- </sect2>
- <sect2 id="nmbclusters">
- <title>Netzwerk Limits</title>
-
- <para>Die Kerneloption <literal>NMBCLUSTERS</literal> schreibt
- die Anzahl der Netzwerkpuffer (Mbufs) fest, die das System besitzt.
- Eine zu geringe Anzahl Mbufs auf einem Server mit viel Netzwerkverkehr
- verringert die Leistung von &os;. Jeder Mbuf-Cluster nimmt
- ungefähr 2&nbsp;kB Speicher in Anspruch, so dass ein Wert
- von 1024 insgesamt 2&nbsp;Megabyte Speicher für Netzwerkpuffer
- im System reserviert. Wie viele Cluster benötigt werden,
- lässt sich durch eine einfache Berechnung herausfinden.
- Wenn Sie einen Webserver besitzen, der maximal 1000 gleichzeitige
- Verbindungen servieren soll und jede der Verbindungen je einen
- 16&nbsp;kB großen Puffer zum Senden und Empfangen braucht,
- brauchen Sie ungefähr 32&nbsp;MB Speicher für
- Netzwerkpuffer. Als Daumenregel verdoppeln Sie diese Zahl,
- so dass sich für <varname>NMBCLUSTERS</varname> der Wert
- 2x32&nbsp;MB&nbsp;/&nbsp;2&nbsp;kB&nbsp;= 32768 ergibt.
- Für Maschinen mit viel Speicher sollten Werte zwischen
- 4096 und 32768 genommen werden. Sie können diesen Wert
- nicht willkürlich erhöhen, da dies bereits zu einem
- Absturz beim Systemstart führen kann. Mit der Option
- <option>-m</option> von &man.netstat.1; können Sie den
- Gebrauch der Netzwerkpuffer kontrollieren.</para>
-
- <para>Die Netzwerkpuffer können beim Systemstart mit der
- Loader-Variablen <varname>kern.ipc.nmbclusters</varname>
- eingestellt werden. Nur auf älteren &os;-Systemen
- müssen Sie die Kerneloption <literal>NMBCLUSTERS</literal>
- verwenden.</para>
-
- <para>Die Anzahl der &man.sendfile.2; Puffer muss auf ausgelasteten
- Servern, die den Systemaufruf &man.sendfile.2; oft verwenden,
- vielleicht erhöht werden. Dazu können Sie die
- Kerneloption <literal>NSFBUFS</literal> verwenden oder die
- Anzahl der Puffer in <filename>/boot/loader.conf</filename>
- (siehe &man.loader.8;) setzen. Die Puffer sollten erhöht
- werden, wenn Sie Prozesse im Zustand <literal>sfbufa</literal>
- sehen. Die schreibgeschützte sysctl-Variable
- <varname>kern.ipc.nsfbufs</varname> zeigt die Anzahl
- eingerichteten Puffer im Kernel. Der Wert dieser Variablen
- wird normalerweise von <varname>kern.maxusers</varname> bestimmt.
- Manchmal muss die Pufferanzahl jedoch manuell eingestellt
- werden.</para>
-
- <important>
- <para>Auch wenn ein Socket nicht blockierend angelegt wurde,
- kann der Aufruf von &man.sendfile.2; blockieren, um auf
- freie <literal>struct sf_buf</literal> Puffer zu warten.</para>
- </important>
-
- <sect3>
- <title><varname>net.inet.ip.portrange.*</varname></title>
-
- <indexterm>
- <primary>net.inet.ip.portrange.*</primary>
- </indexterm>
-
- <para>Die sysctl-Variable <varname>net.inet.ip.portrange.*</varname>
- legt die Portnummern für TCP- und UDP-Sockets fest.
- Es gibt drei Bereiche: den niedrigen Bereich, den
- normalen Bereich und den hohen Bereich. Die meisten
- Netzprogramme benutzen den normalen Bereich. Dieser Bereich
- umfasst in der Voreinstellung die Portnummern 500 bis 5000
- und wird durch die Variablen
- <varname>net.inet.ip.portrange.first</varname> und
- <varname>net.inet.ip.portrange.last</varname> festgelegt.
- Die festgelegten Bereiche für Portnummern werden von
- ausgehenden Verbindungen benutzt. Unter bestimmten
- Umständen, beispielsweise auf stark ausgelasteten
- Proxy-Servern, sind alle Portnummern für ausgehende
- Verbindungen belegt. Bereiche
- für Portnummern spielen auf Servern keine Rolle, die
- hauptsächlich eingehende Verbindungen verarbeiten (wie ein
- normaler Webserver) oder nur eine begrenzte Anzahl ausgehender
- Verbindungen öffnen (beispielsweise ein Mail-Relay).
- Wenn Sie keine freien Portnummern mehr haben, sollten Sie
- die Variable <varname>net.inet.ip.portrange.last</varname>
- langsam erhöhen. Ein Wert von <literal>10000</literal>,
- <literal>20000</literal> oder <literal>30000</literal> ist
- angemessen. Beachten Sie auch eine vorhandene
- Firewall, wenn Sie die Bereiche für Portnummern
- ändern. Einige Firewalls sperren große Bereiche
- (normalerweise aus den kleinen Portnummern) und erwarten,
- dass hohe Portnummern für ausgehende Verbindungen
- verwendet werden. Daher kann es erforderlich sein, den
- Wert von <varname>net.inet.ip.portrange.first</varname>
- zu erhöhen.</para>
- </sect3>
-
- <sect3>
- <title>TCP Bandwidth Delay Product Begrenzung</title>
-
- <indexterm>
- <primary>TCP Bandwidth Delay Product Begrenzung</primary>
- <secondary>
- <varname>net.inet.tcp.inflight.enable</varname>
- </secondary>
- </indexterm>
-
- <para>Die TCP Bandwidth Delay Product Begrenzung gleicht
- TCP/Vegas von NetBSD. Die
- Begrenzung wird aktiviert, indem Sie die sysctl-Variable
- <varname>net.inet.tcp.inflight.enable</varname> auf den
- Wert <literal>1</literal> setzen. Das System wird dann
- versuchen, für jede Verbindung, das Produkt aus der
- Übertragungsrate und der Verzögerungszeit zu
- bestimmen. Dieses Produkt begrenzt die Datenmenge, die
- für einen optimales Durchsatz zwischengespeichert
- werden muss.</para>
-
- <para>Diese Begrenzung ist nützlich, wenn Sie Daten
- über Verbindungen mit einem hohen Produkt aus
- Übertragungsrate und Verzögerungszeit wie Modems,
- Gigabit-Ethernet oder schnellen WANs, zur Verfügung
- stellen. Insbesondere wirkt sich die Begrenzung aus, wenn
- die Verbindung die TCP-Option
- <foreignphrase>Window-scaling</foreignphrase> verwendet oder
- große Sende-Fenster
- (<foreignphrase>send window</foreignphrase>) benutzt.
- Schalten Sie die Debug-Meldungen aus, wenn Sie die Begrenzung
- aktiviert haben. Dazu setzen Sie die Variable
- <varname>net.inet.tcp.inflight.debug</varname> auf
- <literal>0</literal>. Auf Produktions-Systemen sollten Sie
- zudem die Variable <varname>net.inet.tcp.inflight.min</varname>
- mindestens auf den Wert <literal>6144</literal> setzen.
- Allerdings kann ein zu hoher Wert, abhängig von der
- Verbindung, die Begrenzungsfunktion unwirksam machen.
- Die Begrenzung reduziert die Datenmenge in den Queues von Routern
- und Switches, sowie die Datenmenge in der Queue der lokalen
- Netzwerkkarte. Die Verzögerungszeit
- (<foreignphrase>Round Trip Time</foreignphrase>) für
- interaktive Anwendungen sinkt, da weniger Pakete
- zwischengespeichert werden. Dies gilt besonders für
- Verbindungen über langsame Modems. Die Begrenzung
- wirkt sich allerdings nur auf das Versenden von Daten aus
- (Uploads, Server). Auf den Empfang von Daten (Downloads)
- hat die Begrenzung keine Auswirkungen.</para>
-
- <para>Die Variable <varname>net.inet.tcp.inflight.stab</varname>
- sollte <emphasis>nicht</emphasis> angepasst werden. Der
- Vorgabewert der Variablen beträgt <literal>20</literal>,
- das heißt es werden maximal zwei Pakete zu dem Produkt
- aus Übertragungsrate und Verzögerungszeit addiert.
- Dies stabilisiert den Algorithmus und verbessert die
- Reaktionszeit auf Veränderungen. Bei langsamen
- Verbindungen können sich aber die Laufzeiten der Pakete
- erhöhen (ohne diesen Algorithmus wären sie
- allerdings noch höher). In solchen Fällen
- können Sie versuchen, den Wert der Variablen auf
- <literal>15</literal>, <literal>10</literal> oder
- <literal>5</literal> zu erniedrigen. Gleichzeitig müssen
- Sie vielleicht auch <varname>net.inet.tcp.inflight.min</varname>
- auf einen kleineren Wert (beispielsweise <literal>3500</literal>)
- setzen. Ändern Sie diese Variablen nur ab, wenn Sie
- keine anderen Möglichkeiten mehr haben.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Virtueller Speicher (<foreignphrase>Virtual
- Memory</foreignphrase>)</title>
-
- <sect3>
- <title><varname>kern.maxvnodes</varname></title>
-
- <para>Ein vnode ist die interne Darstellung einer Datei oder
- eines Verzeichnisses. Die Erhöhung der Anzahl der
- für das Betriebssystem verfügbaren vnodes
- verringert also die Schreib- und Lesezugriffe auf
- Ihre Festplatte. vnodes werden im Normalfall vom
- Betriebssystem automatisch vergeben und müssen
- nicht von Ihnen angepasst werden. In einigen Fällen
- stellt der Zugriff auf eine Platte allerdings einen
- Flaschenhals dar, daher sollten Sie in diesem Fall die Anzahl
- der möglichen vnodes erhöhen, um dieses Problem zu
- beheben. Beachten Sie dabei aber die Größe
- des inaktiven und freien Hauptspeichers.</para>
-
- <para>Um die Anzahl der derzeit verwendeten vnodes zu sehen,
- geben Sie Folgendes ein:</para>
-
- <screen>&prompt.root; <userinput>sysctl vfs.numvnodes</userinput>
-vfs.numvnodes: 91349</screen>
-
- <para>Die maximal mögliche Anzahl der vnodes erhalten
- Sie durch die Eingabe von:</para>
-
- <screen>&prompt.root; <userinput>sysctl kern.maxvnodes</userinput>
-kern.maxvnodes: 100000</screen>
-
- <para>Wenn sich die Anzahl der genutzten vnodes dem maximal
- möglichen Wert nähert, sollten Sie den Wert
- <varname>kern.maxvnodes</varname> zuerst um etwa 1.000
- erhöhen. Beobachten Sie danach die Anzahl der vom
- System genutzten <varname>vfs.numvnodes</varname>.
- Nähert sich der Wert wiederum dem definierten
- Maximum, müssen Sie <varname>kern.maxvnodes</varname>
- nochmals erhöhen. Sie sollten nun eine Änderung
- Ihres Speicherverbrauches (etwa über &man.top.1;)
- registrieren können und über mehr aktiven
- Speicher verfügen.</para>
- </sect3>
- </sect2>
- </sect1>
-
- <sect1 id="adding-swap-space">
- <title>Hinzufügen von Swap-Bereichen</title>
-
- <para>Egal wie vorausschauend Sie planen, manchmal entspricht ein System
- einfach nicht Ihren Erwartungen. Es ist leicht, mehr Swap-Bereiche
- hinzuzufügen. Dazu stehen Ihnen drei Wege offen: Sie
- können eine neue Platte einbauen, den Swap-Bereich über NFS
- ansprechen oder eine Swap-Datei auf einer existierenden Partition
- einrichten.</para>
-
- <para>Für Informationen zur Verschlüsselung von
- Swap-Partitionen, zu den dabei möglichen Optionen sowie
- zu den Gründen für eine Verschlüsselung des
- Auslagerungsspeichers lesen Sie bitte
- <xref linkend="swap-encrypting"/> des Handbuchs.</para>
-
- <sect2 id="new-drive-swap">
- <title>Swap auf einer neuen Festplatte</title>
-
- <para>Der einfachste Weg, zusätzlich einen Swap-Bereich
- einzurichten, ist der Einbau einer neuen Platte, die Sie
- sowieso gebrauchen können. Die Anordnung von
- Swap-Bereichen wird in <xref linkend="configtuning-initial"/>
- des Handbuchs besprochen.</para>
- </sect2>
-
- <sect2 id="nfs-swap">
- <title>Swap-Bereiche über NFS</title>
-
- <para>Swap-Bereiche über NFS sollten Sie nur dann einsetzen,
- wenn Sie über keine lokale Platte verfügen, da es durch
- die zur Verfügung stehende Bandbreite limitiert wird und
- außerdem den NFS-Server zusätzlich belastet.</para>
- </sect2>
-
- <sect2 id="create-swapfile">
- <title>Swap-Dateien</title>
-
- <para>Sie können eine Datei festgelegter Größe als
- Swap-Bereich nutzen. Im folgenden Beispiel werden wir eine 64&nbsp;MB
- große Datei mit Namen <filename>/usr/swap0</filename>
- benutzen, Sie können natürlich einen beliebigen Namen
- für den Swap-Bereich benutzen.</para>
-
- <example>
- <title>Erstellen einer Swap-Datei</title>
-
- <orderedlist>
- <listitem>
- <para>Der <filename>GENERIC</filename>-Kernel unterstützt
- bereits RAM-Disks (&man.md.4;), welche für diese Aktion
- benötigt werden. Wenn Sie einen eigenen Kernel erstellen,
- vergewissern Sie sicher, dass die folgende Zeile in ihrer
- Kernel-Konfigurationsdatei enthalten ist:</para>
-
- <programlisting>device md</programlisting>
-
- <para>Informationen, wie man einen eigenen Kernel erstellen kann,
- erhalten Sie in <xref linkend="kernelconfig"/>.</para>
- </listitem>
-
- <listitem>
- <para>Legen Sie die Swap-Datei
- <filename>/usr/swap0</filename> an:</para>
-
- <screen>&prompt.root; <userinput>dd if=/dev/zero of=/usr/swap0 bs=1024k count=64</userinput></screen>
- </listitem>
-
- <listitem>
- <para>Setzen Sie die richtigen Berechtigungen für
- <filename>/usr/swap0</filename>:</para>
-
- <screen>&prompt.root; <userinput>chmod 0600 /usr/swap0</userinput></screen>
- </listitem>
-
- <listitem>
- <para>Aktivieren Sie die Swap-Datei
- <filename>/etc/rc.conf</filename>:</para>
-
- <programlisting>swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired.</programlisting>
- </listitem>
-
- <listitem>
- <para>Um die Swap-Datei zu aktivieren, führen Sie
- entweder einen Neustart durch oder geben das folgende Kommando
- ein:</para>
-
- <screen>&prompt.root; <userinput>mdconfig -a -t vnode -f /usr/swap0 -u 0 &amp;&amp; swapon /dev/md0</userinput></screen>
- </listitem>
- </orderedlist>
- </example>
- </sect2>
- </sect1>
-
- <sect1 id="acpi-overview">
- <sect1info>
- <authorgroup>
- <author>
- <firstname>Hiten</firstname>
- <surname>Pandya</surname>
- <contrib>Verfasst von </contrib>
- </author>
- <author>
- <firstname>Tom</firstname>
- <surname>Rhodes</surname>
- </author>
- </authorgroup>
- </sect1info>
-
- <title>Energie- und Ressourcenverwaltung</title>
-
- <para>Es ist wichtig, Hardware effizient einzusetzen. Vor der
- Einführung des <firstterm>Advanced Configuration and Power
- Interface</firstterm> (<acronym>ACPI</acronym>) konnten
- Stromverbrauch und Wärmeabgabe eines Systems nur
- schlecht von Betriebssystemen gesteuert werden. Die Hardware
- wurde vom <acronym>BIOS</acronym> gesteuert, was die Kontrolle
- der Energieverwaltung für den Anwender erschwerte. Das
- <emphasis>Advanced Power Management (APM)</emphasis> erlaubte
- es lediglich, einige wenige Funktionen zu steuern, obwohl die
- Überwachung von Energie- und Ressourcenverbrauch zu den
- wichtigsten Aufgaben eines Betriebssystems gehört, um auf
- verschiedene Ereignisse, beispielsweise einen unerwarteten
- Temperaturanstieg, reagieren können.</para>
-
- <para>Dieser Abschnitt erklärt das Advanced Configuration and
- Power Interface (<acronym>ACPI</acronym>).</para>
-
- <sect2 id="acpi-intro">
- <title>Was ist ACPI?</title>
-
- <indexterm>
- <primary>ACPI</primary>
- </indexterm>
-
- <indexterm>
- <primary>APM</primary>
- </indexterm>
-
- <para>Advanced Configuration and Power Interface
- (<acronym>ACPI</acronym>) ist ein Standard verschiedener
- Hersteller, der die Verwaltung von Hardware und
- Energiesparfunktionen festlegt. Die
- <acronym>ACPI</acronym>-Funktionen können von einem
- Betriebssystem gesteuert werden. Der Vorgänger des
- <acronym>ACPI</acronym>, <quote>Advanced Power Management</quote>
- (<acronym>APM</acronym>), erwies sich in modernen Systemen
- als unzureichend.</para>
- </sect2>
-
- <sect2 id="acpi-old-spec">
- <title>Mängel des Advanced Power Managements (APM)</title>
-
- <para>Das <emphasis>Advanced Power Management (APM)</emphasis>
- steuert den Energieverbrauch eines Systems auf Basis
- der Systemaktivität. Das APM-BIOS wird von dem
- Hersteller des Systems zur Verfügung gestellt
- und ist auf die spezielle Hardware angepasst. Der
- APM-Treiber des Betriebssystems greift auf das
- <emphasis>APM Software Interface</emphasis> zu, das den
- Energieverbrauch regelt. APM findet sich in der Regel
- nur noch in Systemen, die vor 2001 produziert
- wurden.</para>
-
- <para>Das <acronym>APM</acronym> hat hauptsächlich
- vier Probleme. Erstens läuft die Energieverwaltung
- unabhängig vom Betriebssystem in einem
- (herstellerspezifischen) BIOS. Beispielsweise kann
- das APM-BIOS die Festplatten nach einer konfigurierbaren
- Zeit ohne die Zustimmung des Betriebssystems herunterfahren.
- Zweitens befindet sich die ganze APM-Logik im BIOS; das
- Betriebssystem hat gar keine APM-Komponenten. Bei Problemen
- mit dem APM-BIOS muss das Flash-ROM aktualisiert werden.
- Diese Prozedur ist gefährlich, da sie im Fehlerfall
- das System unbrauchbar machen kann. Zum Dritten ist APM
- eine Technik, die herstellerspezifisch ist und nicht
- koordiniert wird. Fehler im BIOS eines Herstellers werden
- nicht unbedingt im BIOS anderer Hersteller korrigiert.
- Das letzte Problem ist, dass im APM-BIOS nicht genügend
- Platz vorhanden ist, um eine durchdachte oder eine auf den
- Zweck der Maschine zugeschnittene Energieverwaltung
- zu implementieren.</para>
-
- <para>Das <emphasis>Plug and Play BIOS (PNPBIOS)</emphasis>
- war ebenfalls unzureichend. Das PNPBIOS verwendet eine
- 16-Bit-Technik. Damit das Betriebssystem das PNPBIOS
- ansprechen kann, muss es in einer 16-Bit-Emulation laufen.</para>
-
- <para>Der <acronym>APM</acronym>-Treiber von &os; ist in
- der Hilfeseite &man.apm.4; beschrieben.</para>
- </sect2>
-
- <sect2 id="acpi-config">
- <title>Konfiguration des <acronym>ACPI</acronym></title>
-
- <para>Das Modul <filename>acpi.ko</filename> wird
- standardmäßig beim Systemstart vom &man.loader.8;
- geladen und sollte daher <emphasis>nicht</emphasis>
- fest in den Kernel eingebunden werden. Dadurch kann
- <filename>acpi.ko</filename> ohne einen Neubau des Kernels ersetzt
- werden und das Modul ist leichter zu testen. Wenn Sie in der
- Ausgabe von &man.dmesg.8; das Wort <acronym>ACPI</acronym> sehen,
- ist das Modul geladen worden. Das ACPI-Modul im laufenden
- Betrieb zu laden, führt oft nicht zum gewünschten
- Ergebnis. Treten bei Ihrem System Probleme auf, können
- Sie <acronym>ACPI</acronym> auch komplett deaktivieren.
- Dazu definieren Sie die Variable
- <literal>hint.acpi.0.disabled="1"</literal> in der Datei
- <filename>/boot/loader.conf</filename>. Alternativ können
- Sie die Variable auch am &man.loader.8;-Prompt eingeben.
- Das Modul kann im laufenden Betrieb nicht entfernt werden,
- da es zur Kommunikation mit der Hardware verwendet wird.</para>
-
- <note>
- <para><acronym>ACPI</acronym> und <acronym>APM</acronym>
- können nicht zusammen verwendet werden. Das zuletzt
- geladene Modul beendet sich, sobald es bemerkt, dass das andere
- Modul geladen ist.</para>
- </note>
-
- <para>Mit &man.acpiconf.8; können Sie das System in einen
- Ruhemodus (<foreignphrase>sleep mode</foreignphrase>) versetzen.
- Es gibt verschiedene Modi (von <literal>1</literal> bis
- <literal>5</literal>), die Sie auf der Kommandozeile mit
- <option>-s</option> angeben können. Für die meisten
- Anwender sind die Modi <literal>1</literal> und
- <literal>3</literal> völlig ausreichend. Der Modus
- <literal>5</literal> schaltet das System
- aus (<foreignphrase>Soft-off</foreignphrase>) und entspricht
- dem folgenden Befehl:</para>
-
- <screen>&prompt.root; <userinput>halt -p</userinput></screen>
-
- <para>Verschiedene Optionen können als
- &man.sysctl.8;-Variablen gesetzt werden. Lesen Sie dazu
- die Manualpages zu &man.acpi.4; sowie &man.acpiconf.8;.</para>
- </sect2>
- </sect1>
-
- <sect1 id="ACPI-debug">
- <sect1info>
- <authorgroup>
- <author>
- <firstname>Nate</firstname>
- <surname>Lawson</surname>
- <contrib>Verfasst von </contrib>
- </author>
- </authorgroup>
- <authorgroup>
- <author>
- <firstname>Peter</firstname>
- <surname>Schultz</surname>
- <contrib>Mit Beiträgen von </contrib>
- </author>
- <author>
- <firstname>Tom</firstname>
- <surname>Rhodes</surname>
- </author>
- </authorgroup>
- </sect1info>
-
- <title><acronym>ACPI</acronym>-Fehlersuche</title>
-
- <indexterm>
- <primary>ACPI</primary>
- <secondary>Probleme mit</secondary>
- </indexterm>
-
- <para><acronym>ACPI</acronym> ist ein gänzlich neuer
- Weg, um Geräte aufzufinden und deren Stromverbrauch
- zu regulieren. Weiterhin bietet <acronym>ACPI</acronym>
- einen einheitlichen Zugriff auf Geräte, die vorher
- vom <acronym>BIOS</acronym> verwaltet wurden. Es werden
- zwar Fortschritte gemacht, dass <acronym>ACPI</acronym>
- auf allen Systemen läuft, doch tauchen immer wieder
- Fehler auf: fehlerhafter Bytecode der
- <acronym>ACPI</acronym>-Machine-Language
- (<acronym>AML</acronym>) einiger Systemplatinen,
- ein unvollständiges &os;-Kernel-Subsystem oder
- Fehler im <acronym>ACPI-CA</acronym>-Interpreter von &intel;.</para>
-
- <para>Dieser Abschnitt hilft Ihnen, zusammen mit den Betreuern
- des &os;-<acronym>ACPI</acronym>-Subsystems, Fehlerquellen
- zu finden und Fehler zu beseitigen. Danke, dass Sie diesen
- Abschnitt lesen; hoffentlich hilft er, Ihre Systemprobleme
- zu lösen.</para>
-
- <sect2 id="ACPI-submitdebug">
- <title>Fehlerberichte einreichen</title>
-
- <note>
- <para>Bevor Sie einen Fehlerbericht einreichen, stellen
- Sie bitte sicher, dass Ihr <acronym>BIOS</acronym>
- und die Firmware Ihres Controllers aktuell sind.</para>
- </note>
-
- <para>Wenn Sie sofort einen Fehlerbericht einsenden wollen,
- schicken Sie bitte die folgenden Informationen an
- die Mailingliste <ulink
- url="mailto:freebsd-acpi@FreeBSD.org">freebsd-acpi</ulink>:</para>
-
- <itemizedlist>
- <listitem>
- <para>Beschreiben Sie den Fehler und alle Umstände,
- unter denen der Fehler auftritt. Geben Sie
- ebenfalls den Typ und das Modell Ihres Systems
- an. Wenn Sie einen neuen Fehler entdeckt haben,
- versuchen Sie möglichst genau zu beschreiben,
- wann der Fehler das erste Mal aufgetreten ist.</para>
- </listitem>
-
- <listitem>
- <para>Die Ausgabe von &man.dmesg.8; nach der Eingabe
- von <command>boot -v</command>.
- Geben Sie auch alle Fehlermeldungen an, die erscheinen,
- wenn Sie den Fehler provozieren.</para>
- </listitem>
-
- <listitem>
- <para>Die Ausgabe von &man.dmesg.8; nach der Eingabe
- von <command>boot -v</command> und mit deaktiviertem
- <acronym>ACPI</acronym>, wenn das Problem ohne
- <acronym>ACPI</acronym> nicht auftritt.</para>
- </listitem>
-
- <listitem>
- <para>Die Ausgabe von <command>sysctl hw.acpi</command>.
- Dieses Kommando zeigt die vom System unterstützten
- <acronym>ACPI</acronym>-Funktionen an.</para>
- </listitem>
-
- <listitem>
- <para>Die <acronym>URL</acronym>, unter der die
- <acronym>ACPI</acronym>-Source-Language
- (<acronym>ASL</acronym>) liegt. Schicken Sie
- bitte <emphasis>nicht</emphasis> die <acronym>ASL</acronym>
- an die Mailingliste, da die <acronym>ASL</acronym>
- sehr groß sein kann. Eine Kopie der
- <acronym>ASL</acronym> erstellen Sie mit dem
- nachstehenden Befehl:</para>
-
- <screen>&prompt.root; <userinput>acpidump -td &gt; <replaceable>name</replaceable>-<replaceable>system</replaceable>.asl</userinput></screen>
-
- <para>Setzen Sie bitte für <replaceable>name</replaceable>
- den Namen Ihres Kontos und für
- <replaceable>system</replaceable> den Hersteller und
- das Modell Ihres Systems ein. Zum Beispiel:
- <filename>njl-FooCo6000.asl</filename>.</para>
- </listitem>
- </itemizedlist>
-
- <para>Obwohl die meisten Entwickler die Mailingliste
- &a.current.name; lesen, sollten Sie Fehlerberichte an
- die Liste &a.acpi.name; schicken. Seien Sie bitte
- geduldig; wir haben alle Arbeit außerhalb des Projekts.
- Wenn der Fehler nicht offensichtlich ist, bitten
- wir Sie vielleicht, einen offiziellen Fehlerbericht
- (<acronym>PR</acronym>) mit &man.send-pr.1; einzusenden.
- Geben Sie im Fehlerbericht bitte dieselben Informationen
- wie oben an. Mithilfe der <acronym>PR</acronym>s
- verfolgen und lösen wir Probleme. Senden Sie
- bitte keinen <acronym>PR</acronym> ein, ohne vorher
- den Fehlerbericht an die Liste &a.acpi.name; zu senden.
- Wir benutzen die <acronym>PR</acronym>s als Erinnerung
- an bestehende Probleme und nicht zum Sammeln aller
- Probleme. Es kann sein, dass der Fehler schon von
- jemand anderem gemeldet wurde.</para>
- </sect2>
-
- <sect2 id="ACPI-background">
- <title><acronym>ACPI</acronym>-Grundlagen</title>
-
- <indexterm>
- <primary>ACPI</primary>
- </indexterm>
-
- <para><acronym>ACPI</acronym> gibt es in allen modernen Rechnern
- der ia32- (x86), ia64- (Itanium) und amd64- (AMD) Architektur.
- Der vollständige Standard bietet Funktionen
- zur Steuerung und Verwaltung der <acronym>CPU</acronym>-Leistung,
- der Stromversorgung, von Wärmebereichen, Batterien,
- eingebetteten Controllern und Bussen. Auf den meisten
- Systemen wird nicht der vollständige Standard implementiert.
- Arbeitsplatzrechner besitzen meist nur Funktionen zur
- Verwaltung der Busse, während Notebooks Funktionen
- zur Temperaturkontrolle und Ruhezustände besitzen.</para>
-
- <para>Ein <acronym>ACPI</acronym> konformes System
- besitzt verschiedene Komponenten. Die <acronym>BIOS</acronym>-
- und Chipsatz-Hersteller stellen mehrere statische
- Tabellen bereit (zum Beispiel die
- Fixed-<acronym>ACPI</acronym>-Description-Table,
- <acronym>FADT</acronym>). Die Tabellen enthalten beispielsweise
- die mit <acronym>SMP</acronym>-Systemen benutzte
- <acronym>APIC</acronym>-Map, Konfigurationsregister und
- einfache Konfigurationen. Zusätzlich gibt es die
- Differentiated-System-Description-Table (<acronym>DSDT</acronym>),
- die Bytecode enthält. Die Tabelle ordnet Geräte
- und Methoden in einem baumartigen Namensraum an.</para>
-
- <para>Ein <acronym>ACPI</acronym>-Treiber muss die statischen
- Tabellen einlesen, einen Interpreter für den Bytecode
- bereitstellen und die Gerätetreiber im Kernel so
- modifizieren, dass sie mit dem <acronym>ACPI</acronym>-Subsystem
- kommunizieren. Für &os;, Linux und NetBSD hat &intel;
- den Interpreter <acronym>ACPI-CA</acronym>, zur Verfügung
- gestellt. Der Quelltext zu <acronym>ACPI-CA</acronym>
- befindet sich im Verzeichnis
- <filename class="directory">src/sys/contrib/dev/acpica</filename>.
- Die Schnittstelle von <acronym>ACPI-CA</acronym> zu &os;
- befindet sich unter <filename
- class="directory">src/sys/dev/acpica/Osd</filename>.
- Treiber, die verschiedene <acronym>ACPI</acronym>-Geräte
- implementieren, befinden sich im Verzeichnis
- <filename class="directory">src/sys/dev/acpica</filename>.</para>
- </sect2>
-
- <sect2 id="ACPI-comprob">
- <title>Häufige Probleme</title>
-
- <indexterm>
- <primary>ACPI</primary>
- <secondary>Probleme mit</secondary>
- </indexterm>
-
- <para>Damit <acronym>ACPI</acronym> richtig funktioniert,
- müssen alle Teile funktionieren. Im Folgenden
- finden Sie eine Liste mit Problemen und möglichen
- Umgehungen oder Fehlerbehebungen. Die Liste ist nach
- der Häufigkeit, mit der die Probleme auftreten,
- sortiert.</para>
-
- <sect3>
- <title>Mausprobleme</title>
-
- <para>Es kann vorkommen, dass die Maus nicht mehr funktioniert,
- wenn Sie nach einem Suspend weiterarbeiten wollen. Ist dies
- bei Ihnen der Fall, reicht es meistens aus, den Eintrag
- <literal>hint.psm.0.flags="0x3000"</literal> in Ihre
- <filename>/boot/loader.conf</filename> aufzunehmen. Besteht
- das Problem weiterhin, sollten Sie einen Fehlerbericht
- an das FreeBSD Project senden.</para>
- </sect3>
-
- <sect3>
- <title>Suspend/Resume</title>
-
- <para><acronym>ACPI</acronym> kennt drei
- Suspend-to-<acronym>RAM</acronym>-Zustände
- (<acronym>STR</acronym>):
- <literal>S1</literal>-<literal>S3</literal>.
- Es gibt einen Suspend-to-Disk-Zustand:
- <literal>S4</literal>. Der Zustand <literal>S5</literal>
- wird Soft-Off genannt. In diesem Zustand befindet
- sich ein Rechner, wenn die Stromversorgung angeschlossen
- ist, der Rechner aber nicht hochgefahren ist. Der
- Zustand <literal>S4</literal> kann auf zwei Arten
- implementiert werden:
- <literal>S4</literal><acronym>BIOS</acronym> und
- <literal>S4</literal><acronym>OS</acronym>.
- Im ersten Fall wird der Suspend-to-Disk-Zustand durch
- das <acronym>BIOS</acronym> hergestellt im zweiten
- Fall alleine durch das Betriebssystem.</para>
-
- <note>
- <para>Die Suspend-Zustände sind Ruhezustände,
- in denen der Rechner weniger Energie als im
- Normalbetrieb benötigt. Resume bezeichnet
- die Rückkehr zum Normalbetrieb.</para>
- </note>
-
- <para>Die Suspend-Zustände können Sie mit
- dem Kommando <command>sysctl hw.acpi</command>
- ermitteln. Das Folgende könnte beispielsweise
- ausgegeben werden:</para>
-
- <screen>hw.acpi.supported_sleep_state: S3 S4 S5
-hw.acpi.s4bios: 0</screen>
-
- <para>Diese Ausgabe besagt, dass mit dem Befehl
- <command>acpiconf -s</command> die Zustände
- <literal>S3</literal>, <literal>S4</literal><acronym>OS</acronym>
- und <literal>S5</literal> eingestellt werden können.
- Hätte <option>s4bios</option> den Wert
- <literal>1</literal>, gäbe es den Zustand
- <literal>S4</literal><acronym>BIOS</acronym> anstelle
- von <literal>S4</literal><acronym>OS</acronym>.</para>
-
- <para>Wenn Sie die Suspend- und Resume-Funktionen
- testen, fangen Sie mit dem <literal>S1</literal>-Zustand
- an, wenn er angeboten wird. Dieser Zustand wird
- am ehesten funktionieren, da der Zustand wenig
- Treiber-Unterstützung benötigt. Der Zustand
- <literal>S2</literal> ist ähnlich wie
- <literal>S1</literal>, allerdings hat ihn noch niemand
- implementiert. Als nächstes sollten Sie den
- Zustand <literal>S3</literal> ausprobieren. Dies
- ist der tiefste <acronym>STR</acronym>-Schlafzustand.
- Dieser Zustand ist auf massive Treiber-Unterstützung
- angewiesen, um die Geräte wieder richtig zu
- initialisieren. Wenn Sie Probleme mit diesem Zustand
- haben, können Sie die Mailingliste
- &a.acpi.name; anschreiben. Erwarten Sie allerdings
- nicht zu viel: Es gibt viele Treiber und Geräte,
- an denen noch gearbeitet und getestet wird.</para>
-<!-- -->
- <para>Ein häufiges Problem mit Suspend/Resume ist,
- dass viele Gerätetreiber ihre Firmware, Register
- und Gerätespeicher nicht korrekt speichern,
- wiederherstellen und/oder reinitialisieren. Um dieses
- Problem zu lösen, sollten Sie zuerst die
- folgenden Befehle ausführen:</para>
-
- <screen>&prompt.root; <userinput>sysctl debug.bootverbose=1</userinput>
-&prompt.root; <userinput>sysctl debug.acpi.suspend_bounce=1</userinput>
-&prompt.root; <userinput>acpiconf -s 3</userinput></screen>
-
- <para>Dieser Test emuliert einen Suspend/Resume-Zyklus für
- alle Geräte (ohne dass diese dabei wirklich in den Status
- <literal>S3</literal> wechseln). In vielen Fällen
- reicht dies bereits aus, um Probleme (beispielsweise
- verlorener Firmware-Status, Timeouts, hängende Geräte)
- zu entdecken. Beachten Sie dabei, dass das Gerät bei
- diesem Test nicht wirklich in den Status
- <literal>S3</literal> wechseln. Es kann also vorkommen, dass
- manche Geräte weiterhin mit Strom versorgt werden (dies
- wäre bei einem wirklichen Wechsel in den Status
- <literal>S3</literal> NICHT möglich.
- Andere Geräte werden normal weiterarbeiten, weil sie
- über keine Suspend/Resume-Funktionen verfügen.</para>
-
- <para>Schwierigere Fälle können den Einsatz
- zusätzlicher Hardware (beispielsweise serielle
- Ports/Kabel für die Verbindung über eine
- serielle Konsole oder Firewire-Ports/Kabel für
- &man.dcons.4;) sowie Kenntnisse im Bereich
- Kerneldebugging erforderlich machen.</para>
-
- <para>Um das Problem einzugrenzen, entfernen Sie soviele
- Treiber wie möglich aus dem Kernel. Sie können
- das Problem isolieren, indem Sie einen Treiber nach
- dem anderen laden, bis der Fehler wieder auftritt.
- Typischerweise verursachen binäre Treiber wie
- <filename>nvidia.ko</filename>, X11-Grafiktreiber und
- <acronym>USB</acronym>-Treiber die meisten Fehler,
- hingegen laufen Ethernet-Treiber für gewöhnlich
- sehr zuverlässig. Wenn ein Treiber
- zuverlässig geladen und entfernt werden kann,
- können Sie den Vorgang automatisieren, indem
- Sie die entsprechenden Kommandos in die Dateien
- <filename>/etc/rc.suspend</filename> und
- <filename>/etc/rc.resume</filename> einfügen.
- In den Dateien finden Sie ein deaktiviertes Beispiel,
- das einen Treiber lädt und wieder entfernt.
- Ist die Bildschirmanzeige bei der Wiederaufnahme
- des Betriebs gestört, setzen Sie bitte die
- Variable <option>hw.acpi.reset_video</option> auf
- <literal>0</literal>. Versuchen Sie auch, die Variable
- <option>hw.acpi.sleep_delay</option> auf kürzere
- Zeitspannen zu setzen.</para>
-
- <para>Die Suspend- und Resume-Funktionen können
- Sie auch auf einer neuen Linux-Distribution
- mit <acronym>ACPI</acronym> testen. Wenn es mit
- Linux funktioniert, liegt das Problem wahrscheinlich
- bei einem &os;-Treiber. Es hilft uns, das Problem
- zu lösen, wenn Sie feststellen können, welcher
- Treiber das Problem verursacht. Beachten Sie bitte,
- dass die <acronym>ACPI</acronym>-Entwickler normalerweise
- keine anderen Treiber pflegen (beispielsweise Sound- oder
- <acronym>ATA</acronym>-Treiber). Es ist wohl das beste,
- die Ergebnisse der Fehlersuche an die Mailingliste
- &a.current.name; und den Entwickler des Treibers
- zu schicken. Wenn Ihnen danach ist, versuchen Sie,
- den Fehler in der Resume-Funktion zu finden, indem
- Sie einige &man.printf.3;-Anweisungen in den Code
- des fehlerhaften Treibers einfügen.</para>
-
- <para>Schließlich können Sie <acronym>ACPI</acronym>
- noch abschalten und stattdessen <acronym>APM</acronym>
- verwenden. Wenn die Suspend- und Resume-Funktionen mit
- <acronym>APM</acronym> funktionieren, sollten Sie
- vielleicht besser <acronym>APM</acronym> verwenden
- (insbesondere mit alter Hardware von vor dem Jahr 2000).
- Die Hersteller benötigten einige Zeit, um
- <acronym>ACPI</acronym> korrekt zu implementieren, daher
- gibt es mit älterer Hardware oft
- <acronym>ACPI</acronym>-Probleme.</para>
- </sect3>
-
- <sect3>
- <title>Temporäre oder permanente Systemhänger</title>
-
- <para>Die meisten Systemhänger entstehen durch verlorene
- Interrupts oder einen Interrupt-Sturm.
- Probleme werden verursacht durch die Art, in der das
- <acronym>BIOS</acronym> Interrupts vor dem Systemstart
- konfiguriert, durch eine fehlerhafte
- <acronym>APIC</acronym>-Tabelle und durch die
- Zustellung des System-Control-Interrupts
- (<acronym>SCI</acronym>).</para>
-
- <indexterm>
- <primary>Interrupt-Sturm</primary>
- </indexterm>
-
- <para>Anhand der Ausgabe des Befehls
- <command>vmstat -i</command> können Sie verlorene
- Interrupts von einem Interrupt-Sturm unterscheiden.
- Untersuchen Sie die Ausgabezeile, die <literal>acpi0</literal>
- enthält. Ein Interrupt-Sturm liegt vor, wenn
- der Zähler öfter als ein paar Mal pro
- Sekunde hochgezählt wird. Wenn sich das System
- aufgehangen hat, versuchen Sie mit der Tastenkombination
- <keycombo action="simul">
- <keycap>Ctrl</keycap>
- <keycap>Alt</keycap>
- <keycap>Esc</keycap>
- </keycombo> in den Debugger <acronym>DDB</acronym>
- zu gelangen. Geben Sie dort den Befehl
- <literal>show interrupts</literal> ein.</para>
-
- <indexterm>
- <primary>APIC</primary>
- <secondary>deaktivieren</secondary>
- </indexterm>
-
- <para>Wenn Sie Interrupt-Probleme haben, ist es vorerst
- wohl am besten, <acronym>APIC</acronym> zu deaktivieren.
- Tragen Sie dazu die Zeile
- <literal>hint.apic.0.disabled="1"</literal> in
- <filename>loader.conf</filename> ein.</para>
- </sect3>
-
- <sect3>
- <title>Abstürze (Panics)</title>
-
- <para><foreignphrase>Panics</foreignphrase> werden so
- schnell wie möglich behoben; mit <acronym>ACPI</acronym>
- kommt es aber selten dazu. Zuerst sollten Sie
- die Panic reproduzieren und dann versuchen einen
- <foreignphrase>backtrace</foreignphrase> (eine
- Rückverfolgung der Funktionsaufrufe) zu erstellen.
- Richten Sie dazu den <acronym>DDB</acronym> über
- die serielle Schnittstelle (siehe
- <xref linkend="serialconsole-ddb"/>) oder eine gesonderte
- &man.dump.8;-Partition ein. In <acronym>DDB</acronym>
- können Sie den <foreignphrase>backtrace</foreignphrase>
- mit dem Kommando <literal>tr</literal> erstellen.
- Falls Sie den <foreignphrase>backtrace</foreignphrase>
- vom Bildschirm abschreiben müssen, schreiben
- Sie bitte mindestens die fünf ersten und die
- fünf letzten Zeile der Ausgabe auf.</para>
-
- <para>Versuchen Sie anschließend, das Problem
- durch einen Neustart ohne <acronym>ACPI</acronym>
- zu beseitigen. Wenn das funktioniert hat, können
- Sie versuchen, das verantwortliche
- <acronym>ACPI</acronym>-Subsystem durch Setzen der
- Variablen <option>debug.acpi.disable</option>
- herauszufinden. Die Hilfeseite &man.acpi.4; enthält
- dazu einige Beispiele.</para>
- </sect3>
-
- <sect3>
- <title>Nach einem Suspend oder einem Stopp startet
- das System wieder</title>
-
- <para>Setzen Sie zuerst in &man.loader.conf.5; die Variable
- <option>hw.acpi.disable_on_poweroff</option> auf
- <literal>0</literal>. Damit wird verhindert, dass
- <acronym>ACPI</acronym> während des Systemabschlusses
- die Bearbeitung verschiedener Ereignisse deaktiviert.
- Auf manchen Systemen muss die Variable den Wert
- <literal>1</literal> besitzen (die Voreinstellung).
- Normalerweise wird der unerwünschte Neustart
- des Systems durch Setzen dieser Variablen behoben.</para>
- </sect3>
-
- <sect3>
- <title>Andere Probleme</title>
-
- <para>Wenn Sie weitere Probleme mit <acronym>ACPI</acronym>
- haben (Umgang mit einer Docking-Station, nicht erkannte
- Geräte), schicken Sie bitte eine Beschreibung an die
- Mailingliste. Allerdings kann es sein, dass einige
- Probleme von noch unvollständigen Teilen des
- <acronym>ACPI</acronym>-Subsystems abhängen und
- es etwas dauern kann bis diese Teile fertig sind.
- Seien Sie geduldig und rechnen Sie damit, dass wir
- Ihnen Fehlerbehebungen zum Testen senden.</para>
- </sect3>
- </sect2>
-
- <sect2 id="ACPI-aslanddump">
- <title><acronym>ASL</acronym>, <command>acpidump</command> und
- <acronym>IASL</acronym></title>
-
- <indexterm>
- <primary>ACPI</primary>
- <secondary>ASL</secondary>
- </indexterm>
-
- <para>Ein häufiges Problem ist fehlerhafter Bytecode
- des <acronym>BIOS</acronym>-Herstellers. Dies erkennen
- Sie an Kernelmeldungen auf der Konsole wie die folgende:</para>
-
- <screen>ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
-(Node 0xc3f6d160), AE_NOT_FOUND</screen>
-
- <para>Oft können Sie das Problem dadurch lösen,
- dass Sie eine aktuelle <acronym>BIOS</acronym>-Version
- einspielen. Die meisten Meldungen auf der Konsole sind
- harmlos, wenn aber beispielsweise der Batteriestatus
- falsch angezeigt wird, können Sie in den
- Meldungen nach Problemen mit der
- <acronym>AML</acronym>-Machine-Language
- (<acronym>AML</acronym>) suchen. Der Bytecode der
- <acronym>AML</acronym> wird aus der
- <acronym>ACPI</acronym>-Source-Language (<acronym>ASL</acronym>)
- übersetzt und in einer Tabelle, der <acronym>DSDT</acronym>,
- abgelegt. Eine Kopie der <acronym>ASL</acronym>
- können Sie mit dem Befehl &man.acpidump.8; erstellen.
- Verwenden Sie mit diesem Befehl sowohl die Option
- <option>-t</option> (die Inhalte der statischen
- Tabellen anzeigen) als auch die Option <option>-d</option>
- (die <acronym>AML</acronym> in <acronym>ASL</acronym>
- zurückübersetzen). Ein Beispiel für
- die Syntax finden Sie im Abschnitt <link
- linkend="ACPI-submitdebug">Fehlerberichte einreichen</link>.</para>
-
- <para>Sie können einfach prüfen, ob sich die
- <acronym>ASL</acronym> übersetzen lässt.
- Für gewöhnlich können Sie Warnungen
- während des Übersetzens ignorieren.
- Fehlermeldungen führen normal dazu, dass
- <acronym>ACPI</acronym> fehlerhaft arbeitet. Ihre
- <acronym>ASL</acronym> übersetzen Sie mit dem
- nachstehenden Kommando:</para>
-
- <screen>&prompt.root; <userinput>iasl ihre.asl</userinput></screen>
- </sect2>
-
- <sect2 id="ACPI-fixasl">
- <title>Die <acronym>ASL</acronym> reparieren</title>
-
- <indexterm>
- <primary>ACPI</primary>
- <secondary>ASL</secondary>
- </indexterm>
-
- <para>Auf lange Sicht ist es unser Ziel, dass
- <acronym>ACPI</acronym> ohne Eingriffe des Benutzers
- läuft. Zurzeit entwickeln wir allerdings noch
- Umgehungen für Fehler der <acronym>BIOS</acronym>-Hersteller.
- Der &microsoft;-Interpreter (<filename>acpi.sys</filename>
- und <filename>acpiec.sys</filename>) prüft die
- <acronym>ASL</acronym> nicht streng gegen den Standard.
- Daher reparieren <acronym>BIOS</acronym>-Hersteller,
- die <acronym>ACPI</acronym> nur unter &windows; testen,
- ihre <acronym>ASL</acronym> nicht. Wir hoffen, dass
- wir das vom Standard abweichende Verhalten des
- &microsoft;-Interpreters dokumentieren und in &os; replizieren
- können. Dadurch müssen Benutzer ihre
- <acronym>ASL</acronym> nicht selbst reparieren.
- Sie können Ihre <acronym>ASL</acronym> selbst reparieren,
- wenn Sie ein Problem umgehen und uns helfen möchten.
- Senden Sie uns bitte die mit &man.diff.1; erstellte Differenz
- zwischen alter und neuer <acronym>ASL</acronym>. Wir
- werden versuchen, den Interpreter <acronym>ACPI-CA</acronym>
- zu korrigieren, damit die Fehlerbehebung nicht mehr
- erforderlich ist.</para>
-
- <indexterm>
- <primary>ACPI</primary>
- <secondary>Fehlermeldungen</secondary>
- </indexterm>
-
- <para>Die nachfolgende Liste enthält häufige
- Fehlermeldungen, deren Ursache und eine Beschreibung,
- wie die Fehler korrigiert werden:</para>
-
- <sect3>
- <title>Abhängigkeiten vom Betriebssystem</title>
-
- <para>Einige <acronym>AML</acronym>s gehen davon aus, dass
- die Welt ausschließlich aus verschiedenen
- &windows;-Versionen besteht. &os; kann vorgeben, irgendein
- Betriebssystem zu sein. Versuchen Sie das Betriebssystem,
- das Sie in der <acronym>ASL</acronym> finden, in der
- Datei <filename>/boot/loader.conf</filename> anzugeben:
- <literal>hw.acpi.osname="Windows 2001"</literal>.</para>
- </sect3>
-
- <sect3>
- <title>Fehlende Return-Anweisungen</title>
-
- <para>Einige Methoden verzichten auf die vom Standard
- vorgeschriebene Rückgabe eines Wertes. Obwohl
- der Interpreter <acronym>ACPI-CA</acronym> dies nicht
- beheben kann, besitzt &os; die Möglichkeit, den
- Rückgabewert implizit zu setzen. Wenn Sie
- wissen, welcher Wert zurückgegeben werden muss,
- können Sie die fehlenden Return-Anweisungen
- selbst einsetzen. Die Option <option>-f</option>
- zwingt <command>iasl</command>, die <acronym>ASL</acronym>
- zu übersetzen.</para>
- </sect3>
-
- <sect3>
- <title>Überschreiben der vorgegebenen
- <acronym>AML</acronym></title>
-
- <para>Nachdem Sie Ihre <acronym>ASL</acronym> in der
- Datei <filename>ihre.asl</filename> angepasst haben,
- übersetzen Sie die <acronym>ASL</acronym> wie folgt:</para>
-
- <screen>&prompt.root; <userinput>iasl ihre.asl</userinput></screen>
-
- <para>Mit der Option <option>-f</option> erzwingen Sie das
- Erstellen der <acronym>AML</acronym> auch wenn während
- der Übersetzung Fehler auftreten. Beachten Sie,
- dass einige Fehler, wie fehlende Return-Anweisungen,
- automatisch vom Interpreter umgangen werden.</para>
-
- <para>In der Voreinstellung erstellt der Befehl
- <command>iasl</command> die Ausgabedatei
- <filename>DSDT.aml</filename>. Wenn Sie diese Datei
- anstelle der fehlerhaften Kopie des <acronym>BIOS</acronym>
- laden wollen, editieren Sie <filename>/boot/loader.conf</filename>
- wie folgt:</para>
-
- <programlisting>acpi_dsdt_load="YES"
-acpi_dsdt_name="/boot/DSDT.aml"</programlisting>
-
- <para>Stellen Sie bitte sicher, dass sich die Datei
- <filename>DSDT.aml</filename> im Verzeichnis
- <filename class="directory">/boot</filename> befindet.</para>
- </sect3>
- </sect2>
-
- <sect2 id="ACPI-debugoutput">
- <title><acronym>ACPI</acronym>-Meldungen zur
- Fehlersuche erzeugen</title>
-
- <indexterm>
- <primary>ACPI</primary>
- <secondary>Probleme mit</secondary>
- </indexterm>
-
- <indexterm>
- <primary>ACPI</primary>
- <secondary>Fehlersuche</secondary>
- </indexterm>
-
- <para>Der <acronym>ACPI</acronym>-Treiber besitzt
- flexible Möglichkeiten zur Fehlersuche. Sie
- können sowohl die zu untersuchenden Subsysteme
- als auch die zu erzeugenden Ausgaben festlegen. Die zu
- untersuchenden Subsysteme werden als so genannte
- <quote>layers</quote> angegeben. Die Subsysteme sind in
- <acronym>ACPI-CA</acronym>-Komponenten
- (<literal>ACPI_ALL_COMPONENTS</literal>) und
- <acronym>ACPI</acronym>-Hardware (<literal>ACPI_ALL_DRIVERS</literal>)
- aufgeteilt. Welche Meldungen ausgegeben werden, wird über
- <quote>level</quote> gesteuert. <quote>level</quote> reicht
- von <literal>ACPI_LV_ERROR</literal> (es werden nur Fehler
- ausgegeben) bis zu <literal>ACPI_LV_VERBOSE</literal> (alles
- wird ausgegeben). <quote>level</quote> ist eine Bitmaske,
- sodass verschiedene Stufen auf einmal (durch Leerzeichen
- getrennt) angegeben werden können. Die erzeugte
- Ausgabemenge passt vielleicht nicht in den Konsolenpuffer.
- In diesem Fall sollten Sie die Ausgaben mithilfe einer
- seriellen Konsole sichern. Die möglichen Werte
- für <quote>layers</quote> und <quote>level</quote>
- werden in der Hilfeseite &man.acpi.4; beschrieben.</para>
-
- <para>Die Ausgaben zur Fehlersuche sind in der Voreinstellung
- nicht aktiviert. Wenn <acronym>ACPI</acronym> im Kernel
- enthalten ist, fügen Sie <literal>options ACPI_DEBUG</literal>
- zur Kernelkonfigurationsdatei hinzu. Sie können die
- Ausgaben zur Fehlersuche global aktivieren, indem Sie in der
- Datei <filename>/etc/make.conf</filename> die Zeile
- <literal>ACPI_DEBUG=1</literal> einfügen. Das Modul
- <filename>acpi.ko</filename> können Sie wie folgt
- neu übersetzen:</para>
-
- <screen>&prompt.root; <userinput>cd /sys/modules/acpi/acpi
-&amp;&amp; make clean &amp;&amp;
-make ACPI_DEBUG=1</userinput></screen>
-
- <para>Installieren Sie anschließend
- <filename>acpi.ko</filename> im Verzeichnis
- <filename class="directory">/boot/kernel</filename>.
- In der Datei <filename>loader.conf</filename> stellen Sie
- <quote>level</quote> und <quote>layer</quote> ein. Das
- folgende Beispiel aktiviert die Ausgabe von Fehlern für
- alle <acronym>ACPI-CA</acronym>-Komponenten und alle
- <acronym>ACPI</acronym>-Hardwaretreiber (wie
- <acronym>CPU</acronym>, <acronym>LID</acronym>):</para>
-
- <programlisting>debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
-debug.acpi.level="ACPI_LV_ERROR"</programlisting>
-
- <para>Wenn ein Problem durch ein bestimmtes Ereignis,
- beispielsweise den Start nach einem Ruhezustand, hervorgerufen
- wird, können Sie die Einstellungen für
- <quote>level</quote> und <quote>layer</quote> auch mit dem
- Kommando <command>sysctl</command> vornehmen. In diesem
- Fall müssen Sie die Datei <filename>loader.conf</filename>
- nicht editieren. Auf der <command>sysctl</command>-Kommandozeile
- geben Sie dieselben Variablennamen wie in
- <filename>loader.conf</filename> an.</para>
- </sect2>
-
- <sect2 id="ACPI-References">
- <title>ACPI-Informationsquellen</title>
-
- <para>Weitere Informationen zu <acronym>ACPI</acronym>
- erhalten Sie an den folgenden Stellen:</para>
-
- <itemizedlist>
- <listitem>
- <para>die &a.acpi; Mailingliste,</para>
- </listitem>
-
- <listitem>
- <para>die Archive der <acronym>ACPI</acronym>-Mailingliste:
- <ulink url="http://lists.FreeBSD.org/pipermail/freebsd-acpi/"></ulink>,</para>
- </listitem>
-
- <listitem>
- <para>die alten Archive der <acronym>ACPI</acronym>-Mailingliste:
- <ulink url="http://home.jp.FreeBSD.org/mail-list/acpi-jp/"></ulink>,</para>
- </listitem>
-
- <listitem>
- <para>die <acronym>ACPI</acronym>-Spezifikation (Version 2.0):
- <ulink url="http://acpi.info/spec.htm"></ulink>,</para>
- </listitem>
-
- <listitem>
- <para>in den nachstehenden &os;-Hilfeseiten:
- &man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;,
- &man.iasl.8; und &man.acpidb.8;,</para>
- </listitem>
-
- <listitem>
- <para><ulink
- url="http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt">
- <acronym>DSDT</acronym> debugging resource</ulink>
- (als Beispiel wird Compaq erläutert, die
- Ressource ist aber dennoch nützlich).</para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
-</chapter>