aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/books/handbook/config/chapter.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/books/handbook/config/chapter.xml')
-rw-r--r--ru_RU.KOI8-R/books/handbook/config/chapter.xml3086
1 files changed, 3086 insertions, 0 deletions
diff --git a/ru_RU.KOI8-R/books/handbook/config/chapter.xml b/ru_RU.KOI8-R/books/handbook/config/chapter.xml
new file mode 100644
index 0000000000..a99290ba37
--- /dev/null
+++ b/ru_RU.KOI8-R/books/handbook/config/chapter.xml
@@ -0,0 +1,3086 @@
+<?xml version="1.0" encoding="koi8-r" standalone="no"?>
+<!--
+ The FreeBSD Documentation Project
+
+ $FreeBSD$
+ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/config/chapter.xml,v 1.45 2006/06/20 18:02:32 marck Exp $
+
+ Original revision: r27981
+-->
+
+<chapter id="config-tuning">
+ <chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Chern</firstname>
+ <surname>Lee</surname>
+ <contrib>Написал </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <firstname>Mike</firstname>
+ <surname>Smith</surname>
+ <contrib>Основывается на учебнике, написанном </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <firstname>Matt</firstname>
+ <surname>Dillon</surname>
+ <contrib>и на tuning(7), написанном </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <firstname>Андрей</firstname>
+ <surname>Мельник</surname>
+ <contrib>Перевод на русский язык: </contrib>
+ </author>
+ <author>
+ <firstname>Денис</firstname>
+ <surname>Пеплин</surname>
+ </author>
+ <author>
+ <firstname>Валерий</firstname>
+ <surname>Кравчук</surname>
+ </author>
+ </authorgroup>
+ </chapterinfo>
+
+ <title>Настройка и оптимизация</title>
+
+ <sect1 id="config-synopsis">
+ <title>Введение</title>
+
+ <indexterm><primary>настройка системы</primary></indexterm>
+ <indexterm><primary>оптимизация системы</primary></indexterm>
+
+ <para>Один из важных аспектов &os; это настройка системы.
+ Правильная настройка системы поможет избежать головной боли при
+ последующих обновлениях. Эта глава описывает большую часть процесса
+ настройки &os;, включая некоторые параметры, которые можно
+ установить для оптимизации системы &os;.</para>
+
+ <para>После прочтения этой главы вы узнаете:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Как эффективно работать с файловыми системами и разделами
+ подкачки.</para> </listitem>
+ <listitem>
+ <para>Основы настройки <filename>rc.conf</filename> и системы запуска
+ приложений <filename>/usr/local/etc/rc.d</filename>.</para>
+ </listitem>
+ <listitem>
+ <para>Как настроить и протестировать сетевую карту.</para>
+ </listitem>
+ <listitem>
+ <para>Как настроить виртуальные хосты на сетевых устройствах.</para>
+ </listitem>
+ <listitem>
+ <para>Как использовать различные файлы конфигурации в
+ <filename>/etc</filename>.</para> </listitem>
+ <listitem>
+ <para>Как оптимизировать &os;, используя переменные
+ <command>sysctl</command>.</para>
+ </listitem>
+ <listitem>
+ <para>Как увеличить скорость работы дисков и изменить ограничения,
+ накладываемые ядром.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Перед прочтением этой главы вам следует:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Понять основы &unix; и &os; (<xref
+ linkend="basics"/>).</para>
+ </listitem>
+ <listitem>
+ <para>Ознакомиться с основами конфигурации/компиляции ядра
+ (<xref linkend="kernelconfig"/>).</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="configtuning-initial">
+ <title>Начальное конфигурирование</title>
+
+ <sect2>
+ <title>Разделы диска</title>
+
+ <indexterm><primary>разделы диска</primary></indexterm>
+ <indexterm>
+ <primary><filename>/etc</filename></primary>
+ </indexterm>
+ <indexterm>
+ <primary><filename>/var</filename></primary>
+ </indexterm>
+ <indexterm>
+ <primary><filename>/usr</filename></primary>
+ </indexterm>
+
+ <sect3>
+ <title>Основы построения разделов</title>
+
+ <para>Во время разметки жёсткого диска с помощью &man.bsdlabel.8;
+ или &man.sysinstall.8;, важно помнить, что скорость чтения и записи
+ данных уменьшается от внешних к внутренним трекам
+ диска. Самые маленькие и самые
+ часто используемые файловые системы (корневая и раздел подкачки)
+ должны быть расположены в начале
+ диска, в то время как самые большие, такие, как
+ <filename>/usr</filename>, в конце. Самым оптимальным считается
+ следующий порядок расположения файловых систем: root, swap,
+ <filename>/var</filename>, <filename>/usr</filename>.</para>
+
+ <para>Размер файловой системы <filename>/var</filename> определяется
+ предназначением машины. <filename>/var</filename>
+ используется для хранения почтовых ящиков, очередей печати и
+ лог файлов. Размер почтовых ящиков и лог файлов может расти
+ неограниченно в зависимости от количества пользователей
+ системы и от того, как долго хранятся лог-файлы. Большинству
+ пользователей никогда не потребуется гигабайт, но помните, что
+ <filename>/var/tmp</filename> должен быть достаточно большим для
+ пакетов.</para>
+
+ <para>В разделе <filename>/usr</filename> содержит большинство
+ файлов, необходимых для поддержки системы, порты
+ (&man.ports.7;, рекомендуется) и исходные тексты (опционально).
+ Оба эти каталога опциональны при установке. Для этого
+ раздела рекомендуется как минимум 2 гигабайта.</para>
+
+ <para>При установке размера разделов, не забудьте принять во внимание
+ рост размера требуемого системе дискового пространства.
+ Переполнение одного раздела даже при наличии свободного места на
+ другом может вызвать затруднения.</para>
+
+ <note><para>Многие пользователи обнаружили, что размер разделов,
+ предлагаемый &man.sysinstall.8;'ом по умолчанию, иногда
+ меньше подходящего для разделов <filename>/var</filename> и
+ <filename>/</filename>. Тщательно планируйте размер разделов и
+ не жалейте места.</para></note>
+ </sect3>
+
+ <sect3 id="swap-design">
+ <title>Раздел подкачки</title>
+
+ <indexterm><primary>размер раздела подкачки</primary></indexterm>
+ <indexterm><primary>раздел подкачки</primary></indexterm>
+
+ <para>Как правило, размер раздела подкачки должен быть равен
+ удвоенному размеру оперативной памяти. Например, если на машине
+ установлено 128&nbsp;мегабайт памяти, раздел
+ подкачки должен быть 256&nbsp;мегабайт. Системы с меньшим
+ количеством памяти могут работать лучше с большим объёмом
+ раздела подкачки. Не рекомендуется устанавливать размер
+ раздела подкачки меньше 256&nbsp;мегабайт, необходимо также
+ принять во внимание возможное наращивание объема установленной
+ на машине памяти.
+ Алгоритмы кэширования VM настроены на максимальное быстродействие, когда
+ размер раздела подкачки равен как минимум удвоенному размеру
+ памяти. Заниженный размер раздела подкачки может привести к
+ неэффективной работе постраничного сканирования VM и вызвать
+ проблемы при увеличении объёма памяти.</para>
+
+ <para>На больших системах с несколькими SCSI дисками (или несколькими
+ IDE дисками, находящимися на разных контроллерах),
+ рекомендуется создавать раздел подкачки на каждом диске (до четырёх
+ дисков). Разделы подкачки должны быть примерно
+ одного размера. Ядро не накладывает ограничений на размер раздела
+ подкачки, но внутренние структуры позволяют иметь общий размер
+ разделов подкачки, равный наибольшему, умноженному на четыре.
+ Выделение под разделы подкачки примерно одинакового места позволить
+ ядру оптимально расположить разделы подкачки. Установка
+ размера подкачки больше требуемого нормальна, даже если этот
+ объем не используется. В этих условиях может быть проще
+ восстановиться после зависания программы перед тем, как
+ возникнет необходимость перезагрузки.</para>
+ </sect3>
+
+ <sect3>
+ <title>Зачем нужны разделы?</title>
+
+ <para>Некоторые пользователи считают, что лучше использовать
+ один большой раздел, но есть несколько причин, по которым этого
+ лучше не делать. Во-первых, у
+ каждого раздела свои характеристики, и отделяя их, можно
+ выполнить соответствующие настройки. Например, корневая и
+ файловая система и <filename>/usr</filename> в основном
+ предназначены для чтения, без большого объема записи.
+ В то же время множество операций чтения и записи
+ выполняется в <filename>/var</filename>
+ и <filename>/var/tmp</filename>.</para>
+
+ <para>При правильном размещении и выборе размера разделов
+ системы, фрагментация в более маленьких разделах, куда часто
+ записываются данные, не перенесётся на остальные разделы.
+ Размещение самых часто используемых разделов ближе к началу диска
+ увеличит скорость ввода/вывода там, где она нужна больше всего.
+ Хотя производительность важна и для больших дисков,
+ передвижение их ближе к концу диска не повлечёт
+ значительного уменьшения быстродействия по сравнению с перемещением
+ ближе к концу диска <filename>/var</filename>.
+ И, наконец, разделы существуют и из соображений
+ безопасности. Наличие маленького аккуратного корневого раздела,
+ доступного только для чтения даёт значительные шансы на "выживание"
+ после краха системы.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 id="configtuning-core-configuration">
+ <title>Основные настройки</title>
+
+ <indexterm>
+ <primary>rc файлы</primary>
+ <secondary><filename>rc.conf</filename></secondary>
+ </indexterm>
+
+ <para>Основные настройки системы располагаются в
+ <filename>/etc/rc.conf</filename>. Этот файл вмещает широкий спектр
+ конфигурационной информации, используемой при загрузке системы.
+ Имя этого файла прямо отражает его назначение, это файл настройки
+ для файлов <filename>rc*</filename>.</para>
+
+ <para>Администратор должен сделать записи в
+ <filename>rc.conf</filename>, чтобы переопределить строки по умолчанию из
+ <filename>/etc/defaults/rc.conf</filename>. Файлы по умолчанию нельзя
+ копировать в <filename>/etc</filename> &mdash; они вмещают значения по
+ умолчанию, а не примеры значений. Все специфичные для данной системы
+ изменения должны быть сделаны в файле
+ <filename>rc.conf</filename>.</para>
+
+ <para>Существует несколько методов для отделения общей конфигурации для
+ группы систем от конкретной для данной системы в целях уменьшения объема
+ работы администратора. Рекомендуемый метод
+ &mdash; прописать общую конфигурацию в отдельный файл, например, в
+ <filename>/etc/rc.conf.site</filename>, и включить его название в
+ <filename>/etc/rc.conf</filename>, который вмещает только специфичную
+ для данной системы информацию.</para>
+
+ <para>Поскольку <filename>rc.conf</filename> читается
+ &man.sh.1;, есть тривиальный способ сделать это. Например:</para>
+
+ <itemizedlist>
+ <listitem><para>rc.conf:</para>
+<programlisting> . /etc/rc.conf.site
+ hostname="node15.example.com"
+ network_interfaces="fxp0 lo0"
+ ifconfig_fxp0="inet 10.1.1.1"</programlisting></listitem>
+ <listitem><para>rc.conf.site:</para>
+<programlisting> defaultrouter="10.1.1.254"
+ saver="daemon"
+ blanktime="100"</programlisting></listitem>
+ </itemizedlist>
+
+ <para>Файл <filename>rc.conf.site</filename> может быть распространён
+ на все системы, используя <command>rsync</command> или подобную ей
+ программу, в то время, как <filename>rc.conf</filename> должен остаться
+ только на одной машине.</para>
+
+ <para>Обновление системы с помощью &man.sysinstall.8;
+ или <command>make world</command> не повлекут за собой перезапись
+ <filename>rc.conf</filename>. Вся информация в этом файле
+ сохранится.</para>
+ </sect1>
+
+ <sect1 id="configtuning-appconfig">
+ <title>Настройка приложений</title>
+
+ <para>Обычно, установленные приложения имеют свои конфигурационные файлы,
+ со своим собственным синтаксисом. Важно хранить эти файлы отдельно от
+ файлов основной системы, чтобы их можно было легко администрировать с
+ помощью средств управления пакетами.</para>
+
+ <indexterm><primary>/usr/local/etc</primary></indexterm>
+
+ <para>Обычно эти файлы устанавливаются в
+ <filename>/usr/local/etc</filename>. В случае, если приложению нужно
+ большое количество конфигурационных файлов, для их хранения будет
+ создан подкаталог.</para>
+
+ <para>Обычно, вместе с установкой портов и пакетов, устанавливаются и
+ примеры конфигурационных файлов. Обычно они имеют расширение
+ <filename>.default</filename>. Если не существует конфигурационных файлов
+ для этого приложения, они будут созданы путём копирования
+ <filename>.default</filename> файлов.</para>
+
+ <para>Например, <filename>/usr/local/etc/apache</filename>:</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>Размеры файлов показывают, что только файл
+ <filename>srm.conf</filename> был изменён. При следующем обновлении
+ <application>Apache</application> этот файл уже не будет
+ перезаписан.</para>
+ </sect1>
+
+ <sect1 id="configtuning-starting-services">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>Предоставил </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>Запуск сервисов</title>
+
+ <indexterm><primary>сервисы</primary></indexterm>
+
+ <para>Многие пользователи предпочитают устанавливать программы сторонних
+ производителей в &os; из набора портов. В подобных случаях
+ может потребоваться сконфигурировать программы так, чтобы они
+ запускались при инициализации системы. Сервисы, такие как
+ <filename role="package">mail/postfix</filename> или
+ <filename role="package">www/apache13</filename>,&nbsp;&mdash;
+ это лишь два примера множества программных пакетов, которые
+ можно запускать при инициализации системы. В этом разделе
+ описывается процедура, предназначенная для запуска программ
+ сторонних разработчиков.</para>
+
+ <para>Большинство входящих в &os; сервисов, таких как &man.cron.8;,
+ запускается с помощью стартовых скриптов системы. Эти скрипты
+ могут различаться в зависимости от версии &os; или ее производителя;
+ однако важнее всего учитывать, что их начальную конфигурацию
+ можно задать с помощью простых стартовых скриптов.</para>
+
+ <para>До появления <filename>rc.d</filename> приложения должны были помещать
+ простой стартовый скрипт в
+ каталог <filename class="directory">/usr/local/etc/rc.d</filename>,
+ который затем читался скриптами инициализации системы. Эти скрипты
+ затем выполнялись в ходе последующих стадий запуска системы.</para>
+
+ <para>Хотя много разработчиков потратили часы на попытки внедрить
+ старый стиль конфигурирования в новую систему, остаётся фактом,
+ что для некоторых утилит сторонних производителей по-прежнему
+ необходим скрипт, помещённый в указанный выше каталог. Незначительные
+ различия в скриптах зависят от того, используется ли <filename>rc.d</filename>. До
+ версии &os;&nbsp;5.1 использовались скрипты в старом стиле,
+ и почти во всех случаях скрипты в новом стиле должны подойти так же
+ хорошо.</para>
+
+ <para>Хотя каждый скрипт должен соответствовать некоторым минимальным
+ требованиям, в большинстве случаев эти требования не зависят от версии
+ &os;. Каждый скрипт должен иметь в конце расширение
+ <filename>.sh</filename> и каждый скрипт должен быть выполняемым.
+ Последнее требование может быть выполнено путем установки командой
+ <command>chmod</command> уникальных прав доступа
+ <literal>755</literal>. Также, как минимум, должна быть опция
+ <literal>start</literal> для запуска приложения и опция
+ <literal>stop</literal> для его остановки.</para>
+
+ <para>Простейший стартовый скрипт, пожалуй, будет похож на
+ следующий:</para>
+
+ <programlisting>#!/bin/sh
+echo -n ' utility'
+
+case "$1" in
+start)
+ /usr/local/bin/utility
+ ;;
+stop)
+ kill -9 `cat /var/run/utility.pid`
+ ;;
+*)
+ echo "Usage: `basename $0` {start|stop}" &gt;&2
+ exit 64
+ ;;
+esac
+
+exit 0</programlisting>
+
+ <para>Этот скрипт поддерживает опции <literal>stop</literal> и
+ <literal>start</literal> для приложения, которое мы здесь называем
+ просто&nbsp;&mdash; <literal>utility</literal>.</para>
+
+ <para>А можно запускать его и вручную, с помощью команды:</para>
+
+ <screen>&prompt.root; <userinput><filename>/usr/local/etc/rc.d/utility.sh</filename> start</userinput></screen>
+
+ <para>Хотя и не все программы сторонних производителей требуют
+ добавления строки в файл <filename>rc.conf</filename>, практически
+ каждый день очередной новый порт меняется так, чтобы поддерживать
+ подобную конфигурацию. Поищите в результатах, выдаваемых после
+ установки более детальную информацию по конкретному приложению.
+ Некоторые программы сторонних производителей будут включать стартовые
+ скрипты, позволяющие использовать приложение с <filename>rc.d</filename>; но это мы еще
+ обсудим в следующем разделе.</para>
+
+ <sect2>
+ <title>Расширенное конфигурирование приложения</title>
+
+ <para>Теперь, когда &os; включает <filename>rc.d</filename>, конфигурирование запуска
+ приложений стало более оптимальным; фактически, оно стало более
+ тщательным. С помощью ключевых слов, рассмотренных в разделе
+ <link linkend="configtuning-rcd">rc.d</link>, приложения теперь
+ можно настроить для запуска после других заданных сервисов,
+ например, <acronym>DNS</acronym>; можно разрешить передачу
+ дополнительных флагов через <filename>rc.conf</filename> вместо
+ жесткого задания флагов в стартовых скриптах, и т.д. Простой
+ скрипт может иметь следующий вид:</para>
+
+ <programlisting>#!/bin/sh
+#
+# PROVIDE: utility
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
+
+. /etc/rc.subr
+
+name=utility
+rcvar=utility_pidfile
+
+command="/usr/local/sbin/utility"
+
+load_rc_config $name
+
+#
+# НЕ МЕНЯЙТЕ ЗДЕСЬ ЭТИ СТАНДАРТНЫЕ ЗНАЧЕНИЯ
+# ЗАДАВАЙТЕ ИХ В ФАЙЛЕ /etc/rc.conf
+#
+utility_enable=${utility_enable-"NO"}
+pidfile=${utility_pidfile-"/var/run/utility.pid"}
+
+run_rc_command "$1"</programlisting>
+
+ <para>Этот скрипт будет гарантировать, что указанное приложение
+ <application>utility</application> будет запущено после сервиса
+ <literal>daemon</literal>. Он также предоставляет метод
+ для создания и отслеживания файла идентификатора процесса,
+ <acronym>PID</acronym>.</para>
+
+ <para>Для этого приложения затем можно поместить следующую
+ строку в файл <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>utility_enable="YES"</programlisting>
+
+ <para>Этот новый метод также позволяет легко работать с аргументами
+ командной строки, включать стандартные функции из файла
+ <filename>/etc/rc.subr</filename>, обеспечивает совместимость
+ с утилитой &man.rcorder.8; и упрощает конфигурирование с помощью
+ файла <filename>rc.conf</filename>.</para>
+ </sect2>
+
+ <sect2>
+ <title>Использование сервисов для запуска сервисов</title>
+
+ <para>Другие сервисы, такие как даемоны сервера
+ <acronym>POP</acronym>3, <acronym>IMAP</acronym>, и т.п. могут
+ быть запущены с помощью &man.inetd.8;. Для этого необходимо
+ установить сервисную утилиту из набора портов и добавить
+ соответствующую строчку конфигурации в файл
+ <filename>/etc/inetd.conf</filename> или раскомментировать
+ подходящую строку конфигурации из уже имеющихся. Работа с даемоном
+ <application>inetd</application> и его конфигурирование подробно описаны
+ в разделе <link linkend="network-inetd">inetd</link>.</para>
+
+ <para>В некоторых случаях использование для запуска системных
+ служб даемона &man.cron.8; может оказаться более приемлемым. Этот
+ подход имеет несколько преимуществ, поскольку даемон
+ <command>cron</command> запускает эти процессы от имени
+ владельца файла <filename>crontab</filename>. Это позволяет
+ обычным пользователям запускать и поддерживать некоторые
+ приложения.</para>
+
+ <para>Утилита <command>cron</command> поддерживает уникальную
+ возможность, <literal>@reboot</literal>,&nbsp;&mdash; это значение
+ можно использовать вместо спецификации времени. В результате,
+ задание будет выполнено при запуске &man.cron.8;, обычно&nbsp;&mdash;
+ в ходе инициализации системы.</para>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="configtuning-cron">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>Предоставил </contrib>
+ <!-- 20 May 2003 -->
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>Настройка утилиты <command>cron</command></title>
+
+ <indexterm><primary>cron</primary>
+ <secondary>настройка</secondary></indexterm>
+
+ <para>Одна из наиболее полезных утилит &os; это &man.cron.8;. Утилита
+ <command>cron</command> работает в фоновом режиме и постоянно проверяет
+ файл <filename>/etc/crontab</filename>. Утилита <command>cron</command>
+ проверяет также каталог <filename>/var/cron/tabs</filename> в поиске
+ новых файлов <filename>crontab</filename>. Файлы
+ <filename>crontab</filename> содержат информацию об определенных
+ функциях, которые <command>cron</command> выполняет в указанное
+ время.</para>
+
+ <para>Утилита <command>cron</command> использует два разных типа
+ конфигурационных файлов, системный и пользовательский.
+ Все различие между этими двумя форматами заключается в
+ шестом поле. В системном файле шестое поля это имя пользователя,
+ с правами которого будет запущена команда. Это позволяет запускать
+ команды из системного crontab от любого пользователя. В
+ пользовательском файле шестое поле указывает запускаемую команду, и
+ все команды запускаются от пользователя, который создал crontab;
+ это важно для безопасности.</para>
+
+ <note>
+ <para>Пользовательские crontab позволяют индивидуальным пользователям
+ планировать задачи без привилегий суперпользователя
+ (<username>root</username>). Команды из
+ crontab пользователя запускаются с привилегиями этого
+ пользователя.</para>
+
+ <para>Пользователь <username>root</username> может использовать
+ собственный crontab, как и любой другой пользователь. Он будет
+ отличаться от системного crontab <filename>/etc/crontab</filename>.
+ Поскольку существует системный crontab, обычно не требуется
+ создавать пользовательский crontab для
+ <username>root</username>.</para>
+ </note>
+
+ <para>Давайте заглянем в файл <filename>/etc/crontab</filename>
+ (системный crontab):</para>
+
+ <programlisting># /etc/crontab - root's crontab for &os;
+#
+# &dollar;&os;: 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>Как и в большинстве файлов настройки FreeBSD, символы <quote>#</quote>
+ означают комментарии. Комментарии нужны для напоминания о том,
+ что означает строка и зачем она добавлена. Комментарии не могут
+ находиться на той же строке, что и команда, или они будут
+ восприняты как часть команды; располагайте их на новой строке.
+ Пустые строки игнорируются.</para>
+ </callout>
+
+ <callout arearefs="co-env">
+ <para>Сначала должны быть заданы переменные окружения. Знак равно
+ (<literal>=</literal>) используется для задания переменных
+ окружения, в этом примере <envar>SHELL</envar>, <envar>PATH</envar>,
+ и <envar>HOME</envar>. Если переменная для оболочки не задана,
+ <command>cron</command> использует оболочку по умолчанию,
+ <command>sh</command>. Если не задана переменная
+ <envar>PATH</envar>, значение по умолчанию не устанавливается и
+ пути к файлам должны быть полными. Если не задана переменная
+ <envar>HOME</envar>, <command>cron</command> будет использовать
+ домашний каталог соответствующего пользователя.</para>
+ </callout>
+
+ <callout arearefs="co-field-descr">
+ <para>В строке всего семь полей. Их значения
+ <literal>minute</literal>, <literal>hour</literal>,
+ <literal>mday</literal>, <literal>month</literal>,
+ <literal>wday</literal>, <literal>who</literal> (кто), и
+ <literal>command</literal>. Значение полей почти очевидно.
+ <literal>minute</literal> это время в минутах, когда будет запущена
+ команда. <literal>hour</literal> означает то же самое для часов.
+ <literal>mday</literal> означает день месяца.
+ <literal>month</literal>, это то же самое, что час и минута,
+ но для месяцев. Параметр <literal>wday</literal> это день
+ недели. Все эти поля должны быть в
+ числовом формате, время в двадцатичетырехчасовом исчислении.
+ Поле <literal>who</literal> имеет специальное значение, и
+ присутствует только в файле <filename>/etc/crontab</filename>.
+ Это поле определяет пользователя, с правами которого должна быть
+ запущена команда. Когда пользователь устанавливает собственный
+ файл <filename>crontab</filename>, он не указывает этот параметр.
+ Последний параметр <literal>command</literal>. Он указывает команду, которая должна
+ быть запущена.</para>
+ </callout>
+
+ <callout arearefs="co-main">
+ <para>Последняя строка определяет параметры, описанные выше. Здесь
+ задано значение <literal>*/5</literal>, и несколько символов
+ <literal>*</literal>. Эти символы <literal>*</literal> означают
+ <quote>первый-последний</quote>, и могут быть интерпретированы как
+ <emphasis>каждый</emphasis>. Таким образом, для этой строки
+ соответствующая команда <command>atrun</command> вызывается
+ под пользователем <username>root</username> каждые пять минут
+ независимо от дня или месяца. За дополнительной информацией по
+ команде <command>atrun</command> обращайтесь к странице справочника
+ &man.atrun.8;.</para>
+
+ <para>Команды могут принимать любое количество параметров; однако
+ команды, состоящие из нескольких строк, должны быть объединены
+ символом <quote>\</quote>.</para>
+ </callout>
+ </calloutlist>
+
+ <para>Этот формат одинаков для каждого файла <filename>crontab</filename>,
+ за исключением одной детали. Шестое поле, где указано имя пользователя,
+ присутствует только в файле <filename>/etc/crontab</filename>. Это
+ поле должно быть исключено из <filename>crontab</filename> файлов
+ пользователей.</para>
+
+ <sect2 id="configtuning-installcrontab">
+ <title>Установка crontab</title>
+
+ <important>
+ <para>Вы не должны использовать процедуру, описанную здесь, для
+ установки системного crontab. Просто используйте свой
+ любимый текстовый редактор: утилита <command>cron</command>
+ узнает о том, что файл изменился и сразу начнет использовать
+ обновленную версию. Обратитесь к <ulink
+ url="&url.books.faq;/admin.html#ROOT-NOT-FOUND-CRON-ERRORS">этой
+ части FAQ</ulink> за дальнейшей информацией.</para>
+ </important>
+
+ <para>Для установки готового <filename>crontab</filename> пользователя,
+ сначала создайте в вашем любимом редакторе файл соответствующего
+ формата, а затем воспользуйтесь утилитой
+ <command>crontab</command>. Обычно она запускается
+ так:</para>
+
+ <screen>&prompt.user; <userinput>crontab crontab-file</userinput></screen>
+
+ <para>В этом примере, <filename>crontab-file</filename> это имя файла
+ crontab, который только что был создан.</para>
+
+ <para>Существует также параметр для просмотра установленных файлов
+ <filename>crontab</filename>: задайте <command>crontab</command>
+ параметр <option>-l</option>.</para>
+
+ <para>Для пользователей, составляющих crontab вручную, без временного
+ файла, существует параметр <command>crontab -e</command>.
+ Она вызовет редактор с пустым файлом. Когда файл будет сохранен,
+ <command>crontab</command> автоматически установит его.</para>
+
+ <para>Если позднее вы захотите полностью удалить свой
+ <filename>crontab</filename>, используйте
+ <command>crontab</command> с параметром <option>-r</option>.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="configtuning-rcd">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>Предоставил </contrib>
+ <!-- 16 May 2003 -->
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title>Использование rc во &os; 5.X и последующих версиях</title>
+
+ <para>Во &os; недавно была интегрирована из NetBSD система
+ <filename>rc.d</filename>, используемая для старта системы.
+ Многие из файлов в каталоге <filename>/etc/rc.d</filename>
+ предназначены для основных сервисов, они могут управляться
+ параметрами <option>start</option>,
+ <option>stop</option>, и
+ <option>restart</option>. Например, &man.sshd.8; может быть
+ перезапущен следующей командой:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/sshd restart</userinput></screen>
+
+ <para>Эта процедура похожа для других сервисов. Конечно, сервисы
+ обычно запускаются автоматически при загрузке системы, как указано в &man.rc.conf.5;.
+ Например, включение даемона Network Address Translation
+ при запуске выполняется простым добавлением следующей строки
+ в <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>natd_enable="YES"</programlisting>
+
+ <para>Если <option>natd_enable="NO"</option> уже присутствует,
+ просто измените <option>NO</option> на <option>YES</option>.
+ Скрипты rc автоматически загрузят все другие зависимые
+ сервисы, как описано ниже.</para>
+
+ <para>Поскольку система <filename>rc.d</filename> в основном предназначена
+ для запуска/отключения сервисов во время запуска/отключения
+ системы, стандартные параметры <option>start</option>,
+ <option>stop</option> и <option>restart</option> будут работать
+ только если установлена соответствующая переменная в
+ <filename>/etc/rc.conf</filename>. Например, команда выше
+ <command>sshd restart</command> будет работать только если
+ переменная <varname>sshd_enable</varname> в файле
+ <filename>/etc/rc.conf</filename> установлена в <option>YES</option>.
+ Для выполнения скриптов независимо от установок в
+ <filename>/etc/rc.conf</filename>, параметры <option>start</option>,
+ <option>stop</option> или <option>restart</option> необходимо
+ задавать с префиксом <quote>force</quote>. Например, для
+ перезапуска <command>sshd</command> независимо от установок в
+ <filename>/etc/rc.conf</filename>, выполните следующую
+ команду:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/sshd forcerestart</userinput></screen>
+
+ <para>Проверить состояние переменной в файле
+ <filename>/etc/rc.conf</filename> легко: запустите соответствующий
+ скрипт из <filename>rc.d</filename> с параметром
+ <option>rcvar</option>. Проверка переменной для
+ <command>sshd</command> выполняется следующей командой:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/sshd rcvar</userinput>
+# sshd
+$sshd_enable=YES</screen>
+
+ <note>
+ <para>Вторая строка (<literal># sshd</literal>) это вывод
+ команды <command>sshd</command>, а не консоль
+ <username>root</username>.</para>
+ </note>
+
+ <para>Чтобы определить, запущен ли сервис, существует параметр
+ <option>status</option>. Например для проверки того, запущен ли
+ <command>sshd</command>, выполните:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/sshd status</userinput>
+sshd is running as pid 433.</screen>
+
+ <para>В некоторых случаях возможна также перегрузка (<option>reload</option>) сервиса.
+ Скрипт, запущенный с этим параметром, попытается отправить сервису
+ сигнал, вызывающий перезагрузку файлов настройки. В большинстве
+ случаев это означает отправку сервису сигнала
+ <literal>SIGHUP</literal>. Следует помнить, что эту функцию
+ поддерживают не все сервисы.</para>
+
+ <para>Система <filename>rc.d</filename> используется не только для
+ сетевых серверов, она отвечает также за большую часть инициализации
+ системы.
+ Рассмотрим, к примеру, файл <filename>bgfsck</filename>. Во время
+ выполнения этот скрипт выводит следующее сообщение:</para>
+
+ <screen>Starting background file system checks in 60 seconds.</screen>
+
+ <para>Следовательно, этот файл используется для фоновой проверки файловых
+ систем, которая выполняется только в процессе инициализации
+ системы.</para>
+
+ <para>Функционирование многих сервисов системы зависит от корректной
+ работы других сервисов. Например, NIS и другие основанные на
+ RPC сервисы могут не запуститься, пока не загрузится
+ <command>rpcbind</command> (portmapper). Для разрешения этой
+ проблемы, в начале каждого скрипта в комментарии включаются
+ информация о зависимостях и другие метаданные. Программа
+ &man.rcorder.8; используется для разбора этих комментариев во время старта
+ системы для определения порядка, в котором должны вызываться
+ системные сервисы в соответствии с зависимостями. В начало
+ каждого стартового файла должны быть включены следующие
+ строки:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>PROVIDE</literal>: Задает имя сервиса, предоставляемого этим файлом.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>REQUIRE</literal>: Список сервисов, необходимых этому сервису. Этот
+ файл будет запущен <emphasis>после</emphasis> указанных
+ сервисов.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>BEFORE</literal>: Список сервисов, зависящих от этого сервиса. Этот
+ файл будет запущен <emphasis>до</emphasis> указанных
+ сервисов.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Используя этот метод, администратор может легко контролировать
+ системные сервисы без использования <quote>уровней запуска</quote>,
+ как в некоторых других операционных системах &unix;.</para>
+
+ <para>Дополнительную информацию о системе <filename>rc.d</filename>
+ можно найти на страницах справочника &man.rc.8; и
+ &man.rc.subr.8;.</para>
+ </sect1>
+
+ <sect1 id="config-network-setup">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Marc</firstname>
+ <surname>Fonvieille</surname>
+ <contrib>Предоставил </contrib>
+ <!-- 6 October 2002 -->
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title>Настройка карт сетевых интерфейсов</title>
+
+ <indexterm>
+ <primary>сетевые карты</primary>
+ <secondary>настройка</secondary>
+ </indexterm>
+
+ <para>В наши дни мы не представляем себе компьютера без сетевого
+ подключения. Добавление и настройка сетевой карты это
+ обычная задача любого администратора &os;.</para>
+
+ <sect2>
+ <title>Поиск подходящего драйвера</title>
+
+ <indexterm>
+ <primary>сетевые карты</primary>
+ <secondary>драйвер</secondary>
+ </indexterm>
+
+ <para>В первую очередь определите тип используемой карты (PCI или ISA),
+ модель карты и используемый в ней чип. &os; поддерживает
+ многие PCI и ISA карты. Обратитесь к Списку поддерживаемого
+ оборудования вашего релиза чтобы узнать, поддерживается ли
+ карта.</para>
+
+ <para>Как только вы убедились, что карта поддерживается, потребуется
+ определить подходящий драйвер. В файлах
+ <filename>/usr/src/sys/conf/NOTES</filename> и
+ <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename>
+ находится список
+ драйверов сетевых интерфейсов с информацией о поддерживаемых
+ чипсетах/картах. Если вы сомневаетесь в том, какой драйвер
+ подойдет, прочтите страницу справочника к драйверу.
+ Страница справочника содержит больше информации о поддерживаемом
+ оборудовании и даже о проблемах, которые могут возникнуть.</para>
+
+ <para>Если ваша карта широко распространена, вам скорее всего
+ не потребуется долго искать драйвер. Драйверы для
+ широко распространенных карт представлены в ядре
+ <filename>GENERIC</filename>, так что ваша карта должна определиться
+ при загрузке, примерно так:</para>
+
+<screen>dc0: &lt;82c169 PNIC 10/100BaseTX&gt; port 0xa000-0xa0ff mem 0xd3800000-0xd38
+000ff irq 15 at device 11.0 on pci0
+dc0: Ethernet address: 00:a0:cc:da:da:da
+miibus0: &lt;MII bus&gt; on dc0
+ukphy0: &lt;Generic IEEE 802.3u media interface&gt; on miibus0
+ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
+dc1: &lt;82c169 PNIC 10/100BaseTX&gt; port 0x9800-0x98ff mem 0xd3000000-0xd30
+000ff irq 11 at device 12.0 on pci0
+dc1: Ethernet address: 00:a0:cc:da:da:db
+miibus1: &lt;MII bus&gt; on dc1
+ukphy1: &lt;Generic IEEE 802.3u media interface&gt; on miibus1
+ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto</screen>
+
+ <para>В этом примере две карты используют имеющийся в системе
+ драйвер &man.dc.4;.</para>
+
+ <para>Если драйвер вашей сетевой карты отсутствует в
+ <filename>GENERIC</filename>, для ее использования потребуется
+ загрузить подходящий драйвер. Это может быть сделано одним
+ из двух способов:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Простейший способ &mdash; просто загрузить модуль
+ ядра сетевой карты с помощью &man.kldload.8;. Не все
+ драйверы доступны в виде модулей; например, модули
+ отсутствуют для ISA карт.</para>
+ </listitem>
+
+ <listitem>
+ <para>Вместо этого, вы можете статически включить поддержку карты,
+ скомпилировав собственное ядро. Информацию о том, какие
+ параметры нужно включать в ядро, можно получить из
+ <filename>/usr/src/sys/conf/NOTES</filename>,
+ <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename>
+ и страницы справочника драйвера сетевой карты.
+ За более подробной информацией о сборке собственного ядра
+ обращайтесь к <xref linkend="kernelconfig"/>. Если карта
+ была обнаружена вашим ядром (<filename>GENERIC</filename>)
+ во время загрузки, собирать ядро не потребуется.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Настройка сетевой карты</title>
+
+ <indexterm>
+ <primary>сетевые карты</primary>
+ <secondary>настройка</secondary>
+ </indexterm>
+
+ <para>Как только для сетевой карты загружен подходящий драйвер,
+ ее потребуется настроить. Как и многое другое, сетевая
+ карта может быть настроена во время установки с помощью
+ <application>sysinstall</application>.</para>
+
+ <para>Для вывода информации о настройке сетевых интерфейсов системы,
+ введите следующую команду:</para>
+
+<screen>&prompt.user; <userinput>ifconfig</userinput>
+dc0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
+ ether 00:a0:cc:da:da:da
+ media: Ethernet autoselect (100baseTX &lt;full-duplex&gt;)
+ status: active
+dc1: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
+ ether 00:a0:cc:da:da:db
+ media: Ethernet 10baseT/UTP
+ status: no carrier
+lp0: flags=8810&lt;POINTOPOINT,SIMPLEX,MULTICAST&gt; mtu 1500
+lo0: flags=8049&lt;UP,LOOPBACK,RUNNING,MULTICAST&gt; mtu 16384
+ inet 127.0.0.1 netmask 0xff000000
+tun0: flags=8010&lt;POINTOPOINT,MULTICAST&gt; mtu 1500</screen>
+
+ <note>
+ <para>Старые версии &os; могут потребовать запуска
+ &man.ifconfig.8; с параметром <option>-a</option>, за
+ более подробным описанием синтаксиса &man.ifconfig.8;
+ обращайтесь к странице справочника. Учтите также, что
+ строки, относящиеся к IPv6 (<literal>inet6</literal> и т.п.)
+ убраны из этого примера.</para>
+ </note>
+
+ <para>В этом примере были показаны следующие устройства:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><devicename>dc0</devicename>: первый Ethernet
+ интерфейс</para>
+ </listitem>
+
+ <listitem>
+ <para><devicename>dc1</devicename>: второй Ethernet
+ интерфейс</para>
+ </listitem>
+
+ <listitem>
+ <para><devicename>lp0</devicename>: интерфейс параллельного
+ порта</para>
+ </listitem>
+
+ <listitem>
+ <para><devicename>lo0</devicename>: устройство loopback</para>
+ </listitem>
+
+ <listitem>
+ <para><devicename>tun0</devicename>: туннельное устройство,
+ используемое <application>ppp</application></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Для присвоения имени сетевой карте &os; использует имя
+ драйвера и порядковый номер, в котором карта обнаруживается
+ при инициализации устройств. Например, <devicename>sis2</devicename>
+ это третья сетевая карта, использующая драйвер &man.sis.4;.</para>
+
+ <para>В этом примере, устройство <devicename>dc0</devicename> включено
+ и работает. Ключевые признаки таковы:</para>
+
+ <orderedlist>
+ <listitem>
+ <para><literal>UP</literal> означает, что карта настроена и
+ готова.</para>
+ </listitem>
+
+ <listitem>
+ <para>У карты есть интернет (<literal>inet</literal>)
+ адрес (в данном случае
+ <hostid role="ipaddr">192.168.1.3</hostid>).</para>
+ </listitem>
+
+ <listitem>
+ <para>Установлена маска подсети (<literal>netmask</literal>;
+ <hostid role="netmask">0xffffff00</hostid>, то же, что и
+ <hostid role="netmask">255.255.255.0</hostid>).</para>
+ </listitem>
+
+ <listitem>
+ <para>Широковещательный адрес (в данном случае,
+ <hostid role="ipaddr">192.168.1.255</hostid>).</para>
+ </listitem>
+
+ <listitem>
+ <para>Значение MAC адреса карты (<literal>ether</literal>)
+ <hostid role="mac">00:a0:cc:da:da:da</hostid></para>
+ </listitem>
+
+ <listitem>
+ <para>Выбор физической среды передачи данных в режиме автовыбора
+ (<literal>media: Ethernet autoselect (100baseTX
+ &lt;full-duplex&gt;)</literal>). Мы видим, что
+ <devicename>dc1</devicename> была настроена для работы с
+ <literal>10baseT/UTP</literal>. За более подробной
+ информацией о доступных драйверу типах среды обращайтесь
+ к странице справочника.</para>
+ </listitem>
+
+ <listitem>
+ <para>Статус соединения (<literal>status</literal>)
+ <literal>active</literal>, т.е. несущая обнаружена.
+ Для <devicename>dc1</devicename>, мы видим
+ <literal>status: no carrier</literal>. Это нормально, когда
+ Ethernet кабель не подключен к карте.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Если &man.ifconfig.8; показывает примерно следующее:</para>
+
+<screen>dc0: flags=8843&lt;BROADCAST,SIMPLEX,MULTICAST&gt; mtu 1500
+ ether 00:a0:cc:da:da:da</screen>
+
+ <para>это означает, что карта не была настроена.</para>
+
+ <para>Для настройки карты вам потребуются привилегии пользователя
+ <username>root</username>. Настройка сетевой карты может быть
+ выполнена из командной строки с помощью &man.ifconfig.8;, но
+ вам потребуется делать это после каждой перезагрузки системы.
+ Подходящее место для настройки сетевых карт это файл
+ <filename>/etc/rc.conf</filename>.</para>
+
+ <para>Откройте <filename>/etc/rc.conf</filename> в текстовом
+ редакторе. Вам потребуется добавить строку для каждой сетевой
+ карты, имеющейся в системе, например, в нашем случае, было
+ добавлено две строки:</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>Замените <devicename>dc0</devicename>,
+ <devicename>dc1</devicename>, и так далее на соответствующие
+ имена ваших карт, подставьте соответствующие адреса.
+ Обратитесь к страницам справочника сетевой карты и
+ &man.ifconfig.8;, за подробной информацией о доступных
+ опциях и к странице справочника &man.rc.conf.5; за дополнительной
+ информацией о синтаксисе <filename>/etc/rc.conf</filename>.</para>
+
+ <para>Если вы настроили сетевую карту в процессе установки системы,
+ некоторые строки, касающиеся сетевой карты, могут уже присутствовать.
+ Внимательно проверьте <filename>/etc/rc.conf</filename> перед
+ добавлением каких-либо строк.</para>
+
+ <para>Отредактируйте также файл <filename>/etc/hosts</filename>
+ для добавления имен и IP адресов различных компьютеров сети,
+ если их еще там нет. За дополнительной информацией обращайтесь
+ к man.hosts.5;
+ и к <filename>/usr/share/examples/etc/hosts</filename>.</para>
+ </sect2>
+
+ <sect2>
+ <title>Тестирование и решение проблем</title>
+
+ <para>Как только вы внесете необходимые изменения в
+ <filename>/etc/rc.conf</filename>, перегрузите компьютер.
+ Изменения настроек интерфейсов будут применены, кроме того
+ будет проверена правильность настроек.</para>
+
+ <para>Как только система перезагрузится, проверьте сетевые
+ интерфейсы.</para>
+
+ <sect3>
+ <title>Проверка Ethernet карты</title>
+
+ <indexterm>
+ <primary>сетевые карты</primary>
+ <secondary>тестирование</secondary>
+ </indexterm>
+
+ <para>Для проверки правильности настройки сетевой карты,
+ попробуйте выполнить ping для самого интерфейса, а затем
+ для другой машины в локальной сети.</para>
+
+ <para>Сначала проверьте локальный интерфейс:</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>Затем проверьте другую машину в локальной сети:</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>Вы можете также использовать имя машины вместо
+ <hostid role="ipaddr">192.168.1.2</hostid>, если настроен файл
+ <filename>/etc/hosts</filename>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Решение проблем</title>
+
+ <indexterm>
+ <primary>сетевые карты</primary>
+ <secondary>решение проблем</secondary>
+ </indexterm>
+
+ <para>Решение проблем с аппаратным и программным обеспечением всегда
+ вызывает сложности, которые можно уменьшить, проверив сначала
+ самые простые варианты. Подключен ли сетевой кабель? Правильно ли
+ настроены сетевые сервисы? Правильно ли настроен брандмауэр?
+ Поддерживается ли используемая карта в &os;? Всегда проверяйте
+ информацию об оборудовании перед отправкой сообщения об ошибке.
+ Обновите &os; до последней версии STABLE. Просмотрите
+ архивы списков рассылки, или поищите информацию в интернет.</para>
+
+ <para>Если карта работает, но производительность низка, может помочь
+ чтение страницы справочника &man.tuning.7;. Проверьте также
+ настройки сети, поскольку неправильные настройки могут стать причиной
+ низкой скорости соединения.</para>
+
+ <para>Некоторые пользователи встречаются с несколькими
+ <errorname>device timeouts</errorname>, что нормально для некоторых
+ сетевых карт. Если это продолжается и надоедает, убедитесь, что
+ устройство не конфликтует с другим устройством. Внимательно
+ проверьте подключение кабеля. Возможно также, что вам просто надо
+ установить другую карту.</para>
+
+ <para>Время от времени, пользователи видят несколько ошибок
+ <errorname>watchdog timeout</errorname>. Первое, что требуется сделать,
+ это проверить сетевой кабель. Многие карты требуют поддержки
+ Bus Mastering слотом PCI. На некоторых старых материнских платах,
+ только один PCI слот имеет такую поддержку (обычно слот 0).
+ Сверьтесь с документацией на сетевую карту и материнскую плату,
+ чтобы определить, может ли это быть проблемой.</para>
+
+ <para>Сообщение <errorname>No route to host</errorname> появляются, если
+ система не в состоянии доставить пакеты к хосту назначения.
+ Это может случиться, если не определен маршрут по умолчанию,
+ или кабель не подключен. Проверьте вывод команды <command>netstat
+ -rn</command> и убедитесь, что к соответствующему хосту
+ есть работающий маршрут. Если это не так, прочтите <xref
+ linkend="advanced-networking"/>.</para>
+
+ <para>Сообщения <errorname>ping: sendto: Permission denied</errorname>
+ зачастую появляются при неправильно настроенном брандмауэре.
+ Если <command>ipfw</command> включен в ядре, но правила не
+ определены, правило по умолчанию блокирует весь трафик,
+ даже запросы ping! Прочтите <xref
+ linkend="firewalls"/> с более подробной информацией.</para>
+
+ <para>Иногда скорость карты недостаточна, или ниже среднего. В этих случаях
+ лучше всего изменить режим выбора типа подключения с
+ <literal>autoselect</literal> на правильный тип.
+ Обычно это работает для большинства оборудования, но не может
+ решить проблему во всех случаях. Проверьте еще раз настройки сети
+ и прочтите страницу справочника &man.tuning.7;.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 id="configtuning-virtual-hosts">
+ <title>Настройка виртуальных серверов</title>
+
+ <indexterm><primary>виртуальные сервера</primary></indexterm>
+ <indexterm><primary>синонимы ip</primary></indexterm>
+
+ <para>Очень часто &os; используется для размещения сайтов, когда
+ один сервер работает в сети как несколько серверов. Это достигается
+ присвоением нескольких сетевых адресов одному интерфейсу.</para>
+
+ <para>У сетевого интерфейса всегда есть один <quote>настоящий</quote>
+ адрес, хотя он может иметь любое количество <quote>синонимов</quote>
+ (alias). Эти синонимы обычно добавляются путём помещения
+ соответствующих записей в <filename>/etc/rc.conf</filename>.</para>
+
+ <para>Синоним для интерфейса <devicename>fxp0</devicename> выглядит
+ следующим образом:</para>
+
+<programlisting>ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"</programlisting>
+
+ <para>Заметьте, что записи синонимов должны начинаться с
+ <literal>alias0</literal> и идти далее в определенном порядке
+ (например, <literal>_alias1</literal>, <literal>_alias2</literal>,
+ и т.д.). Конфигурационный процесс остановится на первом по порядку
+ отсутствующем числе.</para>
+
+ <para>Определение маски подсети для синонима очень важно, но к счастью,
+ так же просто. Для каждого интерфейса должен быть один адрес с
+ истинной маской подсети. Любой другой адрес в сети должен иметь
+ маску подсети, состоящую из всех единичек (что выражается как
+ <hostid role="netmask">255.255.255.255</hostid> или как
+ <hostid role="netmask">0xffffffff</hostid>).</para>
+
+ <para>Например, рассмотрим случай, когда интерфейс
+ <devicename>fxp0</devicename> подключён к двум сетям, к сети
+ <hostid role="ipaddr">10.1.1.0</hostid> с маской подсети
+ <hostid role="netmask">255.255.255.0</hostid> и к сети
+ <hostid role="ipaddr">202.0.75.16</hostid> с маской
+ <hostid role="netmask">255.255.255.240</hostid>. Мы хотим,
+ чтобы система была видна по IP, начиная с
+ <hostid role="ipaddr">10.1.1.1</hostid> по
+ <hostid role="ipaddr">10.1.1.5</hostid> и с
+ <hostid role="ipaddr">202.0.75.17</hostid> по
+ <hostid role="ipaddr">202.0.75.20</hostid>. Как было сказано выше,
+ только первый адрес в заданном диапазоне (в данном случае,
+ <hostid role="ipaddr">10.0.1.1</hostid> и
+ <hostid role="ipaddr">202.0.75.17</hostid>) должен иметь реальную
+ маску сети; все остальные (с <hostid role="ipaddr">10.1.1.2</hostid>
+ по <hostid role="ipaddr">10.1.1.5</hostid> и с
+ <hostid role="ipaddr">202.0.75.18</hostid> по
+ <hostid role="ipaddr">202.0.75.20</hostid>) должны быть
+ сконфигурированы с маской сети
+ <hostid role="netmask">255.255.255.255</hostid>.</para>
+
+ <para>Для этого в файл <filename>/etc/rc.conf</filename>
+ должны быть внесены следующие записи:</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>Файлы настройки</title>
+
+ <sect2>
+ <title>Каталог <filename>/etc</filename></title>
+ <para>Во FreeBSD определён ряд каталогов, предназначенных для
+ хранения конфигурационных файлов. Это:</para>
+
+ <informaltable frame="none" pgwide="1">
+ <tgroup cols="2">
+ <colspec colwidth="1*"/>
+ <colspec colwidth="2*"/>
+
+ <tbody>
+ <row>
+ <entry><filename>/etc</filename></entry>
+ <entry>Основные файлы конфигурации системы. Тут размещены
+ системно&ndash;зависимые данные.</entry>
+ </row>
+ <row>
+ <entry><filename>/etc/defaults</filename></entry>
+ <entry>Версии системных конфигурационных файлов по
+ умолчанию.</entry>
+ </row>
+ <row>
+ <entry><filename>/etc/mail</filename></entry>
+ <entry>Дополнительные конфигурационные файлы &man.sendmail.8;,
+ другие конфигурационные файлы MTA.
+ </entry>
+ </row>
+ <row>
+ <entry><filename>/etc/ppp</filename></entry>
+ <entry>Настройка для user- и kernel-ppp программ.
+ </entry>
+ </row>
+ <row>
+ <entry><filename>/etc/namedb</filename></entry>
+ <entry>Основное место расположения данных &man.named.8;.
+ Обычно <filename>named.conf</filename> и файлы зон
+ расположены здесь.</entry>
+ </row>
+ <row>
+ <entry><filename>/usr/local/etc</filename></entry>
+ <entry>Конфигурационные файлы установленных приложений. Могут
+ содержать подкаталоги приложений.</entry>
+ </row>
+ <row>
+ <entry><filename>/usr/local/etc/rc.d</filename></entry>
+ <entry>Скрипты запуска/остановки установленных приложений.</entry>
+ </row>
+ <row>
+ <entry><filename>/var/db</filename></entry>
+ <entry>Автоматически генерируемые системно-специфичные файлы
+ баз данных, такие как база данных пакетов, и так
+ далее</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect2>
+
+ <sect2>
+ <title>Имена хостов</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><filename>/etc/resolv.conf</filename> определяет, как
+ резолвер (resolver) &os; получает доступ к Системе Доменных
+ Имён (DNS).</para>
+
+ <para>Основные записи <filename>resolv.conf</filename>:
+ </para>
+
+ <informaltable frame="none" pgwide="1">
+ <tgroup cols="2">
+ <colspec colwidth="1*"/>
+ <colspec colwidth="2*"/>
+
+ <tbody>
+ <row>
+ <entry><literal>nameserver</literal></entry>
+ <entry>IP адрес сервера имён. Сервера опрашиваются в порядке
+ описания. Максимальное количество адресов &mdash; три.</entry>
+ </row>
+ <row>
+ <entry><literal>search</literal></entry>
+ <entry>Список доменов для поиска с помощью hostname lookup.
+ Обычно определяется доменом, в котором находится
+ компьютер.</entry>
+ </row>
+ <row>
+ <entry><literal>domain</literal></entry>
+ <entry>Домен, в котором находится компьютер.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>Типичный вид <filename>resolv.conf</filename>:</para>
+
+ <programlisting>search example.com
+nameserver 147.11.1.11
+nameserver 147.11.100.30</programlisting>
+
+ <note><para>Опции <literal>search</literal> и
+ <literal>domain</literal> нельзя использовать
+ совместно.</para></note>
+
+ <para>Если вы используете DHCP, &man.dhclient.8; обычно перезаписывает
+ <filename>resolv.conf</filename> информацией, полученной от серверов
+ DHCP.</para>
+ </sect3>
+
+ <sect3>
+ <title><filename>/etc/hosts</filename></title>
+
+ <indexterm><primary>hosts</primary></indexterm>
+
+ <para><filename>/etc/hosts</filename> &mdash; простая текстовая база
+ данных, напоминающая старый Интернет. Она работает совместно с
+ DNS и NIS, сопоставляя доменные имена IP адресу.
+ Отдельные компьютеры, соединённые с помощью локальной сети, могут
+ быть записаны тут вместо &man.named.8; сервера с целью упрощения.
+ Кроме того, <filename>/etc/hosts</filename> используется для
+ записи IP адресов и соответствующих им доменов, избавляя от
+ внешнего трафика, используемого для запросов к DNS серверам.</para>
+
+ <programlisting># &dollar;&os;&dollar;
+#
+# Host Database
+# This file should contain the addresses and aliases
+# for local hosts that share this file.
+# 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 myname.my.domain
+127.0.0.1 localhost localhost.my.domain myname.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. PLEASE PLEASE PLEASE do not try
+# to invent your own network numbers but instead get one from your
+# network provider (if any) or from the Internet Registry (ftp to
+# rs.internic.net, directory `/templates').
+#</programlisting>
+
+ <para>Формат <filename>/etc/hosts</filename>:</para>
+
+ <programlisting>[IP адрес в Интернете] [имя компьютера] [alias1] [alias2] ...</programlisting>
+
+ <para>Например:</para>
+
+ <programlisting>10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2</programlisting>
+
+ <para>За дополнительной информацией обращайтесь к &man.hosts.5;.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Настройка лог файлов</title>
+
+ <indexterm><primary>лог файлы</primary></indexterm>
+
+ <sect3>
+ <title><filename>syslog.conf</filename></title>
+
+ <indexterm><primary>syslog.conf</primary></indexterm>
+
+ <para><filename>syslog.conf</filename> is является файлом конфигурации
+ для &man.syslogd.8;. В нём указываются, типы сообщений
+ генерируемые <command>syslog</command>, и лог файлы, в которые они
+ записываются.</para>
+
+ <programlisting># &dollar;&os;&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) manual page.
+*.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>За более полной информацией обратитесь
+ к &man.syslog.conf.5;.</para>
+ </sect3>
+
+ <sect3>
+ <title><filename>newsyslog.conf</filename></title>
+
+ <indexterm><primary>newsyslog.conf</primary></indexterm>
+
+ <para><filename>newsyslog.conf</filename> &mdash; конфигурационный файл
+ &man.newsyslog.8;, программы, обычно контролируемой &man.cron.8;.
+ &man.newsyslog.8; определяет, когда лог-файлы нуждаются в
+ архивировании и перегруппировке.
+ <filename>logfile</filename> перемещается в
+ <filename>logfile.0</filename>, <filename>logfile.0</filename>
+ перемещается в <filename>logfile.1</filename>, и так далее.
+ Другое именование получится при архивировании с помощью
+ &man.gzip.1;: <filename>logfile.0.gz</filename>,
+ <filename>logfile.1.gz</filename>, и т.д.</para>
+
+ <para><filename>newsyslog.conf</filename> показывает, какие лог файлы
+ должны быть проинспектированы, сколько их должно быть сохранено, и когда
+ они должны быть пересмотрены. Лог файлы могут быть перегруппированы
+ и/или заархивированы, когда они либо достигнут определённого
+ размера, либо при достижении определённых даты/времени.</para>
+
+ <programlisting># configuration file for newsyslog
+# &dollar;&os;&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>За дополнительной информацией обращайтесь к
+ &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> очень похож на
+ <filename>rc.conf</filename>. Значения устанавливаются в виде
+ <literal>variable=value</literal>. Указанные значения устанавливаются
+ после перевода системы в многопользовательский режим. Однако не все
+ переменные могут быть установлены в этом режиме.</para>
+
+ <para>Пример <filename>sysctl.conf</filename>, настроенного для выключения
+ протоколирования фатальных ошибок программ и разрешения
+ Linux-программам определять, что они запускаются под &os;:</para>
+
+ <programlisting>kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11)
+compat.linux.osname=&os;
+compat.linux.osrelease=4.3-STABLE</programlisting>
+ </sect2>
+ </sect1>
+
+ <sect1 id="configtuning-sysctl">
+ <title>Настройка с помощью sysctl</title>
+
+ <indexterm><primary>sysctl</primary></indexterm>
+ <indexterm>
+ <primary>настройка</primary>
+ <secondary>с помощью sysctl</secondary>
+ </indexterm>
+
+ <para>&man.sysctl.8; &mdash; это интерфейс, позволяющий вам вносить изменения
+ в работающую систему &os;. Эти изменения касаются многих опций стека
+ TCP/IP и виртуальной памяти; опытный системный администратор
+ может использовать их для существенного увеличения производительности.
+ Более пяти тысяч системных переменных могут быть прочитаны и
+ записаны с помощью &man.sysctl.8;.</para>
+
+ <para>По своей сути, &man.sysctl.8; выполняет две функции: чтение
+ и изменение настроек системы.</para>
+
+ <para>Для просмотра всех доступных для чтения переменных:</para>
+
+ <screen>&prompt.user; <userinput>sysctl -a</userinput></screen>
+
+ <para>Чтобы прочитать определённую переменную, например,
+ <varname>kern.maxproc</varname>, введите:</para>
+
+ <screen>&prompt.user; <userinput>sysctl kern.maxproc</userinput>
+kern.maxproc: 1044</screen>
+
+ <para>Для присвоения значения переменной, используйте выражение вида
+ <replaceable>переменная</replaceable>=<replaceable>значение</replaceable>:</para>
+
+ <screen>&prompt.root; <userinput>sysctl kern.maxfiles=5000</userinput>
+kern.maxfiles: 2088 -&gt; 5000</screen>
+
+ <para>Изменяемые с помощью sysctl переменные обычно принимают значения
+ либо строкового, либо целого, либо булевого типа. Переменные булевого
+ типа могут принимать два значения (<literal>1</literal> (истина) и
+ <literal>0</literal> (ложь)).</para>
+
+ <para>Если вы хотите устанавливать некоторые переменные автоматически
+ при каждой загрузке компьютера, добавьте их в файл
+ <filename>/etc/sysctl.conf</filename>. За дополнительной
+ информацией обращайтесь к странице справочника &man.sysctl.conf.5;
+ и к <xref linkend="configtuning-sysctlconf"/>.</para>
+
+ <sect2 id="sysctl-readonly">
+ <sect2info>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>Предоставил </contrib>
+ <!-- 31 January 2003 -->
+ </author>
+ </authorgroup>
+ </sect2info>
+ <title>Переменные &man.sysctl.8; только для чтения</title>
+
+ <para>В некоторых случаях желательно изменить переменные
+ &man.sysctl.8; только для чтения. Иногда другого способа решить
+ проблему нет; при этом, результат может быть достигнут только на этапе
+ начальной загрузки.</para>
+
+ <para>Например, на некоторых моделях лэптопов диапазон памяти устройства
+ &man.cardbus.4; не определяется и выдается приблизительно такая
+ ошибка:</para>
+
+ <screen>cbb0: Could not map register memory
+device_probe_and_attach: cbb0 attach returned 12</screen>
+
+ <para>Ситуации, похожие на эту, требуют изменения некоторых значений
+ &man.sysctl.8;, модификация которых запрещена. Для разрешения этой
+ ситуации пользователь может поместить &man.sysctl.8; <quote>OID</quote>
+ в файл <filename>/boot/loader.conf</filename>. Значения по
+ умолчанию хранятся в файле
+ <filename>/boot/defaults/loader.conf</filename>.</para>
+
+ <para>Решение проблемы, приведенной выше, потребует помещения строки
+ <option>hw.pci.allow_unsupported_io_range=1</option> в вышеупомянутый
+ файл. Теперь &man.cardbus.4; будет работать нормально.</para>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="configtuning-disk">
+ <title>Оптимизация дисков</title>
+
+ <sect2>
+ <title>Переменные Sysctl</title>
+
+ <sect3>
+ <title><varname>vfs.vmiodirenable</varname></title>
+
+ <indexterm>
+ <primary><varname>vfs.vmiodirenable</varname></primary>
+ </indexterm>
+
+ <para>Значением переменной <varname>vfs.vmiodirenable</varname>
+ может быть установлено в 0 (выключено) или 1 (включено); по
+ умолчанию 1. Эта переменная отвечает за метод кэширования
+ каталогов. Размер большинства каталогов невелик. Они могут
+ поместиться в одном фрагменте (обычно 1K), и могут занимать
+ ещё меньше места (обычно 512&nbsp;байт) в кэше буфера.
+ При отключении этой переменной (при установке значения 0)
+ буфер прокэширует только заданное число
+ каталогов даже если у вас много памяти. При включении (при
+ установке значения 1) эта переменная
+ sysctl позволит использовать страничное кэширование VM,
+ делая доступным для кэширования каталогов
+ весь объём памяти. Однако,
+ минимальный объём памяти, используемой для
+ кэширования каталогов стал равен объёму страницы (обычно 4&nbsp;K)
+ вместо 512&nbsp;байт. Мы рекомендуем оставлять эту опцию включенной,
+ если ваш компьютер исполняет программы, манипулирующие значительным
+ количеством файлов. Примером таких программ могут быть кэширующие
+ прокси-серверы, большие почтовые серверы и серверы новостей. Обычно
+ включение этой опции не понижает производительности, однако лучше
+ поэкспериментировать, чтобы узнать оптимальное значение для вашей
+ машины.</para>
+ </sect3>
+
+ <sect3>
+ <title><varname>vfs.write_behind</varname></title>
+
+ <indexterm>
+ <primary><varname>vfs.write_behind</varname></primary>
+ </indexterm>
+
+ <para>Переменная sysctl <varname>vfs.write_behind</varname> по
+ умолчанию установлена в <literal>1</literal> (включено). Она
+ указывает системе выполнять запись на носитель по кластерам,
+ что обычно делается для больших файлов. Идея в том, чтобы
+ избежать заполнения кэша неполными буферами, когда это не
+ увеличивает производительность. Однако, это может заблокировать
+ процессы и в некоторых случаях вам может понадобиться отключить
+ этот параметр.</para>
+ </sect3>
+
+ <sect3>
+ <title><varname>vfs.hirunningspace</varname></title>
+
+ <indexterm>
+ <primary><varname>vfs.hirunningspace</varname></primary>
+ </indexterm>
+
+ <para>Переменная sysctl <varname>vfs.hirunningspace</varname>
+ определяет число запросов записи на диск, которые могут
+ быть поставлены в очередь. Значение по умолчанию обычно подходит,
+ но на компьютерах с большим количеством дисков вы можете
+ увеличить его до четырех или пяти <emphasis>мегабайт</emphasis>.
+ Учтите, что установка слишком большого значения (превышающего
+ размер буфера записи) может привести к очень значительному
+ падению общей производительности. Не делайте это значение
+ произвольно большим! Большие значения могут привести к
+ задержкам чтения, выполняемого в то же время</para>
+
+ <para>Есть много других переменных sysctl, относящихся к кэшированию
+ в буфер и страничному кэшированию VM. Мы не рекомендуем изменять
+ эти значения, поскольку система VM делает отличную
+ работу по автоматической самонастройке.</para>
+ </sect3>
+
+ <sect3>
+ <title><varname>vm.swap_idle_enabled</varname></title>
+
+ <indexterm>
+ <primary><varname>vm.swap_idle_enabled</varname></primary>
+ </indexterm>
+
+ <para>Переменная sysctl <varname>vm.swap_idle_enabled</varname>
+ полезна в больших многопользовательских системах, где есть
+ много пользователей, входящих и выходящих из системы, и
+ множество ожидающих процессов. Такие системы обычно генерируют
+ большое количество запросов на выделение памяти. Включение этой
+ переменной и настройка задержки выгрузки (swapout hysteresis,
+ в секундах) установкой переменных
+ <varname>vm.swap_idle_threshold1</varname> и
+ <varname>vm.swap_idle_threshold2</varname> позволит освобождать
+ страницы памяти, занятые ожидающими процессами, более быстро,
+ чем при нормальном алгоритме выгрузки. Это помогает даемону
+ выгрузки страниц. Не включайте этот параметр, пока он на самом
+ деле вам не понадобится, поскольку его действие в сущности
+ заключается в более ранней выгрузке страниц из памяти; это
+ повышает нагрузку на подкачку и диск. В малых системах
+ эффект от включения этого параметра предсказуем, но в больших
+ системах нагруженной на подкачкой этот параметр позволяет
+ системе VM проще загружать и выгружать процессы из памяти.</para>
+ </sect3>
+
+ <sect3>
+ <title><varname>hw.ata.wc</varname></title>
+
+ <indexterm>
+ <primary><varname>hw.ata.wc</varname></primary>
+ </indexterm>
+
+ <para>Во &os;&nbsp;4.3 кэширование записи на IDE диски было отключено.
+ Это понижало производительность IDE дисков в тестах, но было
+ необходимо для лучшей сохранности данных. Проблема состоит в том,
+ что IDE диски неправильно указывают время завершения записи на диск.
+ При включенном кэшировании IDE диски могут не только записать данные
+ в неправильном порядке &mdash; при большой нагрузке на диск некоторые
+ блоки могут задержаться до бесконечности. Сбой, или отключение
+ питания могут могут стать причиной серьёзных повреждений в файловой
+ системе. Поэтому для безопасности системы значение по умолчанию
+ этого параметра было изменено. К сожалению, результатом этого стало
+ столь значительная потеря производительности, что после выхода
+ релиза значение этого параметра было возвращено в первоначальное
+ состояние. Вам следует проверить значение переменной sysctl
+ <varname>hw.ata.wc</varname> на вашей машине. Если кэширование
+ выключено &mdash; вы можете включить его, установив значение переменной
+ ядра, равное 1. Это должно быть сделано при помощи загрузчика при
+ загрузке. Если вы сделаете это позже &mdash; изменения не будут иметь
+ силы.</para>
+
+ <para>За более подробной информацией обращайтесь к &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>опции ядра</primary>
+ <secondary><literal>SCSI_DELAY</literal></secondary>
+ </indexterm>
+
+ <para>Параметр настройки ядра <literal>SCSI_DELAY</literal> может
+ использоваться для уменьшения времени загрузки системы.
+ Значение по умолчанию велико и может составлять более
+ <literal>15</literal> секунд в процессе загрузки. Уменьшение
+ его до <literal>5</literal> секунд обычно работает (особенно
+ с современными дисками). В новых версиях &os; (5.0 и выше) должен
+ использоваться параметр <varname>kern.cam.scsi_delay</varname>,
+ настраиваемый во время загрузки. Этот параметр и параметр
+ настройки ядра принимают значения в
+ <emphasis>миллисекундах</emphasis>, а <emphasis>не</emphasis> в
+ <emphasis>секундах</emphasis>.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="soft-updates">
+ <title>Soft Updates</title>
+
+ <indexterm><primary>Soft Updates</primary></indexterm>
+ <indexterm><primary>tunefs</primary></indexterm>
+
+ <para>Программа &man.tunefs.8; используется для настройки файловой
+ системы. Эта программа может принимать большое количество параметров,
+ но мы рассмотрим лишь один из них &mdash; включение и выключение
+ Soft Updates, что может быть достигнуто следующим образом:</para>
+
+ <screen>&prompt.root; <userinput>tunefs -n enable /filesystem</userinput>
+&prompt.root; <userinput>tunefs -n disable /filesystem</userinput></screen>
+
+ <para>Нельзя изменять файловую систему с помощью &man.tunefs.8; когда
+ она смонтирована. Самое подходящее время для включения "Soft Updates"
+ - перед монтированием разделов, в однопользовательском режиме.</para>
+
+ <para>Soft Updates существенно увеличивают скорость создания и удаления
+ файлов путём использования кэширования. Мы рекомендуем использовать Soft
+ Updates на всех ваших файловых системах. Однако у Soft Updates есть
+ и обратные стороны: во-первых, Soft Updates гарантирует целостность
+ файловой системы в случае сбоя, но может наблюдаться задержка в
+ несколько секунд (или даже минуту!) перед записью на жесткий диск.
+ Если система зависнет &mdash; вы можете потерять
+ больше, чем, если бы вы не включили Soft Updates. Во-вторых,
+ Soft Updates задерживает освобождение блоков файловой системы.
+ Если ваша файловая система заполнена, выполнение значительного
+ обновления, например,
+ <command>make installworld</command>, может вызвать
+ переполнение.</para>
+
+ <sect3>
+ <title>Дополнительная информация о Soft Updates</title>
+
+ <indexterm>
+ <primary>Soft Updates</primary>
+ <secondary>детали</secondary>
+ </indexterm>
+
+ <para>Есть два традиционных способа записи метаданных файловых систем
+ на диск (пример метаданных: индексные дескрипторы и
+ каталоги).</para>
+
+ <para>Исторически, поведение по умолчанию заключается в синхронном
+ обновлении метаданных. Если каталог был изменен, система
+ ждет, пока изменение не будет физически записано на диск.
+ Содержимое файлов проходит через кэш и записывается на
+ диск асинхронно. Преимущество этого способа в его
+ надежности. При сбое во время обновления метаданные
+ остаются в нормальном состоянии. Файл либо создается целиком,
+ либо вообще не создается. Если блоки данных не были записаны
+ в файл из буфера во время сбоя, &man.fsck.8; сможет определить
+ это и восстановить файловую систему, установив длину файла в 0.
+ Кроме того, реализация этого способа проста и понятна.
+ Недостаток в том, что обновление метаданных занимает много
+ времени. Команда <command>rm -r</command>, например,
+ последовательно удаляет все файлы в каталоге, и каждое изменение
+ в каталоге (удаление файла) будет синхронно записано на диск.
+ Сюда включаются обновления самого каталога, таблицы индексных
+ дескрипторов, и возможно блоков, занятых файлом. Те же
+ соглашения работают при распаковке больших иерархий
+ (<command>tar -x</command>).</para>
+
+ <para>Другой вариант это асинхронное обновление метаданных. Это
+ поведение по умолчанию для Linux/ext2fs и *BSD ufs с параметром
+ <command>mount -o async</command>. Все обновления метаданных
+ просто пропускаются через кэш буфера, как и содержимое файлов.
+ Преимущество этой реализации в том, что нет необходимости ждать
+ каждый раз, пока метаданные будут записаны на диск, поэтому
+ все операции с большим объемом обновления метаданных будут
+ происходить гораздо быстрее, чем при синхронном обновлении.
+ Кроме того, реализация все еще проста и понятна, поэтому
+ риск появления ошибок в коде невелик. Недостаток в том,
+ что нет никаких гарантий исправности файловой системы. Если
+ во время обновления большого объема метаданных произойдет
+ сбой (например, отключение питания, или нажатие кнопки reset),
+ файловая система останется в непредсказуемом состоянии.
+ Нет возможности определить состояние файловой системы после
+ такого сбоя; блоки данных файла могут быть уже записаны на диск,
+ а обновления таблицы индексных дескрипторов нет. Невозможно
+ реализовать <command>fsck</command>, которая могла бы
+ исправить получившийся хаос (поскольку необходимой информации
+ нет на диске). Если файловая система была уничтожена во
+ время восстановления, единственный способ восстановления
+ &mdash; запустить &man.newfs.8; и воспользоваться
+ резервной копией.</para>
+
+ <para>Обычное решение этой проблемы состояло в реализации
+ <emphasis>протоколировании проблемной области (dirty region
+ logging)</emphasis>, известном как
+ <emphasis>журналирование</emphasis>, хотя этот термин
+ использовался неправильно и порой также применялся к другим
+ формам протоколирования транзакций. Обновление метаданных
+ как и прежде происходит синхронно, но в отдельную область
+ диска. Позже они перемещаются туда, где должны быть.
+ Поскольку область протоколирования это небольшая,
+ последовательная область диска, головкам жесткого диска
+ не приходится перемещаться на большие расстояния даже
+ во время значительных обновлений, поэтому такой способ
+ быстрее, чем синхронные обновления.
+ Кроме того, сложность реализации довольно ограничена, поэтому
+ риск внесения ошибок невелик. Недостаток в том, что
+ все обновления метаданных записываются дважды (один раз
+ в область протоколирования и один раз окончательно),
+ поэтому при обычной работе производительность может
+ понизиться. С другой стороны, в случае сбоя все
+ незаконченные действия с метаданными могут быть быстро
+ отменены, или завершены после загрузки системы,
+ поэтому система после сбоя загружается быстрее.</para>
+
+ <para>Kirk McKusick, разработчик Berkeley FFS, решил эту проблему
+ с помощью Soft Updates: все незавершенные обновления метаданных
+ находятся в памяти и записываются на диск в упорядоченном
+ виде (<quote>упорядоченное обновления метаданных</quote>).
+ При значительных обновлениях метаданных более поздние обновления
+ <quote>присоединяются</quote> к предыдущим, если они все еще
+ находятся в памяти и еще не записаны на диск. Поэтому все
+ операции, скажем, над каталогом, обычно выполняются в памяти
+ перед записью обновления на диск (блоки данных сортируются
+ в соответствии с их положением, так что они не будут записаны
+ на диск до метаданных. При крахе операционной системы выполняется
+ <quote>откат</quote>: считается, что все операции, не записанные на
+ диск, никогда не происходили. Файловая система находится в
+ том состоянии, в котором она была за 30&ndash;60 секунд до сбоя.
+ Используемый алгоритм гарантирует, что все используемые ресурсы
+ маркированы соответствующим образом в своих областях: блоки и
+ индексные дескрипторы. После сбоя могут остаться только ошибки
+ выделения ресурсов, они помечаются как <quote>используемые</quote>,
+ хотя на самом деле <quote>свободны</quote>. &man.fsck.8;
+ разбирается в ситуации и освобождает более не используемые
+ ресурсы. После сбоя система может быть безопасно смонтирована
+ с опцией <command>mount -f</command>. Для освобождения ресурсов,
+ которые могут не использоваться, в дальнейшем потребуется
+ запустить &man.fsck.8;. Эта идея лежит в основе
+ <emphasis>background (фоновая) fsck</emphasis>: во время запуска системы
+ записывается только <emphasis>снимок</emphasis> файловой системы.
+ Все системы могут быть смонтированы в <quote>грязном</quote>
+ состоянии, и система загружается в многопользовательский режим.
+ Затем, фоновые <command>fsck</command> ставятся в очередь для
+ всех систем, где это требуется, чтобы освободить неиспользуемые
+ ресурсы. (Файловые системы, где не используются Soft Updates,
+ все еще требуют запуска <command>fsck</command> в обычном
+ режиме).</para>
+
+ <para>Преимущество этого способа в том, что обновления метаданных
+ происходят почти так же быстро, как при асинхронных обновлениях
+ (т.е. быстрее, чем при <emphasis>журналировании</emphasis>,
+ когда метаданные записываются дважды). Недостаток в сложности
+ кода (подразумевающим больший риск появления ошибок в области,
+ где вероятность потери данных пользователя особенно высока) и
+ в более высоких требованиях к объему памяти. К тому же могут
+ возникнуть некоторые странные на первый взгляд ситуации.
+ После сбоя состояние файловой системы несколько более
+ <quote>старое</quote>. В ситуации, когда стандартный способ
+ синхронизации оставит несколько файлов нулевой длины после
+ выполнения <command>fsck</command>, в файловой системе с
+ Soft Updates их не останется вовсе, поскольку ни метаданные,
+ ни содержимое файлов не были записаны на диск. Дисковое
+ пространство не будет освобождено пока обновления не будут
+ записаны на диск, что может занять некоторое время после
+ выполнения <command>rm</command>. Это может повлечь проблемы
+ при установке большого количества файлов на файловую
+ систему, где не хватает места для помещения всех файлов
+ дважды.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 id="configtuning-kernel-limits">
+ <title>Изменение ограничений, накладываемых ядром</title>
+
+ <indexterm>
+ <primary>оптимизация</primary>
+ <secondary>параметры ядра</secondary>
+ </indexterm>
+
+ <sect2 id="file-process-limits">
+ <title>Ограничения на Файлы/Процессы</title>
+
+ <sect3 id="kern-maxfiles">
+ <title><varname>kern.maxfiles</varname></title>
+
+ <indexterm>
+ <primary><varname>kern.maxfiles</varname></primary>
+ </indexterm>
+
+ <para>Значение <varname>kern.maxfiles</varname> может быть увеличено
+ или уменьшено в зависимости от потребностей вашей системы. Эта
+ переменная определяет максимальное число дескрипторов файлов. Когда
+ таблица дескрипторов файлов полна, в очереди системных сообщений
+ появится сообщение <errorname>file: table is full</errorname>. Это
+ сообщение может быть прочитано с помощью команды
+ <command>dmesg</command>.</para>
+
+ <para>Каждый открытый файл, сокет или буфер использует дескриптор
+ файла. Широкомасштабному серверу может понадобиться много
+ тысяч дескрипторов файлов, в зависимости от количества программ,
+ одновременно выполняемых на сервере.</para>
+
+ <para>Стандартное значение <varname>kern.maxfile</varname> определяется
+ переменной <option>maxusers</option> в вашем файле конфигурации
+ ядра. Значение <varname>kern.maxfiles</varname> увеличивается
+ пропорционально значению <option>maxusers</option>. При
+ компилировании ядра, нужно установить эту переменную согласно
+ потребностям вашей системы. Исходя из значения этой переменной,
+ ядро устанавливает значения большинства предопределённых
+ переменных. Даже если предполагается, что к компьютеру не будут
+ одновременно подсоединяться 256 пользователей, требуемые ресурсы
+ могут быть такими же, как у крупномасштабного сервера.</para>
+
+ <para>Система автоматически настроит
+ <literal>maxusers</literal>, если вы явно установите его в
+ <literal>0</literal><footnote>
+ <para>Алгоритм автоматической настройки установит
+ <literal>maxusers</literal> равным количеству памяти в системе,
+ где минимум 32, а максимум 384.</para>
+ </footnote>.
+ Если вы желаете выставить
+ значение самостоятельно, то задайте <literal>maxusers</literal> по
+ меньшей мере равным 4, особенно если вы используйте X Window System или
+ компилируйте программное обеспечение. Причина в том, что самая
+ значимая таблица, устанавливаемая <literal>maxusers</literal> -
+ это максимальное количество процессов, которая устанавливается
+ равным <literal>20 + 16 * maxusers</literal>, и поэтому, если
+ вы установите <literal>maxusers</literal> в 1, то вы сможете
+ иметь только 36 одновременных процессов, включая 18 или около того,
+ что система запустит во время загрузки и 15 или около того, что
+ вы создадите при запуске X Window System. Даже простая задача, как
+ чтение страницы справочника породит 9 процессов для фильтрации,
+ декомпрессии и её просмотра. Установка <literal>maxusers</literal>
+ в 64 позволит иметь вам до 1044 одновременных процессов, чего
+ должно быть достаточно примерно для всех использований. Если,
+ тем не менее, вы увидите пугающую ошибку <errortype>proc table
+ full</errortype> при попытке запуска другой программы, или
+ вы используйте сервер с большим количеством одновременных пользователей
+ (как <hostid role="fqdn">ftp.FreeBSD.org</hostid>), то вы всегда
+ можете увеличить значение и пересобрать систему.</para>
+
+ <note>
+ <para><literal>maxusers</literal> <emphasis>не</emphasis>
+ ограничивает количество пользователей, которые могут заходить на
+ вашу машину. Оно просто устанавливает различные размеры таблиц
+ в разумные значения, учитывая максимальное количество пользователей,
+ вы вероятно будете иметь на вашей системе и как много процессов
+ каждый из них сможет запускать. Ключевое слово, которое ограничивает
+ количество одновременных удаленных входов и терминальных X окон -
+ это <link linkend="kernelconfig-ptys"><literal>pseudo-device pty
+ 16</literal></link>. С &os;&nbsp;5.X вам не надо беспокоиться
+ об этом значении, так как &man.pty.4; драйвер является
+ <quote>автоматически клонирующим</quote>; вы просто используйте
+ <literal>device pty</literal> в вашем конфигурационном файле.</para>
+ </note>
+
+ </sect3>
+
+ <sect3>
+ <title><varname>kern.ipc.somaxconn</varname></title>
+
+ <indexterm>
+ <primary><varname>kern.ipc.somaxconn</varname></primary>
+ </indexterm>
+
+ <para>Переменная sysctl <varname>kern.ipc.somaxconn</varname>
+ ограничивает размер очереди для приема новых TCP соединений.
+ Значение по умолчанию <literal>128</literal> слишком мало для
+ надежной обработки новых соединений для нагруженного web
+ сервера. Для такого сервера рекомендуется увеличить это значение
+ до <literal>1024</literal> или выше. Даемон сервиса может
+ сам ограничивать очередь приема новых соединений (например,
+ &man.sendmail.8;, или <application>Apache</application>), но
+ обычно в файле настройки даемона есть директива для настройки
+ длины очереди. Более длинная очередь также помогает избежать
+ атак Denial of Service (<abbrev>DoS</abbrev>).</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="nmbclusters">
+ <title>Сетевые Ограничения</title>
+
+ <para>Опция ядра <literal>NMBCLUSTERS</literal> обуславливает
+ количество Mbuf, доступных на машине. На сервере с большим трафиком
+ и маленьким Mbuf производительность будет пониженной. Каждый кластер
+ представлен двумя килобайтами памяти, поэтому значение 1024 означает
+ 2 мегабайта памяти ядра, зарезервированной для сетевых буферов.
+ Для определения оптимального значения необходимо провести простые
+ вычисления. Если у вас веб сервер, который может обслуживать 1000
+ одновременных соединений, и каждое соединение <quote>съедает</quote> 16&nbsp;K буфера
+ приема и 16&nbsp;K буфера отправки, вам потребуется 32&nbsp;MB памяти
+ под буферы. Хорошее правило &mdash; умножение этого значения на 2,
+ 2x32&nbsp;MB&nbsp;/&nbsp;2&nbsp;KB&nbsp;= 64&nbsp;MB&nbsp;/&nbsp;2&nbsp;kB&nbsp;= 32768.
+ Мы рекомендуем значения между 4096 и 32768 для машин с большим объемом
+ памяти. Не указывайте произвольно большое значение параметра, это
+ может привести к падению системы при загрузке. Используйте
+ &man.netstat.1; с опцией <option>-m</option> для определения количества
+ используемых сетевых кластеров.</para>
+
+ <para>Для настройки в процессе загрузки используйте в loader переменную
+ <varname>kern.ipc.nmbclusters</varname>. Только в старых версиях
+ &os; потребуется пересобрать ядро (&man.config.8;) с измененным
+ параметром <literal>NMBCLUSTERS</literal>.</para>
+
+ <para>Для нагруженных серверов, интенсивно использующих системный
+ вызов &man.sendfile.2;, может потребоваться увеличения буферов
+ &man.sendfile.2; с помощью параметра конфигурации ядра
+ <literal>NSFBUFS</literal>, или изменения значения путем установки
+ переменной в <filename>/boot/loader.conf</filename>
+ (обратитесь к &man.loader.8; за подробностями). Общий
+ признак того, что параметр требуется изменить &mdash;
+ состояние процессов <literal>sfbufa</literal>.
+ Переменная sysctl <varname>kern.ipc.nsfbufs</varname>
+ установлена только для чтения. Этот параметр увеличивается
+ вместе с <varname>kern.maxusers</varname>, хотя может
+ потребоваться увеличить его отдельно.</para>
+
+ <important>
+ <para>Даже если сокет помечен как неблокирующий, вызов
+ &man.sendfile.2; на неблокирующем сокете может вызвать блокирование
+ &man.sendfile.2;, пока не станет доступным достаточное количество
+ <literal>struct sf_buf</literal>.</para>
+ </important>
+
+ <sect3>
+ <title><varname>net.inet.ip.portrange.*</varname></title>
+
+ <indexterm>
+ <primary>net.inet.ip.portrange.*</primary>
+ </indexterm>
+
+ <para>Переменные sysctl <varname>net.inet.ip.portrange.*</varname>
+ контролируют диапазоны номеров портов, автоматически привязываемых
+ к TCP и UDP сокетам. Есть три диапазона: нижний диапазон,
+ диапазон по умолчанию и верхний диапазон. Большинство сетевых
+ программ используют диапазон по умолчанию, контролируемый
+ <varname>net.inet.ip.portrange.first</varname> и
+ <varname>net.inet.ip.portrange.last</varname>, установленными
+ соответственно в 1024 и 5000. Диапазоны портов привязки
+ используются для исходящих соединений и при некоторых условиях
+ портов может не хватить. Это чаще всего происходит на
+ сильно загруженном прокси сервере. Диапазон портов не
+ становится проблемой при работе серверов, которые обрабатывают
+ в основном входящие соединения, или с небольшим количеством
+ исходящих соединений, например mail relay. Для ситуаций,
+ когда возможен недостаток портов, рекомендуется немного
+ увеличить <varname>net.inet.ip.portrange.last</varname>.
+ Может подойти значение <literal>10000</literal>,
+ <literal>20000</literal>, или <literal>30000</literal>.
+ Учтите также возможное влияние брандмауэра при
+ изменении диапазона портов. Некоторые могут блокировать
+ большие диапазоны портов (обычно с небольшими номерами)
+ и вынуждают использовать более высокие диапазоны для
+ исходящих соединений. По этой причине не рекомендуется
+ уменьшать значение
+ <varname>net.inet.ip.portrange.first</varname>.</para>
+ </sect3>
+
+ <sect3>
+ <title>TCP Bandwidth Delay Product</title>
+
+ <indexterm>
+ <primary>TCP Bandwidth Delay Product Limiting</primary>
+ <secondary><varname>net.inet.tcp.inflight.enable</varname></secondary>
+ </indexterm>
+
+ <para>TCP Bandwidth Delay Product Limiting похоже на
+ TCP/Vegas в NetBSD. Оно может быть
+ включено установкой переменной sysctl
+ <varname>net.inet.tcp.inflight.enable</varname> в
+ <literal>1</literal>. Система попытается вычислить задержку
+ пакетов для каждого соединения и ограничить объем данных в
+ очереди сети до значения, требуемого для поддержания оптимальной
+ пропускной способности.</para>
+
+ <para>Эта возможность полезна при передаче данных через модемы,
+ Gigabit Ethernet, или даже через высокоскоростные WAN соединения
+ (или любые другие соединения с большой задержкой передачи),
+ особенно если вы также используете изменение размера окна или
+ настроили большое окно передачи. Если вы включили этот параметр,
+ убедитесь также, что переменная
+ <varname>net.inet.tcp.inflight.debug</varname> установлена в
+ <literal>0</literal> (отладка выключена), а для использования в
+ реальных задачах может понадобиться установка переменной
+ <varname>net.inet.tcp.inflight.min</varname> к значению
+ как минимум <literal>6144</literal>. Но учтите, что установка
+ большого значения этой переменной может фактически отключить
+ ограничение в зависимости от вида соединения. Ограничение
+ уменьшает количество данных на определенном маршруте и
+ управляет очередью пакетов, как и уменьшает общее количество
+ данных в очереди локального интерфейса хоста. С меньшим
+ количеством пакетов в очереди двусторонние интерактивные
+ соединения, особенно на медленных линиях, могут проходить
+ быстрее. Но имейте ввиду, что эта функция работает только
+ при передаче данных (передача данных / сторона сервера).
+ Она не работает при получении данных (загрузке).</para>
+
+ <para>Изменение значения переменной
+ <varname>net.inet.tcp.inflight.stab</varname>
+ <emphasis>не</emphasis> рекомендуется. Этот параметр по умолчанию
+ равен 20, что означает добавление 2 пакетов к вычислению задержки
+ передачи. Дополнительное окно требуется для стабилизации
+ алгоритма и улучшения ответной реакции на изменение условий,
+ но также приводит к большему времени ping на медленных соединениях
+ (задержка все же гораздо меньше, чем без алгоритма inflight).
+ Вы можете попробовать уменьшить этот параметр до 15, 10 или 5;
+ а также уменьшить <varname>net.inet.tcp.inflight.min</varname>
+ (например, до 3500) для получения желаемого эффекта. Уменьшение
+ значений этих параметров может использоваться только как
+ крайняя мера.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Виртуальная память</title>
+
+ <sect3>
+ <title><varname>kern.maxvnodes</varname></title>
+
+ <para>Файлы и каталоги в ядре представлены при помощи vnode
+ (виртуальных узлов). Увеличение их числа может помочь уменьшить
+ нагрузку на дисковую подсистему. Как правило, специальной настройки
+ это значение не требует, однако, в некоторых случаях дисковая
+ активность является узким местом, и система исчерпывает таблицу
+ vnode, значение этой переменной следует увеличить. При этом
+ необходимо оценить объем неактивной и свободной памяти.</para>
+
+ <para>Текущее количество использованных vnode можно посмотреть при
+ помощи команды:</para>
+
+ <programlisting>&prompt.root; sysctl vfs.numvnodes
+vfs.numvnodes: 91349</programlisting>
+
+ <para>Максимальное количество vnode, доступных системе:</para>
+
+ <programlisting>&prompt.root; sysctl kern.maxvnodes
+kern.maxvnodes: 100000</programlisting>
+
+ <para>Если количество использованных vnode близко к максимуму,
+ значение переменной <varname>kern.maxvnodes</varname> следует
+ увеличить на 1000. Следите за динамикой изменения
+ <varname>vfs.numvnodes</varname>. Если оно увеличивается,
+ приближаясь к вновь установленному максимуму, процесс следует
+ повторить. Изменение в распределении памяти должно быть видно в
+ выводе утилиты &man.top.1;: больше памяти перейдет в разряд
+ активной.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 id="adding-swap-space">
+ <title>Увеличение объема подкачки</title>
+
+ <para>Вне зависимости от того, что вы планировали, иногда
+ система ведет себя неожиданно. Если вам потребовался
+ дополнительный объем подкачки, его довольно просто добавить.
+ Есть три способа увеличения объема подкачки: добавить новый
+ жесткий диск, включить подкачку по NFS, или создать файл
+ подкачки на существующем разделе.</para>
+
+ <para>За информацией о криптовании раздела подкачки обращайтесь к
+ <xref linkend="swap-encrypting"/> данного Руководства.</para>
+
+ <sect2 id="new-drive-swap">
+ <title>Подкачка на новом жестком диске</title>
+
+ <para>Лучший способ добавить подкачку, конечно, использовать
+ еще один жесткий диск. Вы можете сделать это в любой
+ момент. Если такой способ подходит, прочтите еще раз
+ информацию по пространству подкачки в
+ <xref linkend="configtuning-initial"/> Руководства,
+ где рассказывается о наилучшем способе организации раздела
+ подкачки.</para>
+ </sect2>
+
+ <sect2 id="nfs-swap">
+ <title>Подкачка через NFS</title>
+
+ <para>Подкачка через NFS рекомендуется только в том случае, если
+ в системе отсутствует жесткий диск; подкачка через NFS ограничена
+ скоростью сетевого подключения и к тому же дополнительно
+ нагружает NFS сервер.</para>
+ </sect2>
+
+ <sect2 id="create-swapfile">
+ <title>Файлы подкачки</title>
+
+ <para>Вы можете создать файл определенного размера и использовать
+ его как файл подкачки. В нашем примере будет использован файл
+ <filename>/usr/swap0</filename> размером 64MB. Конечно, вы
+ можете использовать любое имя.</para>
+
+ <example>
+ <title>Создание файла подкачки в &os;</title>
+
+ <orderedlist>
+ <listitem>
+ <para>Убедитесь, что в файле настройки ядра присутствует драйвер
+ виртуального диска (&man.md.4;). Он есть в ядре
+ <filename>GENERIC</filename>.</para>
+
+ <programlisting>device md # Memory "disks"</programlisting>
+ </listitem>
+
+ <listitem>
+ <para>Создайте файл подкачки (<filename>/usr/swap0</filename>):</para>
+
+ <screen>&prompt.root; <userinput>dd if=/dev/zero of=/usr/swap0 bs=1024k count=64</userinput></screen>
+ </listitem>
+
+ <listitem>
+ <para>Установите подходящие права на (<filename>/usr/swap0</filename>):</para>
+
+ <screen>&prompt.root; <userinput>chmod 0600 /usr/swap0</userinput></screen>
+ </listitem>
+
+ <listitem>
+ <para>Включите файл подкачки в <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired.</programlisting>
+ </listitem>
+
+ <listitem>
+
+ <para>Перегрузите компьютер или для включения подкачки прямо сейчас
+ введите:</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>Написал </contrib>
+ </author>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title>Управление питанием и ресурсами</title>
+
+ <para>Очень важно использовать аппаратные ресурсы эффективно.
+ До того, как появился <acronym>ACPI</acronym>, управление
+ потреблением питания и температурными характеристиками системы
+ было очень сложной для операционной системы задачей. Аппаратное
+ обеспечение контролировалось одним из видов встроенного интерфейса
+ <acronym>BIOS</acronym>, таким как: <emphasis>Plug and Play BIOS
+ (PNPBIOS)</emphasis>, <emphasis>Advanced Power Management
+ (APM)</emphasis> и так далее. Управление питанием и ресурсами
+ это один из ключевых компонентов современной операционной системы.
+ Например, вам может потребоваться, чтобы операционная система
+ следила за температурными ограничениями и возможно, предупреждала
+ при неожиданном росте температуры.</para>
+
+ <para>В этом разделе Руководства &os;, мы предоставим исчерпывающую
+ информацию о <acronym>ACPI</acronym>. В конце раздела есть ссылки
+ для дальнейшего чтения.</para>
+
+ <sect2 id="acpi-intro">
+ <title>Что такое ACPI?</title>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ </indexterm>
+
+ <indexterm>
+ <primary>APM</primary>
+ </indexterm>
+
+ <para>Advanced Configuration and Power Interface
+ (<acronym>ACPI</acronym>) это стандарт, написанный объединением
+ поставщиков в целях предоставления стандартного интерфейса для
+ аппаратных ресурсов и управления питанием (отсюда и название).
+ Это ключевой элемент <emphasis>Operating System-directed
+ configuration and Power Management</emphasis>, т.е.: он предоставляет
+ операционной системе (<acronym>OS</acronym>) больше контроля и более
+ универсален. Современные системы вышли за пределы ограничений
+ существующих Plug and Play интерфейсов до появления
+ <acronym>ACPI</acronym>. <acronym>ACPI</acronym> это прямой
+ наследник <acronym>APM</acronym> (Advanced Power Management).</para>
+ </sect2>
+
+ <sect2 id="acpi-old-spec">
+ <title>Недостатки Advanced Power Management (APM)</title>
+
+ <para>Средства <emphasis>Advanced Power Management (APM)</emphasis>
+ управляют энергопотреблением системы в зависимости от
+ нагрузки. APM BIOS предоставляется поставщиком системы и
+ специфичен для данной аппаратной платформы. Драйвер APM
+ в OS обеспечивает доступ к <emphasis>APM Software Interface</emphasis>,
+ который позволяет управлять уровнями потребления питания.</para>
+
+ <para>В APM имеется четыре основных проблемы. Во-первых, управление
+ энергопотреблением осуществляется через зависимый от поставщика
+ BIOS, и OS ничего не знает нем. Один пример: когда пользователь
+ устанавливает время ожидания для жесткого диска в APM BIOS,
+ и это время истекает, BIOS останавливает жесткий диск без согласования
+ с OS. Во-вторых, алгоритм APM встроен в BIOS, и все действия
+ происходят вне контроля OS. Это означает, что пользователи
+ могут решить проблемы с APM BIOS только путем перепрошивки
+ его ROM; это очень опасная процедура, и если она завершится
+ неудачно, система может оказаться в невосстановимом состоянии.
+ В-третьих, реализация технологии APM зависит от поставщика,
+ что означает дублирование усилий и если в BIOS одного
+ из поставщиков будет найдена и исправлена ошибка, ее могли
+ не исправить другие поставщики. Наконец, объем APM BIOS недостаточно
+ велик для реализации сложной политики управления питанием, или
+ такой политики, которая может хорошо адаптироваться к потребностям
+ компьютера.</para>
+
+ <para><emphasis>Plug and Play BIOS (PNPBIOS)</emphasis> был неудобен
+ во многих ситуациях. PNPBIOS это 16-битная технология,
+ поэтому OS требовалось использовать 16-битную эмуляцию для
+ <quote>взаимодействия</quote> с методами PNPBIOS.</para>
+
+ <para>&os; драйвер <acronym>APM</acronym> документирован в странице
+ справочника &man.apm.4;.</para>
+ </sect2>
+
+ <sect2 id="acpi-config">
+ <title>Настройка <acronym>ACPI</acronym></title>
+
+ <para>&man.loader.8; загружает драйвер <filename>acpi.ko</filename> по
+ умолчанию, его <emphasis>не</emphasis> надо встраивать в ядро.
+ Причина в том, что с модулями проще работать, например переключиться
+ на другой <filename>acpi.ko</filename> без пересборки ядра.
+ Преимущество в упрощении тестирования. Другая причина в том, что
+ запуск <acronym>ACPI</acronym> после старта системы не очень полезен
+ и при некоторых условиях может приводить к краху. Если вы
+ сомневаетесь, отключите <acronym>ACPI</acronym> совсем. Драйвер не
+ должен и не может быть выгружен, поскольку системная шина используется
+ для различных взаимодействий оборудования. <acronym>ACPI</acronym>
+ может быть выключен с помощью утилиты &man.acpiconf.8;. Фактически
+ большинство взаимодействий с <acronym>ACPI</acronym> может быть
+ выполнено через &man.acpiconf.8;. В основном это означает, что если в
+ выводе &man.dmesg.8; есть что-то об <acronym>ACPI</acronym>, он скорее
+ всего работает.</para>
+
+ <note><para><acronym>ACPI</acronym> и <acronym>APM</acronym> не могут
+ сосуществовать и должны использоваться раздельно. Каждый из них
+ прервет загрузку, если обнаружит загруженный драйвер
+ другого.</para></note>
+
+ <para>В простейшей форме, <acronym>ACPI</acronym> может использоваться
+ для перевода системы в спящий режим с помощью &man.acpiconf.8;, с
+ флагом <option>-s</option> и параметром <literal>1-5</literal>.
+ Большинству пользователей нужен только параметр <literal>1</literal>.
+ Параметр <literal>5</literal> сделает <quote>мягкое</quote>
+ завершение работы, так же как и:</para>
+
+ <screen>&prompt.root; <userinput>halt -p</userinput></screen>
+
+ <para>Доступны и другие параметры. Обратитесь к странице справочника
+ &man.acpiconf.8; за дополнительной информацией.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="ACPI-debug">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Nate</firstname>
+ <surname>Lawson</surname>
+ <contrib>Написал </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <firstname>Peter</firstname>
+ <surname>Schultz</surname>
+ <contrib>При помощи </contrib>
+ </author>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title>Использование и отладка &os; <acronym>ACPI</acronym></title>
+
+ <para><acronym>ACPI</acronym> это фундаментально новый способ
+ обнаружения устройств, управления энергопотреблением и предоставления
+ стандартизированного доступа к различному оборудованию,
+ ранее управлявшемуся <acronym>BIOS</acronym>. Был достигнут
+ определенный прогресс в приспособлении <acronym>ACPI</acronym>
+ к работе со всеми системами, но все еще встречаются ошибки
+ в байткоде <firstterm><acronym>ACPI</acronym> Machine
+ Language</firstterm> (<acronym>AML</acronym>) некоторых материнских плат,
+ незавершенные участки кода в подсистемах ядра &os; и ошибки в
+ интерпретаторе &intel; <acronym>ACPI-CA</acronym>.</para>
+
+ <para>Этот раздел предназначен для того, чтобы упростить ваше
+ содействие разработчикам &os; <acronym>ACPI</acronym> в
+ определении причин наблюдаемых вами проблем, выполнении отладки
+ и выработке решения. Спасибо за помощь и надеемся, что мы сможем
+ помочь в решении проблем вашей системы.</para>
+
+ <sect2 id="ACPI-submitdebug">
+ <title>Отправка отладочной информации</title>
+
+ <note>
+ <para>Перед отправкой сообщения об ошибке убедитесь, что
+ у вас последняя версия <acronym>BIOS</acronym>, и, если
+ доступна, последняя версия firmware встроенного
+ контроллера.</para>
+ </note>
+
+ <para>Те из вас, кто желает составить сообщение о проблеме прямо
+ сейчас, могут воспользоваться адресом
+ <ulink url="mailto:freebsd-acpi@FreeBSD.org">
+ freebsd-acpi@FreeBSD.org</ulink>, отправив на него следующую
+ информацию:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Описание неправильного поведения, включая тип системы, модель
+ и все, что приводит к появлению ошибки. Кроме того, сообщите
+ настолько точно, насколько возможно, когда появилась ошибка,
+ если ранее вы ее не видели.</para>
+ </listitem>
+
+ <listitem>
+ <para>Вывод &man.dmesg.8; после <quote>boot
+ <command>-v</command></quote>, включая все сообщения, появившиеся
+ при изучении ошибки.</para>
+ </listitem>
+
+ <listitem>
+ <para>Вывод &man.dmesg.8; после <quote>boot
+ <command>-v</command></quote> с выключенным <acronym>ACPI</acronym>,
+ если его отключение помогает решить проблему.</para>
+ </listitem>
+
+ <listitem>
+ <para>Вывод <command>sysctl hw.acpi</command>. Это также хороший
+ способ получения списка возможностей системы.</para>
+ </listitem>
+
+ <listitem>
+ <para><acronym>URL</acronym> где можно найти ваш
+ <firstterm><acronym>ACPI</acronym> Source Language</firstterm>
+ (<acronym>ASL</acronym>). <emphasis>Не</emphasis> отправляйте
+ <acronym>ASL</acronym> непосредственно в список рассылки,
+ поскольку он может быть очень большим. Копия
+ <acronym>ASL</acronym> может быть создана командой:</para>
+
+ <screen>&prompt.root; <userinput>acpidump -t -d &gt; <replaceable>name</replaceable>-<replaceable>system</replaceable>.asl</userinput></screen>
+
+ <para>(Замените вашим логином
+ <filename>name</filename> и производителем/моделью
+ <filename>system</filename>. Пример:
+ <filename>njl-FooCo6000.asl</filename>)</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Большинство разработчиков читают &a.current;,
+ но для уверенности, что проблему увидят, отправьте ее в
+ &a.acpi.name;. Будьте терпеливы, все мы заняты полный рабочий день где-то
+ еще. Если ваше сообщение не заметили сразу, мы возможно
+ попросим вас отправить <acronym>PR</acronym> (сообщение о проблеме)
+ через &man.send-pr.1;. При вводе <acronym>PR</acronym>,
+ включайте ту же информацию, что запрошена выше. Это поможет
+ нам отследить проблему и решить ее. Не отправляйте
+ <acronym>PR</acronym> без предварительной отправки письма в
+ &a.acpi.name;, поскольку мы используем <acronym>PR</acronym> в качестве
+ напоминаний о существующих проблемах, а не как механизм сообщений
+ об ошибках. Вероятно, о вашей проблеме кто-то уже сообщал
+ ранее.</para>
+ </sect2>
+
+ <sect2 id="ACPI-background">
+ <title>Общие сведения</title>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ </indexterm>
+
+ <para><acronym>ACPI</acronym> представлен во всех современных
+ компьютерах, соответствующих архитектурам ia32 (x86),
+ ia64 (Itanium) и amd64 (AMD). Полный стандарт включает множество
+ возможностей, в том числе управление производительностью
+ <acronym>CPU</acronym>, уровнем питания, температурой,
+ различными системами аккумуляторов, встроенными контроллерами
+ и опросом шины. В большинстве систем стандарт реализован не
+ полностью. Например, настольные системы обычно реализуют только
+ опрос шины, а портативные компьютеры кроме того могут поддерживать
+ управление охлаждением и энергопотреблением. Они также поддерживают
+ приостановку и последующий запуск системы различного уровня
+ сложности.</para>
+
+ <para><acronym>ACPI</acronym>-совместимые системы состоят из
+ различных компонентов. Производители <acronym>BIOS</acronym>
+ и чипсетов предоставляют различные жестко заданные таблицы,
+ (например, <acronym>FADT</acronym>), которые определяют
+ функции вроде карты <acronym>APIC</acronym> (используется для
+ <acronym>SMP</acronym>), регистры настройки и простые
+ значения параметров. Кроме того, предоставляется таблица
+ байткода (<firstterm>Differentiated System Description
+ Table</firstterm>, <acronym>DSDT</acronym>), определяющая древоподобное
+ пространство имен устройств и методов.</para>
+
+ <para>Драйвер <acronym>ACPI</acronym> должен прочесть заданные
+ таблицы, реализовать интерпретатор для байткода, модифицировать
+ драйвера устройств и ядро для приема информации от подсистемы
+ <acronym>ACPI</acronym>. Для &os; &intel; предоставила
+ интерпретатор (<acronym>ACPI-CA</acronym>), тот же что для
+ Linux и NetBSD. Исходный код <acronym>ACPI-CA</acronym>
+ находится в каталоге
+ <filename class="directory">src/sys/contrib/dev/acpica</filename>.
+ Код для приспособления <acronym>ACPI-CA</acronym> к работе в
+ &os;, находится в <filename>src/sys/dev/acpica/Osd</filename>.
+ Наконец, драйвера, реализующие различные <acronym>ACPI</acronym>
+ устройства, находятся в
+ <filename class="directory">src/sys/dev/acpica</filename>.</para>
+ </sect2>
+
+ <sect2 id="ACPI-comprob">
+ <title>Часто встречающиеся проблемы</title>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ <secondary>проблемы</secondary>
+ </indexterm>
+
+ <para>Для правильной работы <acronym>ACPI</acronym> все ее части должны
+ работать правильно. Вот некоторые часто встречающиеся проблемы, в порядке
+ частоты появления, и некоторые обходные пути или исправления.</para>
+
+ <sect3>
+ <title>Проблемы с мышью</title>
+
+ <para>В некоторых случаях при возобновлении работы после приостановки
+ перестает работать мышь. Известным решением проблемы является
+ добавление строки <literal>hint.psm.0.flags="0x3000"</literal>
+ в файл <filename>/boot/loader.conf</filename>. Если это не помогло,
+ стоит сообщить о проблеме, как описано выше.</para>
+ </sect3>
+
+ <sect3>
+ <title>Приостановка/возобновление работы</title>
+
+ <para><acronym>ACPI</acronym> поддерживает три состояния приостановки в
+ <acronym>RAM</acronym> (<acronym>STR</acronym>),
+ <literal>S1</literal>-<literal>S3</literal>, и одно состояние
+ приостановки на диск (<literal>STD</literal>), называемое
+ <literal>S4</literal>. <literal>S5</literal> это
+ <quote>мягкое выключение</quote> и это нормальное состояние системы,
+ когда она подключена к сети, но не включена. <literal>S4</literal>
+ может быть реализован двумя различными путями.
+ <literal>S4</literal><acronym>BIOS</acronym> это
+ <acronym>BIOS</acronym>-поддерживаемая приостановка на диск.
+ <literal>S4</literal><acronym>OS</acronym> реализуется полностью
+ операционной системой.</para>
+
+ <para>Начните с проверки переменных <command>sysctl
+ hw.acpi</command>,
+ относящихся к приостановке (suspend).
+ Вот результат для Thinkpad:</para>
+
+ <screen>hw.acpi.supported_sleep_state: S3 S4 S5
+hw.acpi.s4bios: 0</screen>
+
+ <para>Это означает, что мы можем использовать <command>acpiconf
+ -s</command> для тестирования <literal>S3</literal>,
+ <literal>S4</literal><acronym>OS</acronym>, и
+ <literal>S5</literal>. Если <option>s4bios</option> был единицей
+ (<literal>1</literal>), это означает поддержку
+ <literal>S4</literal><acronym>BIOS</acronym> вместо
+ <literal>S4</literal><acronym>OS</acronym>.</para>
+
+ <para>При тестировании приостановки/возобновления работы, начните
+ с <literal>S1</literal>, если этот режим поддерживается.
+ Это состояние скорее всего поддерживается, поскольку не требует
+ слишком серьезной поддержки со стороны драйвера. Никто не
+ реализовал <literal>S2</literal>, который похож на
+ <literal>S1</literal>. Следующий режим для тестирования это
+ <literal>S3</literal>. Это наиболее глубокое <acronym>STR</acronym>
+ состояние, оно требует существенной поддержки со стороны
+ драйвера, чтобы правильно реинициализировать оборудование.
+ Если у вас возникли проблемы при выходе из этого состояния,
+ отправьте письмо в рассылку &a.acpi.name;, но не ждите, что
+ проблема будет обязательно решена, поскольку существует
+ множество драйверов/оборудования, нуждающихся в дальнейшем
+ тестировании и разработке.</para>
+
+ <para>Для изоляции проблемы удалите из ядра столько драйверов,
+ сколько возможно. Если это работает, вы можете выяснить,
+ какой драйвер вызывает проблему путем загрузки драйверов
+ до тех пор, пока опять не произойдет сбой. Обычно бинарные
+ драйвера, такие как <filename>nvidia.ko</filename>,
+ драйвера дисплея X11 и
+ <acronym>USB</acronym> вызывают большинство проблем, а драйвера
+ Ethernet интерфейсов как правило работают отлично. Если вы
+ можете нормально загрузить/выгрузить драйвера, автоматизируйте
+ этот процесс, поместив соответствующие команды в
+ <filename>/etc/rc.suspend</filename> и
+ <filename>/etc/rc.resume</filename>. Это закомментированные
+ примеры выгрузки и загрузки драйверов. Попробуйте
+ установить параметр <option>hw.acpi.reset_video</option>
+ в нуль (<literal>0</literal>), если ваш дисплей не включается
+ после возобновления
+ работы. Попробуйте установить большие или меньшие значения
+ для <option>hw.acpi.sleep_delay</option>, чтобы проверить,
+ поможет ли это.</para>
+
+ <para>Другой способ, который можно попробовать, это запуск
+ последнего дистрибутива Linux с поддержкой
+ <acronym>ACPI</acronym> и тестирование поддержки
+ остановки/возобновления работы на том же оборудовании.
+ Если она работает на Linux, проблема скорее всего в
+ драйверах &os; и поиск драйвера, вызывающего проблему,
+ поможет разрешить ситуацию. Имейте ввиду, что разработчики
+ <acronym>ACPI</acronym> обычно не поддерживают другие
+ драйверы (звук, <acronym>ATA</acronym>, и т.п.), так что
+ все результаты работы по поиску проблемы возможно необходимо
+ отправить в список рассылки &a.current.name; и человеку,
+ поддерживающему драйвер. Если вы решитесь заняться
+ отладкой, поместите соответствующий код (&man.printf.3;)
+ в вызывающий проблему драйвер для обнаружения места, где
+ прерывается функция восстановления.</para>
+
+ <para>Наконец, попробуйте отключить <acronym>ACPI</acronym> и
+ включить <acronym>APM</acronym>. Если приостановка/возобновление
+ работает с <acronym>APM</acronym>, вам возможно лучше подойдет
+ <acronym>APM</acronym>, особенно на старом оборудовании (до
+ 2000). Включение корректной поддержки <acronym>ACPI</acronym>
+ поставщиками оборудования требует времени и вероятно в старом
+ оборудовании поддержка <acronym>ACPI</acronym> в
+ <acronym>BIOS</acronym> была некорректна.</para>
+ </sect3>
+
+ <sect3>
+ <title>Система останавливается (временно или постоянно)</title>
+
+ <para>Большинство систем останавливаются в результате потери
+ прерываний или <quote>шторма</quote> прерываний. В чипсетах
+ существует много проблем, связанных с тем, как
+ <acronym>BIOS</acronym> настраивает прерывания перед загрузкой,
+ правильностью таблицы <acronym>APIC</acronym>
+ (<acronym>MADT</acronym>), и маршрутизации
+ <firstterm>System Control Interrupt</firstterm>
+ (<acronym>SCI</acronym>).</para>
+
+ <indexterm>
+ <primary>шторм прерываний</primary>
+ </indexterm>
+
+ <para><quote>Шторм</quote> прерываний может быть обнаружен по
+ потерянным прерываниям путем проверки вывода строки с
+ <literal>acpi0</literal> команды <command>vmstat -i</command>.
+ Если счетчик увеличивается более, чем
+ несколько раз в секунду, это <quote>шторм</quote> прерываний.
+ Если система останавливается, попробуйте войти в
+ <acronym>DDB</acronym>
+ (<keycombo action="simul"><keycap>CTRL</keycap>
+ <keycap>ALT</keycap><keycap>ESC</keycap></keycombo> на
+ консоли) и ввести <literal>show interrupts</literal>.</para>
+
+ <indexterm>
+ <primary>APIC</primary>
+ <secondary>отключение</secondary>
+ </indexterm>
+
+ <para>Наиболее надежный способ избавиться от проблемы с прерываниями,
+ это отключение поддержки <acronym>APIC</acronym> с помощью
+ параметра <filename>loader.conf</filename>
+ <literal>hint.apic.0.disabled="1"</literal>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Паника</title>
+
+ <para>Паника, связанная с <acronym>ACPI</acronym>, случается довольно
+ редко и имеет наибольший приоритет исправления. Первый шаг
+ это изоляция действий, приводящих к панике (если это возможно)
+ и получение отладки. Следуйте инструкции по включению
+ <literal>options DDB</literal> и настройке последовательной консоли
+ (смотрите <xref linkend="serialconsole-ddb"/>)
+ или настройке раздела &man.dump.8;. Вы можете получить отладочную
+ информацию <acronym>DDB</acronym> с помощью <literal>tr</literal>.
+ Если вы записываете отладку вручную, убедитесь, что переписали
+ как минимум пять (5) строк снизу и пять (5) строк сверху.</para>
+
+ <para>Затем попробуйте изолировать проблему, загрузившись с
+ выключенным <acronym>ACPI</acronym>. Если это работает, вы можете
+ изолировать подсистему <acronym>ACPI</acronym>, используя
+ различные параметры <option>debug.acpi.disable</option>.
+ Обратитесь к странице справочника &man.acpi.4; за примерами.</para>
+ </sect3>
+
+ <sect3>
+ <title>Система включается после приостановки или завершения
+ работы</title>
+
+ <para>Во-первых, попробуйте установить в &man.loader.conf.5; параметр
+ <literal>hw.acpi.disable_on_poweroff="0"</literal>.
+ Это предотвращает отключение различных событий в
+ <acronym>ACPI</acronym> во время завершения работы.
+ В некоторых системах этот параметр необходимо установить
+ в <literal>1</literal> (по умолчанию) по тем же причинам. Обычно это
+ решает проблему, если система неожиданно включается после
+ приостановки или отключения питания.</para>
+ </sect3>
+
+ <sect3>
+ <title>Другие проблемы</title>
+
+ <para>Если вы наблюдаете другие проблемы с <acronym>ACPI</acronym>
+ (работа с внешним оборудованием, проблемы с обнаружением устройств,
+ и т.д.), отправьте описание проблемы в список рассылки;
+ однако, некоторые из этих проблем могут относиться к незавершенным
+ частям подсистемы <acronym>ACPI</acronym>, поэтому может
+ потребоваться время на их реализацию. Будьте терпеливы, и
+ подготовьтесь к тестированию исправлений, которые мы можем вам
+ выслать.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="ACPI-aslanddump">
+ <title><acronym>ASL</acronym>, <command>acpidump</command>, и
+ <acronym>IASL</acronym></title>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ <secondary>ASL</secondary>
+ </indexterm>
+
+ <para>Наиболее часто встречается проблема, связанная с предоставлением
+ поставщиками <acronym>BIOS</acronym> некорректного (или полностью
+ ошибочного!) байткода. Это обычно проявляется появлением
+ консольных сообщений ядра, подобных этому:</para>
+
+ <screen>ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
+ (Node 0xc3f6d160), AE_NOT_FOUND</screen>
+
+ <para>Зачастую вы можете разрешить эти проблемы путем обновления
+ <acronym>BIOS</acronym> до последней ревизии. Большинство консольных
+ сообщений безвредны, но если существуют другие проблемы, такие как
+ не работающий статус батареи, возможно существуют проблемы в
+ <acronym>AML</acronym>. Байткод, известный как
+ <acronym>AML</acronym>, компилируется из исходного текста на
+ языке <acronym>ASL</acronym>. <acronym>AML</acronym> находится
+ в таблице, известной как <acronym>DSDT</acronym>. Для получения
+ копии <acronym>ASL</acronym>, используйте &man.acpidump.8;.
+ Вы можете использовать оба параметра <option>-t</option>
+ (показывать содержимое постоянных таблиц) и <option>-d</option>
+ (дизассемблировать <acronym>AML</acronym> в <acronym>ASL</acronym>).
+ Обратитесь к разделу <link linkend="ACPI-submitdebug">Отправка
+ отладочной информации</link> за примером синтаксиса.</para>
+
+ <para>Простейшая первая проверка, которую вы можете провести,
+ это перекомпиляция <acronym>ASL</acronym> для поиска ошибок.
+ Предупреждения обычно могут быть проигнорированы, но ошибки
+ обычно не позволяют <acronym>ACPI</acronym> работать правильно.
+ Для перекомпиляции <acronym>ASL</acronym>, выполните следующую
+ команду:</para>
+
+ <screen>&prompt.root; <userinput>iasl your.asl</userinput></screen>
+ </sect2>
+
+ <sect2 id="ACPI-fixasl">
+ <title>Исправление <acronym>ASL</acronym></title>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ <secondary>ASL</secondary>
+ </indexterm>
+
+ <para>В дальней перспективе, наша задача состоит в том, чтобы
+ обеспечить поддержку <acronym>ACPI</acronym> практически для
+ каждой системы без вмешательства пользователя. Однако, на данный
+ момент мы все еще разрабатываем обходные пути для ошибок,
+ которые часто делают поставщики <acronym>BIOS</acronym>.
+ Интерпретатор &microsoft; (<filename>acpi.sys</filename> и
+ <filename>acpiec.sys</filename>) не занимается проверкой
+ четкости соблюдения стандартов, поэтому многие поставщики
+ <acronym>BIOS</acronym>, проверяющие <acronym>ACPI</acronym>
+ только под &windows;, никогда не исправляют <acronym>ASL</acronym>.
+ Мы надеемся продолжать обнаружение и документацию нестандартных
+ поведений, позволяемых интерпретатором &microsoft;, и воспроизводить
+ их, чтобы &os; могла работать без необходимости исправления
+ <acronym>ASL</acronym> пользователями. В качестве обходного пути
+ для обнаружения неправильного поведения, вы можете исправить
+ <acronym>ASL</acronym> вручную. Если исправления будут работать,
+ пожалуйста отправьте &man.diff.1; между старым и новым
+ <acronym>ASL</acronym>, чтобы мы могли реализовать обходной
+ путь для неправильного поведения <acronym>ACPI-CA</acronym>,
+ чтобы исправление вручную больше не требовалось.</para>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ <secondary>сообщения об ошибках</secondary>
+ </indexterm>
+
+ <para>Вот список наиболее часто встречающихся проблем, их причин и
+ способы исправления:</para>
+
+ <sect3>
+ <title>OS зависимости</title>
+
+ <para>Некоторые <acronym>AML</acronym> предполагают, что мир состоит
+ из различных версий &windows;. Вы можете настроить &os;, чтобы
+ она сообщала любое другое имя <acronym>OS</acronym> и посмотреть,
+ исправит ли это имеющуюся проблему. Простой способ указания
+ другого имени системы это установка переменной
+ <filename>/boot/loader.conf</filename>
+ <literal>hw.acpi.osname="Windows 2001"</literal>
+ или в другое подобное значение, имеющееся в
+ <acronym>ASL</acronym>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Отсутствие возврата значения</title>
+
+ <para>Некоторые методы не возвращают значение явно, как того
+ требует стандарт. Хотя <acronym>ACPI-CA</acronym> не обрабатывает
+ эту ситуацию, в &os; существует обходной путь, позволяющей ей
+ явно возвращать значение. Вы можете также добавить явные операторы
+ Return (возврат) там, где требуется, если знаете, что значение
+ должно быть возвращено. Для принудительного компилирования
+ <acronym>ASL</acronym> командой <command>iasl</command>, используйте
+ флаг <option>-f</option>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Перезапись <acronym>AML</acronym> по умолчанию</title>
+
+ <para>После настройки <filename>your.asl</filename> для
+ компиляции запустите:</para>
+
+ <screen>&prompt.root; <userinput>iasl your.asl</userinput></screen>
+
+ <para>Вы можете добавить флаг <option>-f</option> для создания
+ <acronym>AML</acronym> даже при наличии ошибок компиляции.
+ Помните, что некоторые ошибки (например, отсутствующие операторы
+ Return), автоматически обходятся интерпретатором.</para>
+
+ <para>Файл <filename>DSDT.aml</filename> используется
+ <command>iasl</command> по умолчанию. Вы можете загрузить его
+ вместо ошибочной копии <acronym>BIOS</acronym> (которая
+ остается в постоянной памяти) путем редактирования
+ <filename class="directory">/boot/loader.conf</filename>:</para>
+
+ <programlisting>acpi_dsdt_load="YES"
+acpi_dsdt_name="/boot/DSDT.aml"</programlisting>
+
+ <para>Убедитесь, что скопировали <filename>DSDT.aml</filename> в
+ каталог <filename class="directory">/boot</filename>.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="ACPI-debugoutput">
+ <title>Получение отладочной информации
+ <acronym>ACPI</acronym></title>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ <secondary>проблемы</secondary>
+ </indexterm>
+
+ <indexterm>
+ <primary>ACPI</primary>
+ <secondary>отладка</secondary>
+ </indexterm>
+
+ <para>Возможности отладки драйвера <acronym>ACPI</acronym> очень
+ гибкие. Они позволяют вам указывать набор подсистем, а также
+ уровень отладки. Подсистемы, которые вы хотите отлаживать,
+ указываются как <quote>слои</quote>, и подразделяются на
+ компоненты <acronym>ACPI-CA</acronym> (ACPI_ALL_COMPONENTS)
+ и поддержку оборудования <acronym>ACPI</acronym> (ACPI_ALL_DRIVERS).
+ Уровень отладки варьируется от ACPI_LV_ERROR (только сообщать об
+ ошибках) до ACPI_LV_VERBOSE (все сообщения). Уровень отладки
+ представляет собой битовую маску, поэтому возможна одновременная
+ установка нескольких параметров, разделенных пробелами.
+ На практике, при использовании для получения отладочной информации
+ последовательной консоли, слишком большое количество информации
+ может переполнить буфер консоли. Полный список отдельных слоев
+ и уровней можно найти на странице справочника &man.acpi.4;.</para>
+
+ <para>Вывод отладочной информации по умолчанию не включен.
+ Для его включения добавьте параметр
+ <literal>options ACPI_DEBUG</literal> к файлу настройки ядра, если
+ <acronym>ACPI</acronym> встроен в ядро. Вы можете добавить параметр
+ <literal>ACPI_DEBUG=1</literal> в файл
+ <filename>/etc/make.conf</filename> для глобального включения
+ этого параметра. Если вы используете модуль
+ <filename>acpi.ko</filename> , его можно пересобрать
+ индивидуально:</para>
+
+ <screen>&prompt.root; <userinput>cd /sys/modules/acpi/acpi
+&amp;&amp; make clean &amp;&amp; make
+ACPI_DEBUG=1</userinput></screen>
+
+ <para>Установите <filename>acpi.ko</filename> в
+ <filename class="directory">/boot/kernel</filename> и добавьте
+ предпочитаемый уровень и слой к <filename>loader.conf</filename>.
+ Этот пример включает отладочные сообщения для всех компонентов
+ <acronym>ACPI-CA</acronym> и всех драйверов оборудования
+ <acronym>ACPI</acronym> (<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>Если требуемая информация получается в результате определенного
+ события (скажем, приостановка и восстановление), вы можете
+ не изменять <filename>loader.conf</filename> и использовать
+ для указания слоя и уровня <command>sysctl</command>
+ после загрузки и подготовки системы к определенному событию.
+ Имена переменных <command>sysctl</command> те же, что и имена
+ параметров настройки в <filename>loader.conf</filename>.</para>
+ </sect2>
+
+ <sect2 id="ACPI-References">
+ <title>Ссылки</title>
+
+ <para>Дальнейшую информацию о <acronym>ACPI</acronym> можно найти
+ по следующим ссылкам:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>&a.acpi;</para>
+ </listitem>
+
+ <listitem>
+ <para>Архивы списка рассылки <acronym>ACPI</acronym>
+ <ulink url="http://lists.freebsd.org/pipermail/freebsd-acpi/"></ulink></para>
+ </listitem>
+
+ <listitem>
+ <para>Старые архивы списка рассылки <acronym>ACPI</acronym>
+ <ulink url="http://home.jp.FreeBSD.org/mail-list/acpi-jp/"></ulink></para>
+ </listitem>
+
+ <listitem>
+ <para>Спецификация <acronym>ACPI</acronym> 2.0
+ <ulink url="http://acpi.info/spec.htm"></ulink></para>
+ </listitem>
+
+ <listitem>
+ <para>Страницы справочника &os;: &man.acpi.4;,
+ &man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8;,
+ &man.acpidb.8;</para>
+ </listitem>
+
+ <listitem>
+ <para><ulink
+ url="http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt">
+ Ресурс по отладке <acronym>DSDT</acronym></ulink>.
+ (Использует в качестве примера Compaq, но обычно полезен.)</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+ </sect1>
+</chapter>