diff options
Diffstat (limited to 'ru_RU.KOI8-R/books/handbook/config/chapter.xml')
-rw-r--r-- | ru_RU.KOI8-R/books/handbook/config/chapter.xml | 3086 |
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 мегабайт памяти, раздел + подкачки должен быть 256 мегабайт. Системы с меньшим + количеством памяти могут работать лучше с большим объёмом + раздела подкачки. Не рекомендуется устанавливать размер + раздела подкачки меньше 256 мегабайт, необходимо также + принять во внимание возможное наращивание объема установленной + на машине памяти. + Алгоритмы кэширования 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> — они вмещают значения по + умолчанию, а не примеры значений. Все специфичные для данной системы + изменения должны быть сделаны в файле + <filename>rc.conf</filename>.</para> + + <para>Существует несколько методов для отделения общей конфигурации для + группы систем от конкретной для данной системы в целях уменьшения объема + работы администратора. Рекомендуемый метод + — прописать общую конфигурацию в отдельный файл, например, в + <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>, — + это лишь два примера множества программных пакетов, которые + можно запускать при инициализации системы. В этом разделе + описывается процедура, предназначенная для запуска программ + сторонних разработчиков.</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; 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}" >&2 + exit 64 + ;; +esac + +exit 0</programlisting> + + <para>Этот скрипт поддерживает опции <literal>stop</literal> и + <literal>start</literal> для приложения, которое мы здесь называем + просто — <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>, — это значение + можно использовать вместо спецификации времени. В результате, + задание будет выполнено при запуске &man.cron.8;, обычно — + в ходе инициализации системы.</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; +# +# $&os;: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ +# <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: <82c169 PNIC 10/100BaseTX> 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: <MII bus> on dc0 +ukphy0: <Generic IEEE 802.3u media interface> on miibus0 +ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto +dc1: <82c169 PNIC 10/100BaseTX> 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: <MII bus> on dc1 +ukphy1: <Generic IEEE 802.3u media interface> on miibus1 +ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto</screen> + + <para>В этом примере две карты используют имеющийся в системе + драйвер &man.dc.4;.</para> + + <para>Если драйвер вашей сетевой карты отсутствует в + <filename>GENERIC</filename>, для ее использования потребуется + загрузить подходящий драйвер. Это может быть сделано одним + из двух способов:</para> + + <itemizedlist> + <listitem> + <para>Простейший способ — просто загрузить модуль + ядра сетевой карты с помощью &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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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 <full-duplex>) + status: active +dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 +lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 + inet 127.0.0.1 netmask 0xff000000 +tun0: flags=8010<POINTOPOINT,MULTICAST> 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 + <full-duplex>)</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<BROADCAST,SIMPLEX,MULTICAST> 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>Основные файлы конфигурации системы. Тут размещены + системно–зависимые данные.</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 адрес сервера имён. Сервера опрашиваются в порядке + описания. Максимальное количество адресов — три.</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> — простая текстовая база + данных, напоминающая старый Интернет. Она работает совместно с + DNS и NIS, сопоставляя доменные имена IP адресу. + Отдельные компьютеры, соединённые с помощью локальной сети, могут + быть записаны тут вместо &man.named.8; сервера с целью упрощения. + Кроме того, <filename>/etc/hosts</filename> используется для + записи IP адресов и соответствующих им доменов, избавляя от + внешнего трафика, используемого для запросов к DNS серверам.</para> + + <programlisting># $&os;$ +# +# 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># $&os;$ +# +# 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> — конфигурационный файл + &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 +# $&os;$ +# +# 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; — это интерфейс, позволяющий вам вносить изменения + в работающую систему &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 -> 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 байт) в кэше буфера. + При отключении этой переменной (при установке значения 0) + буфер прокэширует только заданное число + каталогов даже если у вас много памяти. При включении (при + установке значения 1) эта переменная + sysctl позволит использовать страничное кэширование VM, + делая доступным для кэширования каталогов + весь объём памяти. Однако, + минимальный объём памяти, используемой для + кэширования каталогов стал равен объёму страницы (обычно 4 K) + вместо 512 байт. Мы рекомендуем оставлять эту опцию включенной, + если ваш компьютер исполняет программы, манипулирующие значительным + количеством файлов. Примером таких программ могут быть кэширующие + прокси-серверы, большие почтовые серверы и серверы новостей. Обычно + включение этой опции не понижает производительности, однако лучше + поэкспериментировать, чтобы узнать оптимальное значение для вашей + машины.</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; 4.3 кэширование записи на IDE диски было отключено. + Это понижало производительность IDE дисков в тестах, но было + необходимо для лучшей сохранности данных. Проблема состоит в том, + что IDE диски неправильно указывают время завершения записи на диск. + При включенном кэшировании IDE диски могут не только записать данные + в неправильном порядке — при большой нагрузке на диск некоторые + блоки могут задержаться до бесконечности. Сбой, или отключение + питания могут могут стать причиной серьёзных повреждений в файловой + системе. Поэтому для безопасности системы значение по умолчанию + этого параметра было изменено. К сожалению, результатом этого стало + столь значительная потеря производительности, что после выхода + релиза значение этого параметра было возвращено в первоначальное + состояние. Вам следует проверить значение переменной sysctl + <varname>hw.ata.wc</varname> на вашей машине. Если кэширование + выключено — вы можете включить его, установив значение переменной + ядра, равное 1. Это должно быть сделано при помощи загрузчика при + загрузке. Если вы сделаете это позже — изменения не будут иметь + силы.</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; используется для настройки файловой + системы. Эта программа может принимать большое количество параметров, + но мы рассмотрим лишь один из них — включение и выключение + 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 гарантирует целостность + файловой системы в случае сбоя, но может наблюдаться задержка в + несколько секунд (или даже минуту!) перед записью на жесткий диск. + Если система зависнет — вы можете потерять + больше, чем, если бы вы не включили 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>, которая могла бы + исправить получившийся хаос (поскольку необходимой информации + нет на диске). Если файловая система была уничтожена во + время восстановления, единственный способ восстановления + — запустить &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–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; 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 K буфера + приема и 16 K буфера отправки, вам потребуется 32 MB памяти + под буферы. Хорошее правило — умножение этого значения на 2, + 2x32 MB / 2 KB = 64 MB / 2 kB = 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; за подробностями). Общий + признак того, что параметр требуется изменить — + состояние процессов <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 && 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 > <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>. + Интерпретатор µsoft; (<filename>acpi.sys</filename> и + <filename>acpiec.sys</filename>) не занимается проверкой + четкости соблюдения стандартов, поэтому многие поставщики + <acronym>BIOS</acronym>, проверяющие <acronym>ACPI</acronym> + только под &windows;, никогда не исправляют <acronym>ASL</acronym>. + Мы надеемся продолжать обнаружение и документацию нестандартных + поведений, позволяемых интерпретатором µsoft;, и воспроизводить + их, чтобы &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 +&& make clean && 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> |