Following translations were added:

Name                           Original Revision
----                           --------
dialup-firewall/article.sgml   1.7
diskless-x/article.sgml        1.4
explaining-bsd/article.sgml    1.1
fonts/article.sgml             1.15
formatting-media/article.sgml  1.16
ipsec-must/article.sgml        1.3
mh/article.sgml                1.9
solid-state/article.sgml       1.1
vm-design/article.sgml         1.4
zip-drive/article.sgml         1.2

and activate build of these document

Obtained from:	The FreeBSD Russian Documentation Project's CVS Repository
This commit is contained in:
Alexey Zelkin 2001-07-25 13:17:17 +00:00
parent cf84249a75
commit 76041ef36a
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=10042
28 changed files with 6917 additions and 47 deletions

View file

@ -1,21 +1,26 @@
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/Makefile,v 1.1 2001/03/11 10:41:06 phantom Exp $
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/Makefile,v 1.7 2001/07/25 10:26:26 phantom Exp $
#
# Original revision: 1.9
#SUBDIR = committers-guide
#SUBDIR+= dialup-firewall
#SUBDIR+= diskless-x
SUBDIR = freebsd-questions
#SUBDIR+= fonts
#SUBDIR+= formatting-media
#SUBDIR+= ipsec-must
#SUBDIR+= mh
SUBDIR+= dialup-firewall
SUBDIR+= diskless-x
SUBDIR+= explaining-bsd
SUBDIR+= fonts
SUBDIR+= formatting-media
SUBDIR+= freebsd-questions
SUBDIR+= ipsec-must
SUBDIR+= mh
#SUBDIR+= multi-os
#SUBDIR+= new-users
#SUBDIR+= programming-tools
#SUBDIR+= zip-drive
SUBDIR+= solid-state
SUBDIR+= vm-design
SUBDIR+= zip-drive
# ROOT_SYMLINKS+= new-users
ROOT_SYMLINKS+= new-users
DOC_PREFIX?= ${.CURDIR}/../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -1,7 +1,9 @@
#
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/Makefile.inc,v 1.1 2001/03/11 10:41:06 phantom Exp $
# $FreeBSD: doc/ru_RU.KOI8-R/articles/Makefile.inc,v 1.1 2001/03/11 16:23:41 phantom Exp $
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/Makefile.inc,v 1.4 2001/07/25 10:26:26 phantom Exp $
#
# Original revision: 1.3
#
TIDYFLAGS= -latin1
DESTDIR?= ${DOCDIR}/ru_RU.KOI8-R/articles/${.CURDIR:T}

View file

@ -0,0 +1,26 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/dialup-firewall/Makefile,v 1.2 2001/07/25 10:26:31 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER=andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,384 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/dialup-firewall/article.sgml,v 1.2 2001/06/30 11:02:46 phantom Exp $
Original revision: 1.7
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article>
<articleinfo>
<title>Построение межсетевого экрана на коммутируемом канале связи при
помощи FreeBSD</title>
<authorgroup>
<author>
<firstname>Marc</firstname>
<surname>Silver</surname>
<affiliation>
<address><email>marcs@draenor.org</email></address>
</affiliation>
</author>
</authorgroup>
<pubdate>$Date: 2001-07-25 13:17:15 $</pubdate>
<abstract>
<para>Эта статья описывает, как настроить межсетевой экран при помощи
возможностей PPP по работе на коммутируемом канале связи с FreeBSD и
IPFW, и, в частности, описывается настройка межсетевого экрана при
использовании коммутируемого канала связи с динамически выделяемым
адресом IP. Этот документ не описывает начальную настройку
PPP-соединения.</para>
</abstract>
</articleinfo>
<sect1 id="preface">
<title>Введение</title>
<para>Построение межсетевого экрана на коммутируемом канале связи при
помощи FreeBSD</para>
<para>Этот документ предназначен для того, чтобы описать действия,
требуемые для настройки межсетевого экрана при помощи FreeBSD в случае,
когда IP-адрес выделяется динамически вашим провайдером. Хотя
прилагались все усилия для того, чтобы сделать этот документ максимально
информативным и правильным, все же присылайте свои комментарии и
пожелания <ulink
URL="mailto:marcs@draenor.org">составителю</ulink>.</para>
</sect1>
<sect1 id="kernel">
<title>Параметры ядра</title>
<para>Прежде всего вам нужно перекомпилировать ваше ядро FreeBSD. Если вам
нужна более подробная информация о том, как это сделать, то лучше всего
начать с <ulink
URL="http://www.FreeBSD.org/handbook/kernelconfig.html">раздела
Руководства о конфигурации ядра</ulink>. Вам нужно включить в ядро
следующие параметры:</para>
<variablelist>
<varlistentry>
<term><literal>options IPFIREWALL</literal></term>
<listitem>
<para>Включает межсетевой экран в ядре.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options IPFIREWALL_VERBOSE</literal></term>
<listitem>
<para>Посылает сообщения о журналируемых пакетах в системный
журнал.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options
IPFIREWALL_VERBOSE_LIMIT=<replaceable>100</replaceable></literal></term>
<listitem>
<para>Ограничивает количество записываемых в журнал совпадающих
сообщений. Это позволяет избавиться от заполнения файлов протокола
множеством повторяющихся записей. <replaceable>100</replaceable>
является подходящим для использования параметром, но вы можете
изменить его в зависимости от ваших потребностей.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options IPDIVERT</literal></term>
<listitem>
<para>Включает использование <emphasis>перенаправляющих</emphasis>
сокетов, что будет показано ниже.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Имеется также еще несколько НЕОБЯЗАТЕЛЬНЫХ параметров, которые вы
можете указать в ядре для достижения дополнительной безопасности. Для
работы межсетевого экрана этого не требуется, но некоторые параноидально
настроенные пользователи могут все же ими воспользоваться.</para>
<variablelist>
<varlistentry>
<term><literal>options TCP_RESTRICT_RST</literal></term>
<listitem>
<para>Этот параметр блокирует все пакеты TCP RST. Это лучше
использовать в системах, которые могут подвергаться флуд-атакам
SYN (хорошим примером являются серверы IRC) или теми, кто не
хочет быть легко подвергнутым сканированию портов.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options TCP_DROP_SYNFIN</literal></term>
<listitem>
<para>При использовании этого параметра TCP-пакеты с полями SYN и
FIN игнорируются. Это позволит избежать распознавания
используемого на машине типа стека такими утилитами, как nmap,
но при этом нельзя будет использовать расширения RFC1644. Если на
машине будет работать веб-сервер, делать это НЕ
рекомендуется.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Не перезагружайте машину сразу же после перекомпиляции ядра. Для
завершения настройки межсетевого экрана нам, к счастью, достаточно будет
выполнить перезагрузку всего один раз .</para>
</sect1>
<sect1 id="rcconf">
<title>Изменение <filename>/etc/rc.conf</filename> для загрузки межсетевого
экрана</title>
<para>Теперь нам нужно внести некоторые изменения в файл
<filename>/etc/rc.conf</filename> для того, чтобы указать о включении
межсетевого экрана. Просто добавьте следующие строки:</para>
<programlisting>
firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic"
</programlisting>
<para>Для получения более полной информации о том, что делают эти строки,
взгляните на содержимое файла <filename>/etc/defaults/rc.conf</filename>
и прочтите &man.rc.conf.5;</para>
</sect1>
<sect1>
<title>Выключение механизма преобразования сетевых адресов в PPP</title>
<para>Может, вы уже используете встроенный в PPP механизм преобразования
сетевых адресов (NAT). Если это ваш случай, то вам нужно это выключить,
так как в этих примерах для тех же самых целей используется
&man.natd.8;.</para>
<para>Если у вас уже есть блок директив для автоматического запуска PPP,
то он, скорее всего, выглядит примерно так:</para>
<programlisting>
ppp_enable="YES"
ppp_mode="auto"
ppp_nat="YES"
ppp_profile="<replaceable>profile</replaceable>"
</programlisting>
<para>Если это так, то удалите строчку <literal>ppp_nat="YES"</literal>.
Вам также потребуется удалить все строчки
<literal>nat enable yes</literal> и <literal>alias enable yes</literal>
в файле <filename>/etc/ppp/ppp.conf</filename>.</para>
</sect1>
<sect1 id="rules">
<title>Набор правил для межсетевого экрана</title>
<para>Теперь мы выполнили практически все. Единственное, что осталось
сделать, так это задать правила для межсетевого экрана, после чего мы
можем выполнить перезагрузку, и межсетевой экран должен заработать. Я
понимаю, что в каждом конкретном случае потребуется набор правил, весьма
отличающийся от предлагаемого. Я всего лишь попытался написать набор
правил, которые должны подойти большинству пользователей коммутируемого
доступа. Вы можете тривиально изменить их под ваши требования, взяв
нижеследующие правила в качестве основы. Но сначала рассмотрим основы
закрытого межсетевого экрана. Вы хотите запретить по умолчанию все, а
затем открывать только то, что вам нужно. Правила должны следовать в
порядке, когда сначала идут разрешающие правила, а затем запрещающие.
Полагаем, что вы добавите свои разрешающие правила, а затем все остальное
будет запрещено. :)</para>
<para>Теперь создадим каталог /etc/firewall. Перейдите в этот каталог и
отредактируйте файл fwrules, который мы указали в rc.conf. Пожалуйста,
отметьте, что вы можете изменить это имя на любое другое. В этом
руководстве имя файла дается в качестве примера.</para>
<para>Давайте взглянем на пример файла для межсетевого экрана, и подробно
опишем его содержимое.</para>
<programlisting>
# Firewall rules
# Written by Marc Silver (marcs@draenor.org)
# http://draenor.org/ipfw
# Freely distributable
# Define the firewall command (as in /etc/rc.firewall) for easy
# reference. Helps to make it easier to read.
fwcmd="/sbin/ipfw"
# Force a flushing of the current rules before we reload.
$fwcmd -f flush
# Divert all packets through the tunnel interface.
$fwcmd add divert natd all from any to any via tun0
# Allow all data from my network card and localhost. Make sure you
# change your network card (mine was fxp0) before you reboot. :)
$fwcmd add allow ip from any to any via lo0
$fwcmd add allow ip from any to any via fxp0
# Allow all connections that I initiate.
$fwcmd add allow tcp from any to any out xmit tun0 setup
# Once connections are made, allow them to stay open.
$fwcmd add allow tcp from any to any via tun0 established
# Everyone on the internet is allowed to connect to the following
# services on the machine. This example shows that people may connect
# to ssh and apache.
$fwcmd add allow tcp from any to any 80 setup
$fwcmd add allow tcp from any to any 22 setup
# This sends a RESET to all ident packets.
$fwcmd add reset log tcp from any to any 113 in recv tun0
# Allow outgoing DNS queries ONLY to the specified servers.
$fwcmd add allow udp from any to <replaceable>x.x.x.x</replaceable> 53 out xmit tun0
# Allow them back in with the answers... :)
$fwcmd add allow udp from <replaceable>x.x.x.x</replaceable> 53 to any in recv tun0
# Allow ICMP (for ping and traceroute to work). You may wish to
# disallow this, but I feel it suits my needs to keep them in.
$fwcmd add 65435 allow icmp from any to any
# Deny all the rest.
$fwcmd add 65435 deny log ip from any to any
</programlisting>
<para>Теперь у вас есть полнофункциональный межсетевой экран, который
разрешает соединения к портам 80 и 22, и отображает в журнале все
остальные попытки соединения. Теперь у вас должна успешно пройти
перезагрузка и ваш межсетевой экран должен нормально заработать. Если вы
обнаружите, что это не так, у вас возникнут проблемы или у вас возникнут
пожелания, пожалуйста, напишите мне письмо по электронной почте.</para>
</sect1>
<sect1>
<title>Вопросы</title>
<qandaset>
<qandaentry>
<question>
<para>Почему вы используете natd и ipfw, когда можно использовать
встроенные фильтры ppp?</para>
</question>
<answer>
<para>Скажу честно, что определенной причины, объясняющей, почему я
использую ipfw и natd вместо встроенных в ppp фильтров. В
результате обсуждений этого вопроса с другими людьми я пришел к
мнению, что, хотя ipfw является гораздо более мощным и гибким
инструментом, чем фильтры ppp, но все, что он выигрывает в
широте возможностей, проигрывает в легкости настройки. Одной из
причин, по которой я его использую, является то, что я предпочитаю
функции межсетевого экрана, реализуемые в ядре, а не в
пользовательской программе.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Если во внутренней сети я использую такие адреса, как
192.168.0.0, то могу ли я добавить команду типа <literal>$fwcmd add
deny all from any to 192.168.0.0:255.255.0.0 via tun0</literal> к
правилам межсетевого экрана для предотвращения попыток подключиться
извне к машинам во внутренней сети?</para>
</question>
<answer>
<para>Простой ответ выглядит как нет. Причиной этого является то,
что natd выполняет преобразования для <emphasis>всего</emphasis>
трафика, перенаправляемого через устройство tun0. До тех пор, пока
это так, входящие пакеты будут направляться только на динамически
назначенный IP-адрес, а НЕ во внутреннюю сеть. Однако заметьте,
что вы можете добавить, например, правило <literal>$fwcmd add deny
all from 192.168.0.4:255.255.0.0 to any via tun0</literal>, которое
будет ограничивать коммуникации хоста в вашей внутренней сети с
внешним миром через межсетевой экран.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Что-то здесь неправильно. Я следовал вашим указаниям вплоть до
буквы, и теперь доступ заблокирован.</para>
</question>
<answer>
<para>В этом документе предполагается, что вы работаете с программой
<emphasis>ppp</emphasis> уровня пользователя, поэтому предлагаемый
набор правил работает с интерфейсом <devicename>tun0</devicename>,
который соответствует первому соединению, делаемому утилитой
&man.ppp.8; (известной также как <emphasis>user-ppp</emphasis>).
Дополнительные соединения будут использовать устройства
<devicename>tun1</devicename>, <devicename>tun2</devicename> и так
далее.</para>
<para>Вы должны также отметить, что программа &man.pppd.8;
использует другой интерфейс, <devicename>ppp0</devicename>,
поэтому, если вы осуществляете соединение с помощью программы
&man.pppd.8;, то должны заменить <devicename>tun0</devicename> на
<devicename>ppp0</devicename>. Быстрый способ изменить правила для
межсетевого экрана показан ниже. Оригинальный набор правил будет
сохранен в файле <filename>fwrules_tun0</filename>.</para>
<screen>
&prompt.user; <userinput>cd /etc/firewall</userinput>
/etc/firewall&prompt.user; <userinput>su</userinput>
<prompt>Password:</prompt>
/etc/firewall&prompt.root; <userinput>mv fwrules fwrules_tun0</userinput>
/etc/firewall&prompt.root; <userinput>cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules</userinput>
</screen>
<para>Для того, чтобы узнать, используете ли вы &man.ppp.8; или
&man.pppd.8;, вы можете посмотреть вывод команды &man.ifconfig.8;
после установки соединения. Например, для соединения, выполняемого
при помощи программы &man.pppd.8;, вы увидите нечто, похожее на
следующее (показаны только относящиеся к делу строчки):</para>
<screen>
&prompt.user; <userinput>ifconfig</userinput>
<emphasis>(skipped...)</emphasis>
ppp0: flags=<replaceable>8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; mtu 1524</replaceable>
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --&gt; <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xff000000</replaceable>
<emphasis>(skipped...)</emphasis>
</screen>
<para>С другой стороны, для соединений, выполняемых посредством
&man.ppp.8; (<emphasis>user-ppp</emphasis>), вы должны увидеть
нечто вроде следующего:</para>
<screen>
&prompt.user; <userinput>ifconfig</userinput>
<emphasis>(skipped...)</emphasis>
ppp0: flags=<replaceable>8010&lt;POINTOPOINT,MULTICAST&gt; mtu 1500</replaceable>
<emphasis>(skipped...)</emphasis>
tun0: flags=<replaceable>8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; mtu 1524</replaceable>
<emphasis>(IPv6 stuff skipped...)</emphasis>
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --&gt; <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xffffff00</replaceable>
Opened by PID <replaceable>xxxxx</replaceable>
<emphasis>(skipped...)</emphasis>
</screen>
</answer>
</qandaentry>
</qandaset>
</sect1>
</article>

View file

@ -0,0 +1,26 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/diskless-x/Makefile,v 1.2 2001/07/25 10:26:32 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER=andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,367 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/diskless-x/article.sgml,v 1.2 2001/06/30 11:04:39 phantom Exp $
Original revision: 1.4
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article>
<articleinfo>
<title>Бездисковый X-сервер: руководство по настройке</title>
<authorgroup>
<author>
<firstname>Jerry</firstname>
<surname>Kendall</surname>
<affiliation>
<address>
<email>jerry@kcis.com</email>
</address>
</affiliation>
</author></authorgroup>
<pubdate>28 декабря 1996</pubdate>
<copyright>
<year>1996</year>
<holder>Jerry Kendall</holder>
</copyright>
<abstract>
<para>С помощью нескольких друзей из списка рассылки FreeBSD-hackers я
смог настроить бездисковый X-терминал. Создание X-терминала,
во-первых, требует сначала настройки бездисковой системы с минимальным
набором утилит, доступных через NFS. Те же самые шаги были применены
для создания двух разных бездисковых систем. Первая из них была
<hostid role="fqdn">altair.kcis.com</hostid>. Бездисковый X-терминал,
который работал на моей старой машине 386DX-40. На ней был диск
объемом 340 мегабайт, но я не хотел его менять. Так что машина
загружалась с <hostid role="fqdn">antares.kcis.com</hostid> по сети
Ethernet. Второй системой является 486DX2-66. Я настроил (полностью)
бездисковую систему FreeBSD, которая не использует локальный диск.
Сервером в этом случае выступает Sun 670MP под управлением SunOS 4.1.3.
В обоих случаях требовалась одна и та же начальная настройка.</para>
<para>Я уверен, что к этому есть что добавить. Пожалуйста, присылайте
мне любые замечания.</para>
</abstract>
</articleinfo>
<sect1>
<title>Создание загрузочной дискеты (на бездисковой системе)</title>
<para>Так как сетевые начальные загрузчики не будут работать с некоторыми
резидентными (TSR) и прочими программами, используемыми в MS-DOS, то
лучше создать отдельную загрузочную дискету, или, если вы можете, создать
меню MS-DOS, которое будет (при помощи файлов
<filename>config.sys</filename>/<filename>autoexec.bat</filename>)
спрашивать, какую конфигурацию следует загрузить при запуске системы.
Я использовал последний метод и он прекрасно работает. Мое меню MS-DOS
(6.x) приводится ниже.</para>
<example>
<title><filename>config.sys</filename></title>
<programlisting>[menu]
menuitem=normal, normal
menuitem=unix, unix
[normal]
....
normal config.sys stuff
...
[unix]</programlisting>
</example>
<example>
<title><filename>autoexec.bat</filename></title>
<programlisting>@ECHO OFF
goto %config%
:normal
...
normal autoexec.bat stuff
...
goto end
:unix
cd \netboot
nb8390.com
:end</programlisting>
</example>
</sect1>
<sect1>
<title>Получение программ для сетевой загрузки (на сервере)</title>
<para>Откомпилируйте программы 'net-boot', расположенные в каталоге
<filename>/usr/src/sys/i386/boot/netboot</filename>. Вы должны прочесть
замечания в начале файла <filename>Makefile</filename>. Измените
настройки, как это нужно. Сделайте резервную копию оригинала на всякий
случай. Когда построение будет закончено, должно получиться 2 выполнимых
файла для MS-DOS, <filename>nb8390.com</filename> и
<filename>nb3c509.com</filename>. Одна из этих программ и будет тем, что
вам нужно запустить на бездисковом сервере. Она будет загружать ядро
с сервера. На этом этапе поместите обе программы на загрузочную дискету
MS-DOS, созданную ранее.</para>
</sect1>
<sect1>
<title>Определите, какую программу нужно запускать (на бездисковой
системе)</title>
<para>Если вы знаете, какой набор микросхем используется в вашем адаптере
Ethernet, это легко. Если у вас используется набор микросхем NS8390 или
другой на ее основе, то нужно использовать
<filename>nb8390.com</filename>. Если у вас используется набор микросхем
на основе 3Com 509, то используйте программу загрузки
<filename>nb3C509.com</filename>. Если вы не уверены в том, что у вас
установлено, попробуйте использовать любой, и если он выдаст сообщение
<errorname>No adapter found</errorname>, попробуйте другой. Кроме этого,
вам ничего не остается делать.</para>
</sect1>
<sect1>
<title>Загрузка по сети</title>
<para>Загрузите бездисковую систему без каких-либо файлов
config.sys/autoexec.bat. Попробуйте запустить загрузочную программу для
вашего адаптера Ethernet.</para>
<para>Мой адаптер Ethernet работает на наборе WD8013 в 16-разрядном режиме,
так что я запускаю <filename>nb8390.com</filename></para>
<screen>
<prompt>C:&gt;</prompt> <userinput>cd \netboot</userinput>
<prompt>C:&gt</prompt> <userinput>nb8390</userinput>
<prompt>Boot from Network (Y/N) ?</prompt> <userinput>Y</userinput>
BOOTP/TFTP/NFS bootstrap loader ESC for menu
Searching for adapter..
WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66
Searching for server...</screen>
<para>Теперь моя бездисковая система пытается найти машину, которая
выступает в качестве сервера загрузки. Запомните строку
<literal>addr</literal> выше, позже она вам понадобится. Перезагрузите
бездисковую систему и измените ваши файлы <filename>config.sys</filename>
и <filename>autoexec.bat</filename>, чтобы они выполняли эти действия
автоматически. Может быть, в меню. Если вы запускали
<command>nb3c509.com</command>, а не <command>nb8390.com</command>, то
выводимые сообщения будут точно такими же. Если вы получили сообщение
<errorname>No adapter found</errorname> после <literal>Searching for
adapter...</literal>, проверьте правильность задания параметров времени
компиляции в файле <filename>Makefile</filename>.</para>
</sect1>
<sect1>
<title>Настройка возможности системам загружаться по сети (на
сервере)</title>
<para>Проверьте, что в файле <filename>/etc/inetd.conf</filename> имеются
записи для tftp и bootps. Ниже показаны мои записи:</para>
<programlisting>
tftp dgram udp wait nobody /usr/libexec/tftpd tftpd /tftpboot
#
# Additions by who ever you are
bootps dgram udp wait root /usr/libexec/bootpd bootpd /etc/bootptab
</programlisting>
<para>Если вы изменили файл <filename>/etc/inetd.conf</filename>, то
пошлите программе inetd сигнал <literal>HUP</literal>. Для этого
найдите ID процесса inetd командой <command>ps -ax | grep inetd | grep -v
grep</command>. После этого пошлите ему сигнал HUP. Это делается
командой <command>kill -HUP &lt;pid&gt;</command>. Это заставит inetd
повторно прочесть свой конфигурационный файл.</para>
<para>Не забыли ли вы строку с <literal>addr</literal> из вывода начального
загрузчика на бездисковой системе? Как вы можете угадать, теперь он вам
требуется.</para>
<para>Добавьте запись в файл <literal>/etc/bootptab</literal> (может быть,
вам потребуется его создать). Она должна иметь следующий вид:</para>
<programlisting>altair:\
:ht=ether:\
:ha=004001432666:\
:sm=255.255.255.0:\
:hn:\
:ds=199.246.76.1:\
:ip=199.246.76.2:\
:gw=199.246.76.1:\
:vm=rfc1048:</programlisting>
<para>Строки имеют такой смысл:</para>
<informaltable frame="none">
<tgroup cols="2">
<tbody>
<row>
<entry><literal>altair</literal></entry>
<entry>название бездисковой системы без доменной части.</entry>
</row>
<row>
<entry><literal>ht=ether</literal></entry>
<entry>тип оборудования 'ethernet'.</entry>
</row>
<row>
<entry><literal>ha=004001432666</literal></entry>
<entry>аппаратный адрес (число, записанное ранее).</entry>
</row>
<row>
<entry><literal>sm=255.255.255.0</literal></entry>
<entry>маска подсети.</entry>
</row>
<row>
<entry><literal>hn</literal></entry>
<entry>указывает серверу посылать клиенту его имя хоста.</entry>
</row>
<row>
<entry><literal>ds=199.246.76.1</literal></entry>
<entry>указывает клиенту расположение сервера имен.</entry>
</row>
<row>
<entry><literal>ip=199.246.76.2</literal></entry>
<entry>указывает клиенту его IP-адрес.</entry>
</row>
<row>
<entry><literal>gw=199.246.76.1</literal></entry>
<entry>указывает клиенту маршрутизатор по умолчанию.</entry>
</row>
<row>
<entry><literal>vm=...</literal></entry>
<entry>просто оставьте это так.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<note>
<para>Проверьте правильность настройки IP-адресов, адреса выше являются
моими.</para>
</note>
<para>Создайте каталог '/tftpboot', в котором будут располагаться
конфигурационные файлы для бездисковых систем, которые будет обслуживать
сервер. Эти файлы будут именоваться 'cfg.&lt;ip&gt;', где &lt;ip&gt;
является IP-адресом бездисковой системы. Конфигурационный файл для
'altair' будет носить название /tftpboot/cfg.199.246.76.2. Его
содержимое:</para>
<programlisting>rootfs 199.246.76.1:/DiskLess/rootfs/altair
hostname altair.kcis.com</programlisting>
<para>Строка <literal>hostname altair.kcis.com</literal> просто указывает
бездисковой системе ее полное доменное имя.</para>
<para>Строка <literal>rootfs 199.246.76.1:/DiskLess/rootfs/altair</literal>
указывает бездисковой системе местоположение ее корневой файловой
системы, монтируемой по протоколу NFS.</para>
<note>
<para>Корневая файловая система, монтируемая через NFS, будет
монтироваться в режиме <emphasis>только для чтения</emphasis>.</para>
</note>
<para>Дерево для бездисковой системы может быть смонтировано повторно с
правом на выполнение операций чтения и записи, если это
потребуется.</para>
<para>Я использую мой никому не нужный 386DX-40 в качестве выделенного
X-терминала.</para>
<para>Дерево для 'altair' имеет такой вид:</para>
<literallayout>/
/bin
/etc
/tmp
/sbin
/dev
/dev/fd
/usr
/var
/var/run</literallayout>
<para>Вот реальный список файлов:</para>
<screen>
-r-xr-xr-x 1 root wheel 779984 Dec 11 23:44 ./kernel
-r-xr-xr-x 1 root bin 299008 Dec 12 00:22 ./bin/sh
-rw-r--r-- 1 root wheel 499 Dec 15 15:54 ./etc/rc
-rw-r--r-- 1 root wheel 1411 Dec 11 23:19 ./etc/ttys
-rw-r--r-- 1 root wheel 157 Dec 15 15:42 ./etc/hosts
-rw-r--r-- 1 root bin 1569 Dec 15 15:26 ./etc/XF86Config.altair
-r-x------ 1 bin bin 151552 Jun 10 1995 ./sbin/init
-r-xr-xr-x 1 bin bin 176128 Jun 10 1995 ./sbin/ifconfig
-r-xr-xr-x 1 bin bin 110592 Jun 10 1995 ./sbin/mount_nfs
-r-xr-xr-x 1 bin bin 135168 Jun 10 1995 ./sbin/reboot
-r-xr-xr-x 1 root bin 73728 Dec 13 22:38 ./sbin/mount
-r-xr-xr-x 1 root wheel 1992 Jun 10 1995 ./dev/MAKEDEV.local
-r-xr-xr-x 1 root wheel 24419 Jun 10 1995 ./dev/MAKEDEV
</screen>
<para>Не забудьте запустить команду <command>MAKEDEV all</command> в
каталоге <filename>dev</filename>.</para>
<para>Мой <filename>/etc/rc</filename> для <hostid>altair</hostid> выглядит
вот так:</para>
<programlisting>#!/bin/sh
#
PATH=/bin:/
export PATH
#
# configure the localhost
/sbin/ifconfig lo0 127.0.0.1
#
# configure the ethernet card
/sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00
#
# mount the root filesystem via NFS
/sbin/mount antares:/DiskLess/rootfs/altair /
#
# mount the /usr filesystem via NFS
/sbin/mount antares:/DiskLess/usr /usr
#
/usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1
#
# Reboot after X exits
/sbin/reboot
#
# We blew up....
exit 1</programlisting>
<para>Приветствуются любые замечания и вопросы.</para>
</sect1>
</article>
<!--
Local Variables:
mode: sgml
sgml-indent-data: t
sgml-omittag: nil
sgml-always-quote-attributes: t
End:
-->

View file

@ -0,0 +1,20 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/explaining-bsd/Makefile,v 1.3 2001/07/06 07:46:47 kappa Exp $
#
# Original revision: 1.1
#
MAINTAINER= kappa@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,621 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/explaining-bsd/article.sgml,v 1.2 2001/06/30 11:05:51 phantom Exp $
Original revision: 1.1
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article>
<articleinfo>
<title>Что такое BSD</title>
<author>
<firstname>Greg</firstname>
<surname>Lehey</surname>
<affiliation>
<address><email>grog@FreeBSD.org</email></address>
</affiliation>
</author>
<abstract>
<para>В мире программ с открытыми исходниками, слово
<quote>Linux</quote> практически стало синонимом слова
<quote>Операционная Система</quote>, хотя это далеко не
единственная <trademark>UNIX</trademark> операционная система,
исходные коды которой доступны широкой публике. Согласно
данным <ulink
url="http://www.leb.net/hzo/ioscount/data/r.9904.txt">Internet
Operating System Counter</ulink>, в апреле 1999-го 31,3% всех
подключённых к Internet машин работали под Linux. 14,6%
использовали BSD UNIX. Некоторые из мировых лидеров в области
веб-услуг, например <ulink
url="http://www.yahoo.com">Yahoo!</ulink>, работают под BSD.
Самый загруженный в мире ftp-сервер, <ulink
url="ftp://ftp.cdrom.com">ftp.cdrom.com</ulink>, работает под
BSD и передаёт 1,4 терабайта данных в день. Очевидно, что это
не узкий, специализированный рынок: можно сказать, что BSD --
это тщательно скрываемая тайна.</para>
<para>Так в чём же секрет? Почему известность BSD оставляет
желать лучшего? Эта публикация ставить целью ответить на эти и
другие вопросы.</para>
<para>На протяжении всего текста обращайте внимание на <emphasis>выделенные
</emphasis> отличия BSD от Linux.</para>
</abstract>
</articleinfo>
<sect1>
<title>Что такое BSD?</title>
<para>BSD означает <quote>Berkeley Software Distribution</quote>.
Так называлось программное обеспечение, распространявшееся в
исходных кодах Калифорнийским Университетом в Беркли, которое
сначала представляло из себя дополнения к операционной системе
UNIX компании AT&amp;T. На основе версии 4.4BSD-Lite были
созданы несколько операционных систем с открытыми исходными
кодами. В их состав включены разработки других проектов, среди
которых особо следует выделить Проект GNU. Вот что такое
собственно операционная система BSD:</para>
<itemizedlist>
<listitem>
<para>Ядро BSD, отвечающее за планировку процессов, управление
памятью, симметричную многопроцессорность (SMP), работу с
устройствами и так далее.</para>
<para><emphasis>В отличие от Linux, существует несколько
ядер BSD, отличающихся возможностями.</emphasis></para>
</listitem>
<listitem>
<para>Библиотека C, основной системный интерфейс
программирования.</para>
<para><emphasis>Библиотека C в BSD основывается на коде из
Беркли, а не из Проекта GNU.</emphasis></para>
</listitem>
<listitem>
<para>Оболочки, файловые утилиты, компиляторы, редакторы
связей и другие утилиты пользователя.</para>
<para><emphasis>Некоторые из них базируются на коде GNU, а
некоторые -- нет.</emphasis></para>
</listitem>
<listitem>
<para>Система X Window, отвечающая за графический интерфейс.</para>
<para>Система X Window, которая используется в большинстве
версий BSD, разрабатывается проектом <ulink
url="http://www.XFree86.org/">XFree86</ulink>. Это тот же
самый код, что и в Linux. BSD, как правило, не делает упор
на какую-то специфическую <quote>оболочку</quote>, например
GNOME или KDE, хотя они конечно доступны.</para>
</listitem>
<listitem>
<para>Множество разных других прикладных и системных программ.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1>
<title>Что, настоящий UNIX?</title>
<para>Операционные системы BSD не являются клонами друг друга.
Они лишь потомки общего предка, ОС UNIX от AT&amp;T
Research, которая также дала начало современной ОС UNIX System
V. Это факт может удивить, если вспомнить, что AT&amp;T никогда
не открывала исходные коды своих разработок.</para>
<para>Действительно, UNIX никогда не был программным обеспечением
с открытыми исходниками, и в законном смысле BSD определённо
<emphasis>НЕ</emphasis> UNIX. Но с другой стороны, в AT&amp;T
активно использовали чужие разработки, например программное
обеспечение, разрабатываемое Группой по Исследованиям в области
Информатики (CSRG) Калифорнийского Университета в Беркли. С
1976 CSRG выпускала свой код на магнитных лентах под названием
<emphasis>Berkely Software Distribution</emphasis>, сокращённо
<emphasis>BSD</emphasis>.</para>
<para>Изначально дистрибутивы BSD представляли собой наборы
пользовательских программ, и так было до тех пор, пока CSRG не
заключила контракт с Агентством по Перспективным Проектам при
Министерстве Обороны США (DARPA). Целью контракта было
обновление коммуникационных протоколов, на которых держалась
компьютерная сеть агентства -- ARPANET. Новое семейство протоколов
получило имя <emphasis>Internet Protocols</emphasis> или
<emphasis>TCP/IP</emphasis>, по названиям двух основных
протоколов. Их первая широко известная реализация была выпущена
в составе 4.2BSD в 1982 году.</para>
<para>В течение восьмидесятых годов образовалось несколько
компаний по производству рабочих станций. Многие из них
предпочли купить лицензию на UNIX, нежели разрабатывать своё ПО
с нуля. Следует отметить компанию Sun, которая поступила именно
таким образом и на основе 4.2BSD выпустила свою операционную
систему SunOS. Когда AT&amp;T тоже решила заняться коммерческой
продажей своей ОС UNIX, появилась на свет несколько аскетичная
реализация под названием System III, за которой в скором времени
последовала System V. Интересно, что эти версии не содержали в
себе собственной поддержки работы в сети и использовали код
BSD, в том числе реализацию TCP/IP и набор утилит, среди которых
следует выделить оболочку <emphasis>csh</emphasis> и текстовый
редактор <emphasis>vi</emphasis>. Все эти
<quote>добавки</quote> совместно получили название
<emphasis>Berkely Extensions</emphasis>.</para>
<para>Дистрибутив BSD содержал код, принадлежавший AT&amp;T, и,
следовательно, требовал лицензии. К 1990 году финансирование
CSRG прекратилось, и группа была распущена. Кое-кто из бывших
членов группы решил опубликовать код BSD отдельно от закрытого
кода AT&amp;T. В концов концов это удалось, и так появилась на
свет версия <emphasis>Networking Tape 2</emphasis> или
<emphasis>Net/2</emphasis>. Net/2 не была законченной, цельной
операционной системой: около 20% кода ядра отсутствовало. Один
из членов CSRG, William F. Jolitz, дописал недостающий код и
опубликовал результат в начале 1992 года под именем
<emphasis>386BSD</emphasis>. В то же самое время другая группа
бывших членов CSRG организовала коммерческую компанию <ulink
url="http://www.bsdi.com">Berkeley Software Design Inc.</ulink>
и выпустила бета-версию операционной системы <ulink
url="http://www.bsdi.com">BSD/386</ulink>, которая базировалась
на том же самом коде. Потом это название было изменено на
BSD/OS.</para>
<para>386BSD так никогда и не стала полноценной операционной
системой. Зато в 1993 году из неё выделились два проекта: <ulink
url="http://www.NetBSD.org">NetBSD</ulink> и <ulink
url="http://www.FreeBSD.org">FreeBSD</ulink>. Изначально
разработчики разделились на два лагеря из-за расхождений во
мнениях относительно того, сколько же ещё можно ждать улучшений
в 386BSD. В начале года образовалась NetBSD, а первая версия
FreeBSD была готова только к его концу. Время шло, и
технические различия возрастали. В добавок, проекты поставили
перед собой разные цели, как будет показано ниже. В 1996 году
от NetBSD отмежевался ещё один проект -- <ulink
url="http://www.OpenBSD.org">OpenBSD</ulink>.</para>
</sect1>
<sect1>
<title>Почему BSD недостаточно известна?</title>
<para>Действительно, существует ряд причин этому недоразумению:</para>
<orderedlist>
<listitem>
<para>Разработчики BSD часто больше заинтересованы в качестве
своего кода и заняты его <quote>шлифовкой</quote>, а не
рекламой.</para>
</listitem>
<listitem>
<para>По большому счёту Linux своей популярностью обязан
прежде всего внешним по отношению к проекту факторам,
например средствам массовой информации и компаниям, которые
решили сделать бизнес на предоставлении услуг пользователям
Linux.</para>
</listitem>
<listitem>
<para>Разработчики BSD, как правило, более опытны, чем
разработчики Linux, и в силу этого часто уделяют меньше
внимания облегчению жизни простым пользователям. Новичок
чувствует себя более комфортно в среде Linux.</para>
</listitem>
<listitem>
<para>В 1992 году компания AT&amp;T подала в суд на <ulink
url="http://www.bsdi.com">BSDI</ulink>, компанию-поставщика
ОС BSD/386. Основным пунктом обвинения было то, что BSD/386
содержала в себе закрытый код, принадлежавший AT&amp;T.
Дело вроде бы уладили за пределами суда в 1994-ом, но целая
серия вторичных тяжб и по сей день отравляет жизнь многим
людям. Совсем недавно, в марте 2000, в Internet была
опубликована статья, утверждавшая, что судебное
разбирательство окончательно завершено (<quote>recently
settled</quote>).</para>
<para>В результате разбирательства прояснился вопрос с
названиями: если в 80-х годах BSD была известна под именем
<quote>BSD UNIX</quote>, то с исключением последних следов
кода, принадлежавшего AT&amp;T, BSD потеряла право
называться UNIX-ом. Вы можете заметить этот факт по
изменившимся заглавиям книг: <quote>операционная система
4.3BSD UNIX</quote> и <quote>операционная система
4.4BSD</quote>.</para> </listitem>
<listitem>
<para>Существует мнение, что проекты BSD сильно отличаются и, в
добавок, <quote>воюют</quote> между собой. <ulink
url="http://interactive.wsj.com/bin/login?Tag=/&amp;URI=/archive/retrieve.cgi%253Fid%253DSB952470579348918651.djm&">Статья
в Wall Street Journal</ulink> называет это
<quote>балканизацией</quote> среди проектов BSD. Можно
утверждать, что такое мнение, как и описанная судебная
тяжба, основывается прежде всего на событиях давно минувших
дней.</para>
</listitem>
</orderedlist>
</sect1>
<sect1>
<title>Сравнение BSD и Linux</title>
<para>В чём заключается главная разница, к примеру, между
Debian Linux и FreeBSD? Для среднего пользователя она на
удивление мала: оба продукта представляют собой UNIX-подобные
операционные системы. Оба продукта разрабатываются на
некоммерческой основе (это не относится к некоторым другим
дистрибутивам Linux). В этом разделе мы рассмотрим BSD в
сравнении с Linux. Всё сказанное в основном будет касаться
FreeBSD, которой принадлежит около 80% всех инсталляций BSD в
мире, хотя различия с NetBSD и OpenBSD в рамках предмета данной
статьи незначительны.</para>
<sect2>
<title>Кому принадлежит BSD?</title>
<para>Нельзя сказать, что какой-то конкретный человек или
корпорация владеет BSD. Разработка и распространение ведутся
группой высококвалифицированных и преданных проекту
специалистов со всего мира. Некоторые компоненты BSD
представляют собой отдельные Open Source проекты со своими
коллективами разработчиков.</para>
</sect2>
<sect2>
<title>Как выглядит процесс разработки и обновления BSD?</title>
<para>Ядра BSD используют Open Source модель разработки. Каждый
проект поддерживает публично доступное <emphasis>дерево
исходников</emphasis> с помощью <ulink
url="http://www.sourcegear.com/CVS">Concurrent Versions
System</ulink> (CVS). Это дерево содержит абсолютно весь
исходный код проекта, а также документацию и вспомогательные
файлы. CVS позволяет пользователям получить копию дерева
любой версии системы.</para>
<para>Огромное число людей со всего мира участвуют в
совершенствовании BSD. Все они разделены на три
группы:</para>
<itemizedlist>
<listitem>
<para><emphasis>Контрибьюторы (contributors)</emphasis>
пишут код или документацию. Они не могут добавлять или
изменять код непосредственно в дереве исходников проекта.
Это привилегия особым образом зарегистрированных
разработчиков, или <emphasis>коммиттеров
(committers)</emphasis>, которые просматривают и тестируют
присылаемый им код и включают его в дерево.</para>
</listitem>
<listitem>
<para><emphasis>Коммиттеры</emphasis> -- это группа
разработчиков, которые имеют доступ на запись в дерево
исходных кодов проекта. Чтобы стать коммиттером, человек
должен проявить себя в той области, в которой он хочет
работать.</para>
<para>Каждый коммиттер по своему собственному усмотрению решает,
нужно ли ему подтверждение правильности планируемых
изменений от других разработчиков или нет. В общем
случае опытный коммиттер может вносить очевидно выгодные
изменения ни с кем не советуясь. К примеру, коммиттер
проекта документации может исправлять опечатки или
грамматические ошибки в документах без предварительного
согласования. Напротив, далеко идущие или просто сложные
изменения настоятельно рекомендуется представлять к
обсуждению перед окончательным внесением в дерево. Бывают
крайние случаи, когда член Core Team, выполняющий функцию
архитектора проекта, может санкционировать немедленную
отмену или <emphasis>откат (backing out)</emphasis>
каких-то изменений в дереве. Все коммиттеры обязательно
получают уведомление о каждом изменении в дереве по
электронной почте, так что их невозможно сохранить в
тайне.</para>
</listitem>
<listitem>
<para>В проектах FreeBSD и NetBSD существует такое понятие
как <emphasis>Core team</emphasis> -- группа людей,
занимающихся управлением деятельностью других
разработчиков. Их роль, права и обязанности не всегда
чётко определены. Необязательно (хотя в порядке вещей)
быть коммиттером для того, чтобы входить в состав Core
Team. Правила, которым следует Core Team, различаются
между проектами, но в общем случае члены Core Team
определяют общее направление развития системы в большей
степени, чем все остальные разработчики.</para>
</listitem>
</itemizedlist>
<para>Такое положение вещей отличается от принятого в Linux:</para>
<orderedlist>
<listitem>
<para>Не существует человека, который бы контролировал
содержимое системы. На практике значение этого отличия
оказывается переоценённым, так как Главный Архитектор
может всегда потребовать откат изменений. Ко всему
прочему, в проекте Linux на современном этапе изменения в
код вносятся тоже не одним, а несколькими людьми.</para>
</listitem>
<listitem>
<para>С другой стороны, <emphasis>существует</emphasis>
центральное хранилище (repository), откуда можно получить
полный код всей системы, причём как современных, так и
предыдущих версий.</para>
</listitem>
<listitem>
<para>Проекты BSD являются цельными <quote>Операционными
Системами</quote>, а не просто ядрами. Это различие тоже
иногда переоценивают: ни BSD, ни Linux не представляют
ценности без приложений, а они порой одни и те же в обеих
средах.</para>
</listitem>
<listitem>
<para>В результате формализованной процедуры поддержки
единого дерева исходников в CVS процесс разработки BSD
является полностью открытым, и мы получаем возможность
доступа к любой версии системы по номеру или по дате. CVS
также очень хорошо подходит для последовательных изменений
в коде: к примеру, хранилище кода FreeBSD обновляется
около ста раз за день, и большинство этих изменений весьма
малы и незначительны в отдельности друг от друга.</para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>Версии BSD</title>
<para>Каждый проект BSD предоставляет миру три различных варианта
системы. Как и в Linux, версиям присваиваются номера,
например 1.4.1 или 3.5. В добавок, номер версии имеет суффикс
-- обозначение варианта, которое указывает на цели той или
иной версии.</para>
<orderedlist>
<listitem>
<para>Версия для разработчиков носит название
<emphasis>CURRENT</emphasis>. FreeBSD присваивает ей и
номер, например FreeBSD 5.0-CURRENT. NetBSD использует
чуть-чуть другую схему наименований и добавляет к номеру
однобуквенный суффикс, обозначающий изменения во
внутренних интерфейсах. Пример: NetBSD 1.4.3G. OpenBSD не
нумерует разрабатываемую версию
(<quote>OpenBSD-current</quote>). Все новые разработки
производятся именно на этой <quote>ветке</quote> (branch)
системы.</para>
</listitem>
<listitem>
<para>Через определённые интервалы от 3 до 6 месяцев проект
выпускает версию <emphasis>RELEASE</emphasis>, которая
распространяется на CD-ROM и доступна для скачивания по
ftp. Примерами таких версий могут служить OpenBSD
2.6-RELEASE и NetBSD 1.4-RELEASE. Этот вариант
предназначен для конечных пользователей. NetBSD также
предоставляет так называемые <emphasis>исправленные релизы
(patch releases)</emphasis>, обозначаемые третьей цифрой в
номере, например NetBSD 1.4.2.</para>
</listitem>
<listitem>
<para>По мере обнаружения ошибок в версии RELEASE
необходимые исправления вносятся в дерево CVS.
Получающаяся система в проекте FreeBSD носит название
<emphasis>STABLE</emphasis>, а в NetBSD и OpenBSD
продолжает называться RELEASE. Некоторые мелкие улучшения
тоже иногда вносятся в эту версию после продолжительного
периода тестирования в CURRENT.</para>
</listitem>
</orderedlist>
<para><emphasis>Linux, напротив, поддерживает два различных
дерева исходников, которые называются соответственно
стабильной версией и версией для разработчиков. Стабильные
версии имеют чётный вторичный номер, например 2.0, 2.2 или
2.4. Версии для разработчиков используют нечётные номера,
такие как 2.1, 2.3 или 2.5. Во обоих случаях, к двойному
номеру версии добавляется ещё одно число, указывающее на
конкретный релиз. Стоит также отметить, что каждый поставщик
предоставляет свой собственный вариант пользовательских
программ (userland), так что имя дистрибутива тоже имеет
значение. Естественно, что поставщики нумеруют свои изделия
каждый по-своему, и, таким образом, мы получаем что-то вроде
<quote>TurboLinux 6.0 с ядром 2.2.14</quote>.</emphasis></para>
</sect2>
<sect2>
<title>Какие существуют варианты BSD?</title>
<para>В отличие от многочисленных дистрибутивов Linux, в мире
существует лишь три BSD проекта с открытыми исходными кодами.
Каждый из них поддерживает своё собственное дерево исходников
и своё собственное ядро. На практике однако оказывается,
что пользовательские части (userland) различных BSD отличаются
гораздо меньше, чем у разных дистрибутивов Linux.</para>
<para>Цели каждого из проектов не поддаются чёткой формулировке.
Различия между ними весьма субъективны. В основном,</para>
<itemizedlist>
<listitem>
<para>проект FreeBSD нацелен на повышение производительности
и простоту в использовании конечными пользователями.
FreeBSD очень ценят в среде веб-хостеров. Эта ОС работает
на Intel-совместимых платформах, а также на платформе
Alpha фирмы Compaq. Число пользователей FreeBSD
значительно превышает число пользователей других проектов
BSD.</para>
</listitem>
<listitem>
<para>проект NetBSD ставит целью максимальную мобильность
(или портабельность) кода: девиз <quote>конечно NetBSD
работает на этом</quote>. NetBSD поддерживает машины от
крошечных палмтопов до огромных серверов и использовалась
NASA в космических миссиях. Это хороший выбор для старой
не-Intel аппаратуры.</para>
</listitem>
<listitem>
<para>проект OpenBSD нацелен на безопасность и
<quote>чистоту</quote> кода. С помощью комбинирования
концепций открытых исходников и скрупулёзного анализа кода
проект демонстрирует чудеса корректности работы системы. В
силу названных причин совершенно естественно, что OpenBSD
выбирают организации, для которых очень важна защита
информации, например банки, фондовые биржи и различные
департаменты правительства США. Также как и NetBSD,
проект поддерживает целый ряд аппаратных платформ.</para>
</listitem>
</itemizedlist>
<para>Следует упомянуть ещё две операционных системы BSD,
которые не предоставляют публичного доступа к своим исходным
кодам. Это BSD/OS компании BSDI и Mac OS X компании Apple.</para>
<itemizedlist>
<listitem>
<para>BSD/OS является самым старым из потомков 4.4BSD.
Исходный код не доступен широкой публике, хотя лицензия на
него стоит относительно немного. BSD/OS во многом похожа
на FreeBSD.</para>
</listitem>
<listitem>
<para><ulink url="http://www.apple.com/macosx/server/">Mac OS
X</ulink> -- это самая последняя версия операционной
системы для линейки компьютеров Macintosh фирмы <ulink
url="http://www.apple.com">Apple Computer Inc</ulink>.
Исходный код ядра Mac OS X распространяется по принципам
Open Source, в отличие от остального кода. Ключевые
разработчики Mac OS X имеют доступ на запись в хранилище
проекта FreeBSD.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>В чём отличие между лицензией BSD и Общественной
Лицензией GNU (GPL)?</title>
<para>Linux распространяется на условиях лицензии
<ulink url="http://www.fsf.org/copyleft/gpl.html">GNU General
Public License</ulink> (GPL), русский перевод которой тоже
<ulink
url="http://www.gnu.org/copyleft/copyleft.ru.html">существует</ulink>.
Эта лицензия имеет целью уничтожить программное обеспечение с
закрытым исходным кодом. В частности, любое ПО, базирующееся
на продукте, выпущенном на условиях лицензии GPL, тоже должно
поставляться с исходными кодами по первому требованию.
<ulink
url="http://www.opensource.org/licenses/bsd-license.html">Лицензия
BSD</ulink> не накладывает таких жёстких ограничений:
разрешается распространение программного обеспечения в
двоичном виде (binary-only). Этот факт привлекает
разработчиков встроенных (embedded) приложений.</para>
</sect2>
<sect2>
<title>Что ещё следует знать?</title>
<para>То обстоятельство, что приложений для BSD существует
меньше, чем для Linux, вынудило разработчиков BSD позаботиться
о создании дополнительной совместимости с Linux, которая
позволяет запускать программы для Linux на компьютере,
работающем под BSD. Программный пакет, обеспечивающий
совместимость, включает в себя как ядерную реализацию
системных вызовов Linux, так и разнообразные файлы,
необходимые программам, скомпилированным для Linux, например
библиотеку C. Разница в скорости выполнения Linux-приложений
на машине с Linux и на такой же машине с BSD незаметна.</para>
<para>Принцип <quote>вся система от одного поставщика</quote>,
используемый в BSD, приводит к упрощению процедур обновления
системы по сравнению с многими дистрибутивами Linux. BSD
предоставляет специальные модули совместимости с устаревшими
версиями системных библиотек, и таким образом делает возможным
запуск откомпилированных несколько лет назад программ на
обновлённой системе.</para>
</sect2>
<sect2>
<title>Что же выбрать, BSD или Linux?</title>
<para>Во что выливается всё вышесказанное на практике? Кому
предназначена BSD, и кому -- Linux?</para>
<para>Это действительно очень сложный вопрос. Приведём несколько
советов, которые призваны помочь Вам с выбором:</para>
<itemizedlist>
<listitem>
<para><quote>Не тронь, пока работает</quote>: если Вы уже
успешно используете какую-нибудь Open Source ОС, и она Вас
устраивает, то пожалуй не стоит ничего менять.</para>
</listitem>
<listitem>
<para>Системы BSD, в особенности FreeBSD, могут
демонстрировать большую по сравнению с Linux
производительность. Но это вовсе не универсальное
правило. Во многих случаях эта разница не заметна, если
вообще есть. Иногда Linux может работать лучше, чем
FreeBSD.</para>
</listitem>
<listitem>
<para>В общем случае, у систем BSD очень хорошая репутация,
когда дело касается надёжности. Это, в основном, связано
с более <quote>зрелой</quote> базой исходных кодов.</para>
</listitem>
<listitem>
<para>Лицензия BSD иногда может быть более привлекательной,
нежели GPL.</para>
</listitem>
<listitem>
<para>BSD может выполнять код для Linux, а обратное неверно.
В результате мы имеем большее количество прикладного
программного обеспечения для BSD, чем для Linux.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Кто предоставляет техническую поддержку, обслуживание и
обучение для систем BSD?</title>
<para>Компания BSDI всегда поддерживала BSD/OS, а недавно они
объявили о наличии контрактов на техническую поддержку
FreeBSD.</para>
<para>Также, каждый из проектов постоянно обновляет список
консультантов, которые оказывают поддержку за отдельную плату:
<ulink
url="http://www.FreeBSD.org/commercial/consulting_bycat.html">FreeBSD</ulink>,
<ulink
url="http://www.NetBSD.org/gallery/consultants.html">NetBSD</ulink>,
and <ulink
url="http://www.OpenBSD.org/support.html">OpenBSD</ulink>.</para>
</sect2>
</sect1>
</article>

View file

@ -0,0 +1,26 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/fonts/Makefile,v 1.2 2001/07/25 10:26:32 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER=andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,26 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/formatting-media/Makefile,v 1.2 2001/07/25 10:26:32 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER=andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,664 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/formatting-media/article.sgml,v 1.3 2001/07/25 10:28:38 phantom Exp $
Original revision: 1.16
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article>
<articleinfo>
<title>Форматирование носителей для использования с FreeBSD</title>
<subtitle>Учебное пособие</subtitle>
<authorgroup>
<author>
<firstname>Doug</firstname>
<surname>White</surname>
<affiliation>
<address>
<email>dwhite@resnet.uoregon.edu</email>
</address>
</affiliation>
</author>
</authorgroup>
<pubdate>Март 1997</pubdate>
<!--
<para>Перевод на русский язык: Андрей Захватов
(<email>andy@FreeBSD.org</email>)</para>
-->
<abstract>
<para>Этот документ описывает, как разбить на слайсы, разделы и
отформатировать дисковые и подобные им устройства для использования с
FreeBSD. Приводимые примеры были протестированы во FreeBSD 2.2 и
должны работать и в других релизах. Текст был дополнен для FreeBSD
версии 4.</para>
</abstract>
</articleinfo>
<sect1>
<title>Введение и определения</title>
<sect2>
<title>Обзор</title>
<para>Успешное выполнение добавления дисков в существующую систему
является признаком опытности системного администратора. Разбиение на
слайсы, разделы и добавление дисков требуют тщательности в подборе
команд и их параметров. Одно неверное нажатие, и все содержимое
диска может исчезнуть за считанные секунды. Этот документ был написан
в попытке упростить этот процесс и избежать ошибок. К счастью,
усовершенствования в имеющихся инструментах (в частности, sysinstall)
весьма упростили этот процесс в последних релизах FreeBSD.</para>
<para>Существуют два режима форматирования диска:</para>
<itemizedlist>
<listitem>
<para><firstterm>режим обеспечения совместимости</firstterm>:
Подготовка диска так, чтобы он имел таблицу слайсов, которую
можно использовать с другими операционными системами.</para>
</listitem>
<listitem>
<para><firstterm>режим эксклюзивного использования</firstterm>,
иногда называемый <firstterm>опасным режимом</firstterm>:
Форматирование диска без таблицы слайсов. Это упрощает процесс
добавления дисков, но другие операционные системы не смогут
работать с диском. Термин <emphasis>опасный</emphasis> относится к
опасности не распознавания системой диска, отформатированного этим
способом.</para>
</listitem>
</itemizedlist>
<para>В большинстве случаев эксклюзивный режим является самым простым в
использовании с существующими системами, так как новый диск, как
правило, предназначен исключительно для FreeBSD. Однако режим
обеспечения совместимости дает максимум возможностей в будущих
установках ценой большей сложности.</para>
<para>Кроме выбора режима, имеются два способа разбиения диска на слайсы.
Один заключается в использовании инструмента установки системы
<command>/stand/sysinstall</command>. 2.1.7-RELEASE и более поздние
версии <command>sysinstall</command> содержат код для облегчения
установки дисков во время обычных системных работ, в основном давая
доступ к редактору разделов и разметке диска и возможности записать
изменения, причем будет обновляться информация только на выбранном
диске и слайсе, не затрагивая другие диски. Другой метод состоит в
ручном запуске утилит администратором из командной строки. Для режима
эксклюзивного использования используются только три или четыре команды,
хотя <command>sysinstall</command> требует некоторых ухищрений.</para>
</sect2>
<sect2>
<title>Определения</title>
<para>За века существования управления дисками в UNIX было придумано
много новых названий для старых вещей. В следующем словарике даны
определения терминов, используемых в этом документе и (надеемся) во
FreeBSD вообще.</para>
<!-- I'm tempted to use GLOSSARY here but will resort to a list for
now. -->
<itemizedlist>
<listitem>
<para>режим обеспечения совместимости: Разбиение диска так, что на
нем присутствует таблица слайсов, используемая и другими
операционными системами. Противоположен режиму эксклюзивного
использования.</para>
</listitem>
<listitem>
<para>(опасный) режим эксклюзивного использования: Форматирование
диска без использования таблицы слайсов. Это упрощает процесс
добавления дисков, однако другие (не FreeBSD) операционные системы
не смогут распознать диск. Противоположен режиму обеспечения
совместимости.</para>
</listitem>
<listitem>
<para>диск: круглый диск, покрытый магнитным материалом или
материалом с похожими свойствами, раскручиваемый двигателем и
располагающийся под головками. Данные хранятся на диске при помощи
изменения магнитного напряжения на диске, что может быть позже
прочтено. Жесткие диски, компакт-диски, магнито-оптические и
съемные носители Zip/Jaz являются примерами дисков.</para>
</listitem>
<listitem>
<para>слайс: Часть диска. На одном диске по стандартам PC может
располагаться до четырех слайсов. Слайсы состоят из
последовательно располагающихся секторов. Информация о слайсах
записывается в <quote>таблицу слайсов</quote>, используемую
системным BIOS для нахождения загрузочных разделов. Таблица
слайсов в терминологии DOS обычно называется таблицей разделов
(Partition Table). Управляется утилитой fdisk.</para>
</listitem>
<listitem>
<para>раздел: Часть слайса. Обычно используется для обозначения
частей слайса FreeBSD на диске. Каждая файловая система и область
подкачки на диске располагаются в разделе. Управляется утилитой
disklabel.</para>
</listitem>
<listitem>
<para>сектор: Самая малая часть диска. Один сектор, как правило,
хранит 512 байт данных.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Предостережения & Ловушки</title>
<para>Подготовка диска не является простым процессом. Весьма возможно
уничтожение содержимого других дисков вашей системы, если не быть
аккуратным.</para>
<para><emphasis>Тщательно проверяйте свою работу.</emphasis> Очень
просто уничтожить информацию не на том диске при работе с этими
командами. Если сомневаетесь, обратитесь к сообщениям, выдаваемым при
загрузке ядра, для определения верного имени устройства.</para>
<para>Излишне говорить, что мы не отвечаем за какую бы то ни было порчу
данных или оборудования, с которыми вы можете столкнуться. Работайте
на свой страх и риск!</para>
</sect2>
<sect2>
<title>Zip, Jaz и другие сменные носители</title>
<para>Сменные диски могут отформатированы точно так же, как обычные
жесткие диски. Для определения параметров диска достаточно подключить
привод к системе и вставить туда диск во время загрузки. Просмотрите
вывод команды <command>dmesg</command> и удостоверьтесь, что в нем
присутствуют ваше устройство и размер диска. Если ядро выдает
<informalexample>
<screen>Can't get the size
</screen>
</informalexample>
то диска в устройстве нет. В таком случае вам нужно перезапустить
машину перед тем, как пытаться отформатировать диски.</para>
</sect2>
</sect1>
<sect1>
<title>Форматирование дисков в режиме эксклюзивного использования</title>
<sect2>
<title>Введение</title>
<para>В этом разделе подробно описано, как сделать диски полностью
предназначенными для FreeBSD. Помните, что иногда диски,
подготовленные для режима эксклюзивного использования, не могут быть
загрузочными в архитектуре PC.</para>
</sect2>
<sect2>
<title>Подготовка дисков в режиме эксклюзивного использования при помощи
утилиты sysinstall</title>
<para><command>/stand/sysinstall</command>, программа установки системы,
в последних версиях была расширена так, что позволяет сделать процесс
подготовки дисков простой задачей. Редакторы fdisk и disklabel,
встроенные в sysinstall, являются инструментами с графическим
пользовательским интерфейсом, устраняющими большинство неясностей при
разбиении дисков. Для версий FreeBSD 2.1.7 и выше это, наверное, самый
простой способ подготовки дисков.</para>
<procedure>
<step>
<para>Запустите sysinstall как пользователь root, набрав
<informalexample>
<screen>
&prompt.root; <userinput>/stand/sysinstall</userinput>
</screen>
</informalexample>
в командной строке.</para>
</step>
<step>
<para>Выберите пункт <command>Index</command>.</para>
</step>
<step>
<para>Выберите пункт <command>Partition</command>.</para>
</step>
<step>
<para>Выберите диск для редактирования с помощью клавиш управления
курсором <keycap>пробела</keycap>.</para>
</step>
<step>
<para>Если вы используете этот диск полностью для FreeBSD, выберите
<command>A</command>.</para>
</step>
<step>
<para>Когда будет выдано сообщение:
<informalexample>
<screen>
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
</screen>
</informalexample>
ответьте <command>No</command>.</para>
</step>
<step>
<para>Когда будет задан вопрос о том, действительно ли вы хотите это
сделать, ответьте <command>Yes</command>.</para>
</step>
<step>
<para>Выберите <command>Write</command>.</para>
</step>
<step>
<para>При выдаче предупреждения Writing on installed systems,
ответьте <command>Yes</command>.</para>
</step>
<step>
<para>Выберите <command>Quit</command> для выхода из редактора FDISK
и нажмите <keycap>ESCAPE</keycap> для возврата в меню Index.</para>
</step>
<step>
<para>Выберите пункт <command>Label</command> из меню Index.</para>
</step>
<step>
<para>Разметьте диск так, как это нужно. Для работы с единственным
разделом нажмите <command>C</command> для создания раздела, примите
размер по умолчанию, установите тип раздела в Filesystem и укажите
точку монтирования (которая не используется).</para>
</step>
<step>
<para>Нажмите <command>W</command>, когда все закончите и захотите
продолжить. Файловая система будет размечена вновь, если вы не
указали противное (для новых разделов вам это делать необходимо!).
Вы получите сообщение об ошибке:
<informalexample>
<screen>Error mounting /mnt/dev/ad2s1e on /mnt/blah : No such file or directory
</screen>
</informalexample>
Проигнорируйте это сообщение.</para>
</step>
<step>
<para>Выйдите по нескольким нажатиям клавиши
<keycap>ESCAPE</keycap>.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Подготовка диска к использованию в эксклюзивном режиме из
командной строки</title>
<para>Выполните следующие команды, заменяя ad2 на имя вашего
диска.</para>
<informalexample>
<screen>
&prompt.root; <userinput>dd if=/dev/zero of=/dev/ad2 count=2</userinput>
&prompt.root; <userinput>disklabel /dev/ad2 | disklabel -B -R -r ad2 /dev/stdin</userinput>
<lineannotation>We only want one partition, so using slice 'c' should be fine:</lineannotation>
&prompt.root; <userinput>newfs /dev/ad2c</userinput>
</screen>
</informalexample>
<para>Если вам нужно отредактировать метку диска для создания нескольких
разделов (например, раздела подкачки), выполните следующее:</para>
<informalexample>
<screen>
&prompt.root; <userinput>dd if=/dev/zero of=/dev/ad2 count=2</userinput>
&prompt.root; <userinput>disklabel /dev/$d > /tmp/label</userinput>
<lineannotation>Edit disklabel to add partitions:</lineannotation>
&prompt.root; <userinput>vi /tmp/label</userinput>
&prompt.root; <userinput>disklabel -B -R -r ad2 /tmp/label</userinput>
<lineannotation>newfs partitions appropriately</lineannotation>
</screen>
</informalexample>
<para>Теперь ваш диск готов к работе.</para>
</sect2>
</sect1>
<sect1>
<title>Создание дисков для использования в режиме совместимости</title>
<sect2>
<title>Введение</title>
<para>При подготовке дисков для использования в эксклюзивном режиме проще
всего воспользоваться командной строкой, но этого делать не следует при
подготовке дисков для использования в режиме совместимости. Утилита
командной строки fdisk требует сложных вычислений и глубокого понимания
устройства таблицы слайсов, что дано не каждому. При подготовке дисков
для использования в режиме совместимости используйте sysinstall.</para>
</sect2>
<sect2>
<title>Подготовка дисков, используемых в режиме совместимости, при помощи
sysinstall</title>
<procedure>
<step>
<para>Запустите sysinstall, работая как пользователь root, набрав
<informalexample>
<screen>&prompt.root; <userinput>/stand/sysinstall</></screen>
</informalexample>
в командной строке.</para>
</step>
<step>
<para>Выберите пункт меню <command>Index</command>.</para>
</step>
<step>
<para>Выберите пункт меню <command>Partition</command>.</para>
</step>
<step>
<para>Выберите диск для работы при помощи клавиш управления курсором
и клавиши <keycap>SPACE</keycap>.</para>
</step>
<step>
<para>Если вы собираетесь использовать для FreeBSD весь диск, нажмите
<command>A</command>.</para>
</step>
<step>
<para>Когда будет выдан вопрос:
<informalexample>
<screen>
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
</screen>
</informalexample>
ответьте <command>yes</command>.</para>
</step>
<step>
<para>Выберите <command>Write</command>.</para>
</step>
<step>
<para>Когда будет выдано диалоговое окно для установки менеджера
загрузки, выберите None при помощи клавиши <keycap>SPACE</keycap>,
а затем нажмите <keycap>ENTER</keycap> для подтверждения.</para>
</step>
<step>
<para>Выберите <command>Quit</command> для выхода из FDISK.</para>
</step>
<step>
<para>После выдачи предупреждения о менеджере загрузки, выберите
<command>None</command> снова.</para>
</step>
<step>
<para>Выберите пункт <command>Label</command> из меню Index.</para>
</step>
<step>
<para>Разметьте диск так, как вам нужно. В случае единственного
раздела примите размер по умолчанию, тип с наличием файловой
системы и точку монтирования (которая не будет
использоваться).</para>
</step>
<step>
<para>Файловая система будет вновь создана, если вы не задали
обратное (эту операцию обязательно нужно делать для новых
разделов!). Вы получите сообщение об ошибке:
<informalexample>
<screen>
Error mounting /mnt/dev/ad2s1e on /mnt/blah : No such file or directory
</screen>
</informalexample>
Проигнорируйте его.</para>
</step>
<step>
<para>Выйдите, последовательно нажимая
<keycap>ESCAPE</keycap>.</para>
</step>
</procedure>
<para>Теперь ваш новый диск готов к использованию.</para>
</sect2>
</sect1>
<sect1>
<title>Другие операции с диском</title>
<sect2>
<title>Добавление пространства для подкачки</title>
<para>При росте системы может расти и требование к объему виртуальной
памяти. Хотя добавление дискового пространства для подкачки в случае
уже имеющихся дисков является очень сложной задачей, можно подготовить
новый диск с дополнительным пространством для подкачки.</para>
<para>Для добавления пространства подкачки при добавлении диска к
системе:</para>
<procedure>
<step>
<para>При разбиении диска на разделы, отредактируйте метку диска,
выделив некоторое объем диска для раздела `b', а остаток
распределив в другие разделы, например, `a' или `e'. Размеры
указываются в блоках по 512 байт.</para>
</step>
<step>
<para>При создании новых файловых систем на диске, НЕ делайте этого
для раздела `c'. Вместо этого выполните создание новых файловых
систем для разделов, не содержащих пространство для
подкачки.</para>
</step>
<step>
<para>Добавьте такую строчку в файл
<filename>/etc/fstab</filename>:</para>
<informalexample>
<programlisting>
/dev/ad0b none swap sw 0 0
</programlisting>
</informalexample>
<para>Замените здесь /dev/ad0b на имя устройства с только что
добавленным пространством.</para>
</step>
<step>
<para>Чтобы сделать пространство для подкачки немедленно доступным,
воспользуйтесь командой <command>swapon</command>.
<informalexample>
<screen>
&prompt.root; <userinput>swapon /dev/da0b</userinput>
swapon: added /dev/da0b as swap space
</screen>
</informalexample>
</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Копирование содержимого дисков</title>
<!-- Should have specific tag -->
<para>Предоставил: Renaud Waldura
(<email>renaud@softway.com</email>) </para>
<para>Для переноса файлов с вашего старого диска на новый, выполните:
<informalexample>
<screen>&prompt.root; <userinput>mount /dev/ad2 /mnt</userinput>
&prompt.root; <userinput>pax -r -w -p e /usr/home /mnt</userinput>
&prompt.root; <userinput>umount /mnt</userinput>
&prompt.root; <userinput>rm -rf /usr/home/*</userinput>
&prompt.root; <userinput>mount /dev/ad2 /usr/home</userinput>
</screen>
</informalexample>
</para>
</sect2>
<sect2>
<title>Объединение дисков с помощью CCD</title>
<para>Команды предоставил: Stan Brown
(<email>stanb@awod.com</email>) </para>
<para>Драйвер CCD (Concatenated Disk Driver) позволяет вам использовать
несколько идентичных дисков как один диск. Объединение дисков может
повысить производительность через распределение операций чтения и
записи между дисками. Обратитесь к страницам справочной системы
&man.ccd.4; и &man.ccdconfig.8; или к <ulink
URL="http://stampede.cs.berkeley.edu/ccd/">домашней странице
CCD</ulink> для получения подробной информации.</para>
<para>Вам больше не нужно компилировать специальное ядро для
использования ccd. Когда вы запускаете команду
<command>ccdconfig</command>, она загрузит соответствующий KLD, если в
ядре нет поддержки CCD.</para>
<para>Вы можете строить объединенные диски в разделах типа
<emphasis>4.2BSD</emphasis>. Если вы хотите использовать весь диск, то
вам все равно нужно создать новый раздел. Например,
<userinput>disklabel -e</userinput> может выдавать:</para>
<informalexample>
<screen>
# size offset fstype [fsize bsize bps/cpg]
c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)
</screen>
</informalexample>
<para>Вы не сможете использовать раздел <emphasis>c</emphasis> для CCD,
так как он имеет тип <emphasis>unused</emphasis>. Вместо этого
создайте новый раздел точно такого же размера, но типа
<emphasis>4.2BSD</emphasis>:</para>
<informalexample>
<screen>
# size offset fstype [fsize bsize bps/cpg]
c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)
<userinput> e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597)</userinput>
</screen>
</informalexample>
<para>Для создания нового CCD выполните следующие команды. Здесь
описано, как объединить три диска; просто добавляйте или убирайте
устройства по мере необходимости. Помните, что объединяемые диски
должны быть <emphasis>идентичными</emphasis>.</para>
<informalexample>
<screen>
&prompt.root; <userinput>cd /dev ; sh MAKDEV ccd0</userinput>
&prompt.root; <userinput>disklabel -r -w da0 auto</userinput>
&prompt.root; <userinput>disklabel -r -w da1 auto</userinput>
&prompt.root; <userinput>disklabel -r -w da2 auto</userinput>
&prompt.root; <userinput>disklabel -e da0</userinput>
<lineannotation>Add partition e with type 4.2BSD</lineannotation>
&prompt.root; <userinput>disklabel -e da1</userinput>
<lineannotation>Add partition e with type 4.2BSD</lineannotation>
&prompt.root; <userinput>disklabel -e da2</userinput>
<lineannotation>Add partition e with type 4.2BSD</lineannotation>
&prompt.root; <userinput>ccdconfig ccd0 273 0 /dev/da0e /dev/da1e /dev/da2e</userinput>
&prompt.root; <userinput>newfs /dev/ccd0c</userinput>
</screen>
</informalexample>
<para>Значение 273 задает размер блока данных. Это число секторов диска,
(каждый по 512 байт) в каждом блоке данных в CCD. Он должен быть равен
по крайней мере 128 kB, и должен быть степенью числа 2.</para>
<para>Теперь вы можете смонтировать и использовать ваш CCD через
устройство /dev/ccd0c.</para>
<para>Более мощной и гибкой альтернативой для CCD является Vinum.
Обратитесь к <ulink URL="http://www.vinumvm.org/">домашней странице
проекта Vinum Project</ulink> для получения подробной
информации.</para>
</sect2>
</sect1>
<sect1>
<title>Благодарности</title>
<para>Автор выражает благодарности тем, кто принимал участие в этом
проекте:</para>
<itemizedlist>
<listitem>
<para>Darryl Okahata (<email>darrylo@hpnmhjw.sr.hp.com</email>) за
понятное описание настройки диска для режима эксклюзивного
использования, которое я постоянно использую в списке рассылки
FreeBSD-questions.</para>
</listitem>
<listitem>
<para>Jordan Hubbard (<email>jkh@FreeBSD.org</email>) за то, что он
сделал sysinstall подходящим инструментом для выполнения таких
работ.</para>
</listitem>
<listitem>
<para>John Fieber (<email>jfieber@indiana.edu</email>) за создание
примеров и предоставление информации о DocBook DTD, на основе чего
написан этот документ.</para>
</listitem>
<listitem>
<para>Greg Lehey (<email>grog@FreeBSD.org</email>) за проверку
моей работы и указания на неточности, а также за поддержку.</para>
</listitem>
</itemizedlist>
</sect1>
</article>

View file

@ -1,5 +1,7 @@
#
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/freebsd-questions/Makefile,v 1.1 2001/03/11 10:39:17 phantom Exp $
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/freebsd-questions/Makefile,v 1.2 2001/07/25 10:26:33 phantom Exp $
#
# Original revision: 1.1
#

View file

@ -1,17 +1,17 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml,v 1.5 2001/07/25 10:26:33 phantom Exp $
Original revision: 1.1
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<!--
The FreeBSD Russian Documentation Project
$FreeBSD: doc/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml,v 1.1 2001/03/11 16:23:11 phantom Exp $
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml,v 1.1 2001/02/24 15:37:32 andy Exp $
Original revision: 1.1
-->
<article>
<articleinfo>
<title>Как работать со списком рассылки FreeBSD-questions c максимальной
@ -26,7 +26,7 @@
</affiliation>
</author>
<pubdate>$FreeBSD: doc/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml,v 1.1 2001/03/11 16:23:11 phantom Exp $</pubdate>
<pubdate>$FreeBSD: doc/en_US.ISO_8859-1/articles/freebsd-questions/article.sgml,v 1.1 2001/02/16 00:22:33 nik Exp $</pubdate>
<abstract>
<para>В этом документе содержится информация, которая будет полезна
@ -112,7 +112,7 @@ subscribe FreeBSD-questions
<para>Когда вы подписывались на список рассылки FreeBSD-questions, вы
получили приглашающее сообщение от
<email>Majordomo@FreeBSD.ORG</email>. В этом сообщении, кроме всего
прочего, вам рассказвывалось о том, как отписаться. Вот типичное
прочего, вам рассказывалось о том, как отписаться. Вот типичное
сообщение:</para>
<literallayout class="monospaced">
@ -210,13 +210,13 @@ you consider the question to be pretty technical.
</listitem>
</orderedlist>
<para>Имеется также некоторое количество других специализиованных списков
<para>Имеется также некоторое количество других специализированных списков
рассылки, например, <literal>FreeBSD-isp</literal>, которые отражают
интересы ISP (Поставщиков Услуг Интернет), работающих со FreeBSD. Если
случилось так, что вы являетесь ISP, это вовсе не значит, что вы
должны автоматически посылать свои вопросы в список рассылки
<literal>FreeBSD-isp</literal>. Здесь также подходит критерий,
указанный выше, и в ваших интересах следовать ему, потому именно так
указанный выше, и в ваших интересах следовать ему, потому что именно так
можно получить результат.</para>
</sect1>
@ -243,7 +243,7 @@ you consider the question to be pretty technical.
<listitem>
<para>Не всякий человек, могущий ответить на вопрос о FreeBSD, читает
все сообщения: обычно читается строка с темой письма и решается,
представляет ли сообщение интерес. То есть в ваших инетересах
представляет ли сообщение интерес. То есть в ваших интересах
указать тему письма. ``FreeBSD problem'' или ``Help'' недостаточно.
Если вы не укажете тему вообще, то многие даже не потрудятся прочесть
сообщение. Если тема сообщения недостаточно конкретна, то люди,
@ -314,7 +314,7 @@ you consider the question to be pretty technical.
может выглядеть немножко глупо, потому что ваши сообщения все равно
будут доставляться, однако многие люди получают несколько сотен
сообщений в день. Зачастую они сортируют входящие сообщения по
теме и дате, и если ваше сообщенне не будет предшествовать первому
теме и дате, и если ваше сообщение не будет предшествовать первому
ответу, то они могут предположить, что оно потерялось и даже не
взглянут на него.</para>
</listitem>
@ -342,7 +342,7 @@ you consider the question to be pretty technical.
<listitem>
<para>В случае любой проблемы, которая <emphasis>может</emphasis>
быть связана с работой оборудования, расскажите о вашем
аппаратном обеспечении. В случае сомнений предположьте, что это,
аппаратном обеспечении. В случае сомнений предположите, что это,
возможно, вина оборудования. Какой тип процессора используется?
Насколько он быстр? Какая материнская плата? Сколько
установлено памяти? Какое периферийное оборудование?</para>
@ -506,7 +506,7 @@ fine, but when I try to reboot the system, I get the message
общем случае ответы <quote>Yeah, me too</quote> сильно не помогут,
хотя есть и исключения, например, когда кто-нибудь описывает свою
проблему и не знает, его ли это ошибка, или что-то не так с
аппартаным или программным обеспечением. Если вы посылаете сообщение
аппаратным или программным обеспечением. Если вы посылаете сообщение
<quote>me too</quote>, включите также относящуюся к делу
информацию.</para>
</listitem>
@ -515,8 +515,8 @@ fine, but when I try to reboot the system, I get the message
<para>Уверены ли вы, что поняли вопрос? Очень часто тот, кто задает
вопрос, путается или не может все хорошо описать. Даже при самом
полном понимании системы легко послать ответ, который не отвечает
на вопрос. Это не помогает: вы делаете того, кто послал вопрос, еще
полее запутавшимся или разочарованным. Если никто больше не
на вопрос. К сожалению, так вы никому не поможете, только ещё больше
запутаете и разочаруете спрашивающего. Если никто больше не
отвечает, или вы не очень уверены, то всегда можете запросить более
подробную информацию.</para>
</listitem>
@ -536,14 +536,15 @@ fine, but when I try to reboot the system, I get the message
сообщений, посланных и отвеченных другими. Если вы пошлете
сообщение, представляющее интерес для всех, минуя список рассылки, то
лишите этих людей их информации. Будьте внимательны при ответе всем;
многие посылают сообщения с сотнями CC-адресатов. Если это ваш
случай, соответственно отбросьте строки Cc:.</para>
многие посылают сообщения с сотнями CC-адресатов. В таких случаях
удалите лишние строки Cc:.</para>
</listitem>
<listitem>
<para>Включите текст из исходного сообщения, который относится к делу.
Усеките его до мимнимума, но не переусердствуйте. Тот, кто не читал
первоначального сообщения, должен понять, о чем идет речь.</para>
<para>Из исходного сообщения включите текст, который относится к делу.
Избегайте излишнего цитирования, но не переусердствуйте. Тот, кто не
читал первоначального сообщения, должен понять, о чём же идёт
речь.</para>
</listitem>
<listitem>
@ -552,14 +553,13 @@ fine, but when I try to reboot the system, I get the message
первоначального текста лучше всего работает вставка символа
<quote><literal>&gt; </literal></quote>. Вставка пробела после
<quote><literal>&gt; </literal></quote> и пустых строк между вашим
текстом и первоначальным текстом сделает результат более
читабельным.</para>
и первоначальным текстами сделает результат более читабельным.</para>
</listitem>
<listitem>
<para>Поместите ваш ответ в правильном месте (после текста, на который
вы отвечаете). Очень трудно читать набор ответов, когда каждый из
них следует перед текстом, на который он отвечает.</para>
них следует перед текстом, к которому относится.</para>
</listitem>
<listitem>
@ -570,21 +570,21 @@ fine, but when I try to reboot the system, I get the message
</listitem>
<listitem>
<para>Если задающий вопрос не следует соглашениям по форматированию
текста (строки слишком длинны, неподходящая строка темы),
<emphasis>пожалуйста</emphasis>, исправьте это. В случае
<para>Если спрашивающий не следует соглашениям по форматированию текста
(слишком длинные строки, неподходящая строка темы),
<emphasis>пожалуйста</emphasis>, исправьте эти ошибки. В случае
некорректной строки темы письма (типа <quote>HELP!!??</quote>)
измените ее на (к примеру) <quote>Re: Difficulties with sync PPP
измените её, например, так: <quote>Re: Difficulties with sync PPP
(was: HELP!!??)</quote>. В таком случае у других людей, пытающихся
отследить обсуждение, будет меньше проблем.</para>
<para>В таких случаях хорошо сказать, что вы сделали и почему, но
постарайтесь не грубить. Если оказывается, что вы не можете
ответить, не скатываясь на грубость, не отвечайте.</para>
постарайтесь не грубить. Если вы чувствуете, что не можете ответить,
не скатываясь на грубость, воздержитесь от ответа вообще.</para>
<para>Если вы хотите ответить на сообщение лишь потому, что оно плохо
оформлено, ответьте только автору, но не в список. Если хотите, то
в ответ можете просто послать ему это сообщение.</para>
в ответ можете просто послать ему эту статью.</para>
</listitem>
</orderedlist>
</sect1>

View file

@ -0,0 +1,20 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/ipsec-must/Makefile,v 1.1 2001/07/09 06:56:28 kappa Exp $
#
# Original revision: 1.1
#
MAINTAINER= kappa@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,367 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/ipsec-must/article.sgml,v 1.4 2001/07/19 08:26:25 phantom Exp $
Original revision: 1.3
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article>
<articleinfo>
<title>Независимое исследование работы IPsec во FreeBSD</title>
<author>
<firstname>David</firstname>
<surname>Honig</surname>
<affiliation>
<address><email>honig@sprynet.com</email></address>
</affiliation>
</author>
<pubdate>3 May 1999</pubdate>
<abstract>
<para>Вы только что установили и настроили IPsec, и оно,
кажется, заработало. Как это можно проверить? Я опишу метод
экспериментальной проверки правильного функционирования
IPsec.</para>
</abstract>
</articleinfo>
<sect1>
<title>Постановка задачи</title>
<para>Для начала предположим, что Вы <link linkend="ipsec-install">
настроили <emphasis>IPsec</emphasis></link>. Как Вы
узнаете, что IPsec <link linkend="caveat">работает</link>?
Несомненно, соединения не будет, если Вы неверно его
сконфигурировали. И оно конечно появится в выводе команды
&man.netstat.1;, когда Вы всё сделаете верно. Но можно ли
как-то подтвердить сам факт функционирования IPsec?</para>
</sect1>
<sect1>
<title>Решение</title>
<para>Для начала немножко криптографической теории:</para>
<orderedlist>
<listitem>
<para>шифрованные данные равномерно распределены по области
определения, то есть каждый символ имеет максимальную
энтропию;</para>
</listitem>
<listitem>
<para><quote>сырые</quote> и несжатые данные как правило
избыточны, то есть их энтропия меньше максимально
возможной.</para>
</listitem>
</orderedlist>
<para>Предположим, что у Вас имеется возможность измерить энтропию
входящего и исходящего трафика на сетевом интерфейсе. В этом
случае Вы сможете легко отличить зашифрованные данные от
открытых, причём даже в том случае, когда часть данных в
<quote>режиме шифрования</quote> передаётся в открытом виде, к
примеру внешние заголовки IP, которые используются для
маршрутизации.</para>
<sect2 id="MUST">
<title>MUST</title>
<para><quote>Универсальный Статистический Тест для Генераторов
Случайных Чисел</quote> Уэли Маурера (Ueli Maurer's Universal
Statistical Test for Random Bit Generators), сокращённо <ulink
url="http://www.geocities.com/SiliconValley/Code/4704/universal.pdf">
<acronym>MUST</acronym></ulink> позволяет быстро измерить
энтропию последовательного набора данных. Используемый
алгоритм похож на алгоритм сжатия. <link linkend="code"> В
приложении</link> приведён исходный код, позволяющий измерять
энтропию последовательных кусков данных размером около
четверти мегабайта.</para>
</sect2>
<sect2 id="tcpdump">
<title>Tcpdump</title>
<para>Ещё нам нужен способ сохранения информации,
проходящей через интерфейс. Программа &man.tcpdump.1;
позволяет сделать это в случае, если Вы <link
linkend="kernel">сконфигурировали своё ядро</link> с
поддержкой <emphasis>Пакетного Фильтра Беркли (Berkeley Packet
Filter)</emphasis>.</para>
<para>Команда
<screen>
<userinput><command>tcpdump</command> -c 4000 -s 10000 -w <replaceable>dumpfile.bin</replaceable></userinput>
</screen>
сохранит 4000 пакетов в файл
<replaceable>dumpfile.bin</replaceable>. В данном примере объём
записываемой информации в каждом пакете не может превышать
10,000 байтов.</para>
</sect2>
</sect1>
<sect1>
<title>Эксперимент</title>
<para>В этом разделе описано, в чём собственно заключается суть
эксперимента.</para>
<procedure>
<step>
<para>Откройте два окна терминала и свяжитесь в одном из них с
каким-нибудь компьютером через канал IPsec, а в другом --- с
обычным, <quote>незащищённым</quote> компьютером.</para>
</step>
<step>
<para>Теперь начните <link linkend="tcpdump">сохранять
пакеты</link>.</para>
</step>
<step>
<para>В <quote>шифрованном</quote> окне запустите команду
&man.yes.1;, которая будет выдавать бесконечный
поток символов <quote>y</quote>. Немножко подождите и
завершите её. Затем переключитесь в обычное окно (не
использующее канал IPsec) и сделайте то же самое.</para>
</step>
<step>
<para>Заключительный этап: запустите <link linkend="code">
MUST</link>, передав ему для обработки только что
сохранённые пакеты через командную строку. Вы должны
увидеть что-то вроде изображённого чуть ниже. Заметьте, что
безопасное соединение имеет 93% (6,7) от ожидаемого значения
(7,18), а обычное соединение --- всего лишь 29%
(2,1).</para>
<screen>
&prompt.user; <userinput>tcpdump -c 4000 -s 10000 -w <replaceable>ipsecdemo.bin</replaceable></userinput>
&prompt.user; <userinput>uliscan <replaceable>ipsecdemo.bin</replaceable></userinput>
Uliscan 21 Dec 98
L=8 256 258560
Measuring file ipsecdemo.bin
Init done
Expected value for L=8 is 7.1836656
6.9396 --------------------------------------------------------
6.6177 -----------------------------------------------------
6.4100 ---------------------------------------------------
2.1101 -----------------
2.0838 -----------------
2.0983 -----------------
</screen>
</step>
</procedure>
</sect1>
<sect1 id="caveat">
<title>Замечание</title>
<para>Этот эксперимент показывает, что IPsec
<emphasis>действительно</emphasis> распределяет передаваемые
байты по области определения <emphasis>равномерно</emphasis>,
как и любое другое шифрование. Однако этот метод <emphasis>не
может</emphasis> обнаружить множество других изъянов в системе
(хотя я таковых не знаю). Для примера можно привести плохие
алгоритмы генерации или обмена ключами, нарушение
конфиденциальности данных или ключей, использование слабых в
криптографическом смысле алгоритмов, взлом ядра и т. д. Изучайте
исходный код, узнавайте, что там происходит.</para>
</sect1>
<sect1 id="IPsec">
<title>Определение IPsec</title>
<para>IPsec представляет собой протокол безопасного обмена
информацией по Internet. Существует в виде расширения к IPv4;
является неотъемлемой частью IPv6. Содержит в себе протокол
шифрования и аутентификации на уровне IP (межмашинное
<quote>host-to-host</quote> взаимодействие). SSL защищает
только лишь конкретный прикладной сокет;
<application>SSH</application> защищает вход на машину;
<application>PGP</application> защищает определённый файл или
письмо. IPsec шифрует всю информацию, передаваемую между двумя
машинами.</para>
</sect1>
<sect1 id="ipsec-install">
<title>Установка IPsec</title>
<para>Большинство современных версий FreeBSD уже имеют поддержку
IPsec. Вероятно, Вы должны будете лишь добавить опцию
<option>IPsec</option> в конфигурационный файл ядра, и после
сборки и инсталляции нового ядра, сконфигурировать соедения
IPsec с помощью команды &man.setkey.8;.</para>
<para>Более подробно о том, как заупстить IPsec во FreeBSD можно
прочесть в <ulink
url="http://www.freebsd.org.ua/handbook/ipsec.html">Руководстве
пользователя</ulink>.</para>
</sect1>
<sect1 id="kernel">
<title>usr/src/sys/i386/conf/KERNELNAME</title>
<para>Следующие строки должны присутствовать в конфигурационном
файле ядра, чтобы оно поддерживало Berkeley Packet Filter. Не
забудьте после модификации запустить &man.config.8;, и, как
обычно, пересобрать и установить новое ядро.</para>
<programlisting>
device bpf
</programlisting>
</sect1>
<sect1 id="code">
<title>Универсальный Статистический Тест Маурера (размер блока
--- 8 бит)</title>
<para>Оригинал нижеприведённого кода находится по <ulink
url="http://www.geocities.com/SiliconValley/Code/4704/uliscanc.txt">
этому адресу</ulink>.</para>
<programlisting>
/*
ULISCAN.c ---blocksize of 8
1 Oct 98
1 Dec 98
21 Dec 98 uliscan.c derived from ueli8.c
This version has // comments removed for Sun cc
This implements Ueli M Maurer's "Universal Statistical Test for Random
Bit Generators" using L=8
Accepts a filename on the command line; writes its results, with other
info, to stdout.
Handles input file exhaustion gracefully.
Ref: J. Cryptology v 5 no 2, 1992 pp 89-105
also on the web somewhere, which is where I found it.
-David Honig
honig@sprynet.com
Usage:
ULISCAN filename
outputs to stdout
*/
#define L 8
#define V (1&lt;&lt;L)
#define Q (10*V)
#define K (100 *Q)
#define MAXSAMP (Q + K)
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
int main(argc, argv)
int argc;
char **argv;
{
FILE *fptr;
int i,j;
int b, c;
int table[V];
double sum = 0.0;
int iproduct = 1;
int run;
extern double log(/* double x */);
printf("Uliscan 21 Dec 98 \nL=%d %d %d \n", L, V, MAXSAMP);
if (argc &lt; 2) {
printf("Usage: Uliscan filename\n");
exit(-1);
} else {
printf("Measuring file %s\n", argv[1]);
}
fptr = fopen(argv[1],"rb");
if (fptr == NULL) {
printf("Can't find %s\n", argv[1]);
exit(-1);
}
for (i = 0; i &lt; V; i++) {
table[i] = 0;
}
for (i = 0; i &lt; Q; i++) {
b = fgetc(fptr);
table[b] = i;
}
printf("Init done\n");
printf("Expected value for L=8 is 7.1836656\n");
run = 1;
while (run) {
sum = 0.0;
iproduct = 1;
if (run)
for (i = Q; run && i &lt; Q + K; i++) {
j = i;
b = fgetc(fptr);
if (b &lt; 0)
run = 0;
if (run) {
if (table[b] &gt; j)
j += K;
sum += log((double)(j-table[b]));
table[b] = i;
}
}
if (!run)
printf("Premature end of file; read %d blocks.\n", i - Q);
sum = (sum/((double)(i - Q))) / log(2.0);
printf("%4.4f ", sum);
for (i = 0; i &lt; (int)(sum*8.0 + 0.50); i++)
printf("-");
printf("\n");
/* refill initial table */
if (0) {
for (i = 0; i &lt; Q; i++) {
b = fgetc(fptr);
if (b &lt; 0) {
run = 0;
} else {
table[b] = i;
}
}
}
}
}
</programlisting>
</sect1>
</article>

View file

@ -0,0 +1,20 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/mh/Makefile,v 1.1 2001/07/19 10:20:52 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER= andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,819 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/mh/article.sgml,v 1.2 2001/07/19 10:20:35 phantom Exp $
Original revision: 1.9
-->
<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN">
<article>
<articleinfo>
<title>Учебник по MH</title>
<authorgroup>
<author>
<firstname>Matt</firstname>
<surname>Midboe</surname>
<affiliation>
<address>
<email>matt@garply.com</email>
</address>
</affiliation>
</author>
</authorgroup>
<pubdate>v1.0, 16 января 1996</pubdate>
<!--
<para>Перевод на русский язык: Андрей Захватов
(<email>andy@FreeBSD.org</email>)</para>
-->
<abstract>
<para>В этом документе даются основы работы с MH во FreeBSD</para>
</abstract>
</articleinfo>
<sect1 id="mhintro">
<title>Введение</title>
<para>MH ведет свою историю с 1977 года, с компании RAND Corporation, где
были разработаны основы работы MH. MH не является единой программой для
работы с электронной почтой, но подходом к тому, как лучше всего
разрабатывать инструменты для чтения электронной почты. Разработчики MH
провели большую работу, твердо придерживаясь принципа
<acronym>KISS</acronym>: Keep It Simple Stupid. Вместо того, чтобы
разработать одну большую программу для чтения, отсылки и обработки
электронной почты, они написали специальные программы для каждого случая
вашей работы с электронной почтой. Некоторым нравится MH по причине
его специализации, которую очень проста и естественна. Каждый инструмент
в MH выполняет одно действие, но выполняет его очень хорошо.</para>
<para>Кроме различных инструментов, которые можно использовать для
обработки своей электронной почты, MH прекрасно выполняет работу по
сохранению настроек каждого из этих инструментов однообразными и
соответствующими друг другу. На самом деле, если вы не совсем понимаете,
как что-то должно работать, и какими должны быть аргументы некоторой
команды, то вы можете попытаться угадать и окажетесь правы. Каждая
команда MH однообразна в обработке конфигурационных файлов и передаче
параметров командной строки. Вам полезно будет помнить, что вы всегда
можете добавить <option>-help</option> к команде для вывода опций этой
команды.</para>
<para>Первым делом вам нужно убедиться, что на вашей машине с FreeBSD
установлен пакет MH. Если вы устанавливали систему с компакт-диска, то
для установки mh можете выполнить такую команду:
<informalexample>
<screen>
&prompt.root; <userinput>pkg_add /cdrom/packages/mh-6.8.3.tgz</>
</screen>
</informalexample>
Вы увидите, что при этом будет создан каталог
<filename>/usr/local/lib/mh</filename>, а в каталог
<filename>/usr/local/bin</filename> будут добавлены несколько выполнимых
файлов. Если вы предпочитаете откомпилировать все самостоятельно, то
можете сгрузить исходный код с общедоступного ftp-сервера по адресу
<ulink URL="ftp://ftp.ics.uci.edu/">ftp.ics.uci.edu</ulink> или <ulink
URL="ftp://louie.udel.edu/">louie.udel.edu</ulink>.</para>
<para>Этот учебник не является полным и подробным описанием того, как
работает MH. Он предназначен для того, чтобы вы начали свой путь по
дороге к более удобному и эффективному чтению электронной почты. Вы
должны прочесть страницы справочной системы по различным командам. Также
вас может заинтересовать телеконференция <ulink
URL="news:comp.mail.mh">comp.mail.mh</ulink>. Прочтите <ulink
URL="http://www.cis.ohio-state.edu/hypertext/faq/usenet/mh-faq/part1/faq.html">FAQ
по MH</ulink>. Лучшим источником информации по MH является книга
издательства O'Reilly and Associates, которую написал Jerry Peek.</para>
</sect1>
<sect1>
<title>Чтение почты</title>
<para>Этот раздел посвящен тому, как использовать команды
<command>inc</command>, <command>show</command>, <command>scan</command>,
<command>next</command>, <command>prev</command>, <command>rmm</command>,
<command>rmf</command> и <command>msgchk</command>. Одной из приятнейших
особенностей MH является единообразие интерфейсов программ. При
использовании этих программ нужно помнить лишь несколько вещей, например,
способ задания списков сообщений. В случае команды
<command>inc</command> это не обязательно, но с командами типа
<command>show</command> это полезно знать.</para>
<para>Список сообщений может иметь вид типа <parameter>23 20
16</parameter>, что будет означать сообщения 23, 20 и 16. Это весьма
просто, но можно делать более полезные вещи, типа
<parameter>23-30</parameter>, что будет означать все сообщения с 23 до
30. Вы можете также указывать здесь в виде
<parameter>cur:10</parameter>, что будет действовать на текущее сообщение
и на следующие 9 сообщений. Сообщения <parameter>cur</parameter>,
<parameter>last</parameter> и <parameter>first</parameter> являются
особыми обозначениями, соответствующими текущему, последнему и первому
сообщениям в почтовом ящике.</para>
<sect2 id="inc">
<title><command>inc</command>, <command>msgchk</command>&mdash;чтение
новой почты или проверка ее наличия</title>
<para>Если вы просто наберете <userinput>inc</userinput> и нажмете
<keycap>return</keycap>, то начнете работать с MH. При выполнении
команды <command>inc</command> первый раз, она настроит вашу учетную
запись для использования настроек MH по умолчанию и запросит создание
каталога Mail. Если у вас имеется почта, ожидающая сгрузки, вы увидите
нечто вроде следующего:</para>
<informalexample>
<screen>
29 01/15 Doug White Re: Another Failed to boot problem&lt;&lt;On Mon, 15 J
30 01/16 "Jordan K. Hubbar Re: FBSD 2.1&lt;&lt;&gt; Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table&lt;&lt;&gt;&gt; &gt;It would appea
32 01/16 "Jordan K. Hubbar Re: video is up&lt;&lt;&gt; Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1&lt;&lt;Nate Williams stands accused of sa
</screen>
</informalexample>
<para>Это то же самое, что вы увидите при выполнении команды
<command>scan</command> (смотрите <xref linkend="scan">). Если вы
просто запустили команду <command>inc</command> без параметров, она
проверит ваш компьютер на наличие электронной почты, которая
предназначается вам.</para>
<para>Многим нравится для получения своей электронной почты использовать
протокол POP. MH может работать с ним для получения вашей электронной
почты. Вам нужно передать команде <command>inc</command> несколько
аргументов командной строки.</para>
<informalexample>
<screen>
&prompt.user; <userinput>inc -host mail.pop.org -user <replaceable>username</> -norpop</>
</screen>
</informalexample>
<para>Это укажет команде <command>inc</command> на соединение с
<parameter>mail.pop.org</parameter> для сгрузки вашей электронной
почты, а также сообщит о том, что ваше имя пользователя в той системе
<replaceable>username</replaceable>. Параметр <option>-norpop</option>
указывает команде <command>inc</command> на использование обычного POP3
для сгрузки вашей электронной почты. В MH имеется поддержка нескольких
разновидностей POP. Более чем вероятно, что вам никогда не придется
ими пользоваться. Хотя с inc вы можете выполнять более сложные
действия, такие, как проверка файлов и сканирование формата файлов, это
позволит вам начать работу.</para>
<para>Команда <command>msgchk</command> используется для получения
информации о том, есть ли у вас новая почта. <command>msgchk</command>
воспринимает те же самые параметры <option>-host</option> и
<option>-user</option>, что и команда <command>inc</command>.</para>
</sect2>
<sect2 id="show">
<title><command>show</command>, <command>next</command> и
<command>prev</command>&mdash;вывод и передвижение по электронной
почте</title>
<para><command>show</command> выводит письмо в вашей текущем почтовом
ящике. Как и <command>inc</command>, команда <command>show</command>
незатейлива. Если вы просто наберете <userinput>show</userinput> и
нажмете <keycap>return</keycap>, то она выдаст текущее сообщение. Вы
можете также указать конкретные номера выводимых сообщений:</para>
<informalexample>
<screen>&prompt.user; <userinput>show 32 45 56</></screen>
</informalexample>
<para>По этой команде выведутся сообщения с номерами 32, 45 и 56 друг за
другом. Пока вы не поменяете действия по умолчанию, команда
<command>show</command> в основном выполняет команду
<command>more</command> над сообщением электронной почты.</para>
<para><command>next</command> используется для перехода к следующему
сообщению, а <command>prev</command> для перехода к предыдущему
сообщению. Обе команды подразумевают выполнение команды
<command>show</command>, поэтому при переходе к следующему сообщению
оно будет автоматически выведено на экран.</para>
</sect2>
<sect2 id="scan">
<title><command>scan</command>&mdash;сканирование ваших сообщений</title>
<para><command>scan</command> выдает краткий список сообщений в вашем
текущем почтовом ящике. Вот пример того, что вам выдаст команда
<command>scan</command>.</para>
<informalexample>
<screen>
30+ 01/16 "Jordan K. Hubbar Re: FBSD 2.1&lt;&lt;&gt; Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table&lt;&lt;&gt;&gt; &gt;It would appea
32 01/16 "Jordan K. Hubbar Re: video is up&lt;&lt;&gt; Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1&lt;&lt;Nate Williams stands accused of sa
</screen>
</informalexample>
<para>Как и практически все в MH, этот вывод можно настроить. Это
обычный формат вывода по умолчанию. В нем дается номер сообщения,
дата, отправитель, строка темы и фрагмент начала письма, если он
помещается. Знак <literal>+</literal> означает, что данное сообщение
является текущим, так что при выполнении команды
<command>show</command> будет выдано именно это сообщение.</para>
<para>Одним из полезных параметров для команды scan является является
<option>-reverse</option>. При этом ваши сообщения будут выдаваться в
порядке, при котором сообщения с наибольшими номерами следуют первыми,
а сообщения с меньшими номерами последними. Другим полезным параметром
для <command>scan</command> является чтение из файла. Если вы хотите
просканировать почтовый ящик с входящей почтой во FreeBSD без
использования команды <command>inc</command>, то это можно сделать
командой <command>scan -file
/var/mail/<replaceable>username</replaceable></command>. Это можно
сделать с любым файлом в формате <database>mbox</database>.</para>
</sect2>
<sect2 id="rmm">
<title><command>rmm</command> и <command>rmf</command>&mdash;удаление
текущего сообщения или почтового ящика</title>
<para><command>rmm</command> используется для удаления почтового
сообщения. По умолчанию обычно сообщение на самом деле не удаляется,
а переименовывается и игнорируется командами MH. Вам нужно
переодически просматривать сообщения и физически удалять
<quote>удаленные</quote> сообщения.</para>
<para>Команда <command>rmf</command> используется для удаления почтовых
ящиков. Она не переименовывает файлы, а действительно их удаляет с
диска, так что при использовании этой команды вам нужно быть
внимательными.</para>
</sect2>
<sect2 id="samplereading">
<title>Типичный сеанс чтения с использованием MH</title>
<para>Сначала вам нужно получить новую почту командой
<command>inc</command>. Так что в командной строке наберите
<command>inc</command> и нажмите <keycap>return</keycap>.</para>
<informalexample>
<screen>
&prompt.user; <userinput>inc</>
Incorporating new mail into inbox...
36+ 01/19 "Stephen L. Lange Request...&lt;&lt;Please remove me as contact for pind
37 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT&lt;&lt;&gt;&gt;&gt; Bill Fenner said: &gt; In
&prompt.user;
</screen>
</informalexample>
<para>При этом выдается ваша новая электронная почта, которая была
добавлена в ваш почтовый ящик. Так что следующими действиями будут
вывод сообщений по команде <command>show</command> и переход от
сообщения к сообщению.</para>
<informalexample>
<screen>
&prompt.user; <userinput>show</>
Received: by sashimi.wwa.com (Smail3.1.29.1 #2)
id m0tdMZ2-001W2UC; Fri, 19 Jan 96 13:33 CST
Date: Fri, 19 Jan 1996 13:33:31 -0600 (CST)
From: "Stephen L. Lange" &lt;stvlange@wwa.com&gt;
To: matt@garply.com
Subject: Request...
Message-Id: &lt;Pine.BSD.3.91.960119133211.824A-100000@sashimi.wwa.com&gt;
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Please remove me as contact for pindat.com
&prompt.user; <userinput>rmm</>
&prompt.user; <userinput>next</>
Received: from localhost (localhost [127.0.0.1]) by whydos.lkg.dec.com (8.6.11/8
.6.9) with SMTP id RAA24416; Fri, 19 Jan 1996 17:56:48 GMT
Message-Id: &lt;199601191756.RAA24416@whydos.lkg.dec.com&gt;
X-Authentication-Warning: whydos.lkg.dec.com: Host localhost didn't use HELO pro
tocol
To: hsu@clinet.fi
Cc: hackers@FreeBSD.org
Subject: Re: kern/950: Two PCI bridge chips fail (multiple multiport ethernet
boards)
In-Reply-To: Your message of "Fri, 19 Jan 1996 00:18:36 +0100."
&lt;199601182318.AA11772@Sysiphos&gt;
X-Mailer: exmh version 1.5omega 10/6/94
Date: Fri, 19 Jan 1996 17:56:40 +0000
From: Matt Thomas &lt;matt@lkg.dec.com&gt;
Sender: owner-hackers@FreeBSD.org
Precedence: bulk
This is due to a typo in pcireg.h (to
which I am probably the guilty party).
</screen>
</informalexample>
<para>По команде <command>rmm</command> было удалено текущее сообщение, а
по команде <command>next</command> был выполнен переход к следующему
сообщению. Теперь, если я захочу просмотреть десять последних
сообщений для чтения одного из них, я должен сделать следующее:</para>
<informalexample>
<screen>
&prompt.user; <userinput>scan last:10</>
26 01/16 maddy Re: Testing some stuff&lt;&lt;yeah, well, Trinity has
27 01/17 Automatic digest NET-HAPPENINGS Digest - 16 Jan 1996 to 17 Jan 19
28 01/17 Evans A Criswell Re: Hey dude&lt;&lt;&gt;From matt@tempest.garply.com Tue
29 01/16 Karl Heuer need configure/make volunteers&lt;&lt;The FSF is looki
30 01/18 Paul Stephanouk Re: [alt.religion.scientology] Raw Meat (humor)&lt;
31 01/18 Bill Lenherr Re: Linux NIS Solaris&lt;&lt;--- On Thu, 18 Jan 1996 1
34 01/19 John Fieber Re: Stuff for the email section?&lt;&lt;On Fri, 19 Jan
35 01/19 support@foo.garpl [garply.com #1138] parlor&lt;&lt;Hello. This is the Ne
37+ 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT&lt;&lt;&gt;&gt;&gt; Bill Fenner said: &gt; In
&prompt.user;
</screen>
</informalexample>
<para>Теперь, если я хочу прочесть сообщение номер 27, я выполняю команду
<userinput>show 27</userinput>, и сообщение будет показано. Как вы
можете видеть на примере этого простого сеанса работы, MH весьма легок
в использовании, а просмотр электронной почты и ее вывод интуитивен и
прост.</para>
</sect2>
</sect1>
<sect1>
<title>Папки и поиск почты</title>
<para>Любому, кто получает много электронной почты, определенно требуется
сортировать, помечать, сжимать и нумеровать свою электронную почту
различными способами. MH может делать это лучше, чем какой-либо другой
инструмент. Мы пока еще не обсуждали концепцию папок. Несомненно, вы
уже встречались с папками при использовании других почтовых программ. В
MH также используются папки. MH может даже создавать в папках вложенные
в них папки. При работе с MH вы должны помнить, что при запуске команды
<command>inc</command> первый раз она запрашивает создание каталога
<filename>Mail</filename> и начинает сохранять все в этом каталоге. Если
вы посмотрите на содержимое этого каталога, то обнаружите там каталог с
именем <filename>inbox</filename>. В этом каталоге находится вся ваша
входящая почта, которая не была еще никуда перемещена.</para>
<para>При создании новой папки в каталоге программы MH
<filename>Mail</filename> будет создан новый каталог, а сообщения этой
папки будут размещаться в этом каталоге. Когда приходит новая
электронная почта, то она размещается в каталоге
<filename>inbox</filename> в файле с именем, соответствующим номеру
сообщения. Поэтому, даже если у вас нет ни одного инструмента MH для
чтения вашей электронной почты, вы можете продолжать использовать
стандартные команды UNIX для работы с этими каталогами и просмотра ваших
файлов. Такой упрощенный подход на самом деле дает вам простор для
действий, которые вы можете выполнять над вашей электронной
почтой.</para>
<para>Так же, как вы можете использовать списик сообщений типа
<parameter>23 16 42</parameter> с большинством команд MH, имеется режим
и для папок, который вы можете задать практически с каждой командой MH.
Если вы выполняете команду <command>scan +freebsd</command>, она будет
сканировать вашу папку <filename>freebsd</filename>, а ваша текущая папка
будет изменена на <filename>freebsd</filename>. При выполнении команды
<command>show +freebsd 23 16 42</command>, <command>show</command>
перейдет к вашей папке <filename>freebsd</filename> и выведет сообщения
23, 16 и 42. Поэтому запомните этот синтаксис
<option>+<replaceable>folder</replaceable></option>. Вам нужно
использовать такие команды для работы с разными папками. Помните, что
вашей папкой для почты по умолчанию является <filename>inbox</filename>,
так что выполнение команды <command>folder +inbox</command> должно всегда
вернуть вас обратно к вашей почте. Конечно, с бесконечной гибкостью MH
такое поведение может быть изменено, но в большинстве случаев лучше
оставить папку <command>inbox</command>.</para>
<sect2>
<title><command>pick</command>&mdash;поиск почты по некоторому
критерию</title>
<para>Команда <command>pick</command> является одной из более сложных
команд в системе MH. Так что вам может понадобиться прочесть
справочник по
<citerefentry><refentrytitle>pick</refentrytitle><manvolnum>1</manvolnum></citerefentry>
для его более полного понимания. В простейшем случае вы можете делать
нечто вроде следующего:</para>
<informalexample>
<screen>
&prompt.user; <userinput>pick -search pci</>
15
42
55
56
57
</screen>
</informalexample>
<para>Команде <command>pick</command> будет указано на просмотр каждой
строки всех сообщений в текущей папке и выдачу номеров тех сообщений,
в которых было найдено слово <literal>pci</literal>. Затем по команде
<command>show</command> вы можете вывести эти сообщения и прочесть их
или удалить командой <command>rmm</command>. Вам нужно задать команды
типа <command>show 15 42 55-57</command> для их вывода. Более полезной
сделать следующее:</para>
<informalexample>
<screen>
&prompt.user; <userinput>pick -search pci -seq pick</>
5 hits
&prompt.user; <userinput>show pick</>
</screen>
</informalexample>
<para>При этом будут выведены те же самые сообщения, но вам не придется
тратить на них столько усилий. Параметр <option>-seq</option> на самом
деле является сокращенным выриантом для <option>-sequence</option>, а
<command>pick</command> является именем последовательности, которая
содержит номера сообщений, которые удовлетворяют заданному условию. Вы
можете использовать последовательности практически с люой командой MH.
Так что вы можете выполнить команду <command>rmm pick</command>, и все
эти сообщения будут удалены. Вы можете именовать последовательности
как угодно. Если вы снова выполните команду pick, то она перезапишет
старую последовательность, если вы используете то же самое имя.</para>
<para>Выполнение команды <command>pick -search</command> может оказаться
более длительной операцией, чем просто поиск сообщений от кого-то или
для кого-то. Поэтому <command>pick</command> позволяет вам
использовать такой предопределенный критерий поиска:</para>
<variablelist>
<varlistentry>
<term><option>-to</option></term>
<listitem>
<para>поиск по адресату сообщения</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-cc</option></term>
<listitem>
<para>поиск по содержимому cc-списка</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-from</option></term>
<listitem>
<para>поиск по тому, от кого исходит сообщение</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-subject</option></term>
<listitem>
<para>поиск электронной почты с заданной темой письма</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-date</option></term>
<listitem>
<para>поиск электронных писем с указанной датой</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--<replaceable>component</replaceable></option></term>
<listitem>
<para>поиск по любому другому компоненту заголовка письма. (То есть
<option>--reply-to</option> для поиска всех электронных писем с
опеределенным значением поля reply-to в заголовке)</para>
</listitem>
</varlistentry>
</variablelist>
<para>Это позволяет вам выполнять действия типа
<informalexample>
<screen>
&prompt.user; <userinput>pick -to freebsd-hackers@FreeBSD.org -seq hackers</>
</screen>
</informalexample>
для получения списка всех электронных писем, посланных в список
рассылки FreeBSD hackers. Команда <command>pick</command> также
позволяет вам группировать эти критерии различными способами при помощи
следующих параметров:</para>
<itemizedlist>
<listitem>
<para>&hellip; <option>-and</option> &hellip;</para>
</listitem>
<listitem>
<para>&hellip; <option>-or</option> &hellip</para>
</listitem>
<listitem>
<para><option>-not</option> &hellip;</para>
</listitem>
<listitem>
<para><option>-lbrace</option> &hellip;
<option>-rbrace</option></para>
</listitem>
</itemizedlist>
<para>Эти команды позволяют вам выполнять следующее</para>
<informalexample>
<screen>&prompt.user; <userinput>pick -to freebsd-hackers -and -cc freebsd-hackers</>
</screen>
</informalexample>
<para>При этом будет взята вся почта в вашем входящем почтовом ящике,
которая была послана по адресу freebsd-hackers или этот адрес
присутствовал в cc-списке. Параметры brace позволяют вам группировать
критерии поиска. Иногда это очень нужно, как в следующем
примере</para>
<informalexample>
<screen>&prompt.user; <userinput>pick -lbrace -to freebsd-hackers -and
-not -cc freebsd-questions -rbrace -and -subject pci</>
</screen>
</informalexample>
<para>В общем, это означает <quote>выбрать (во freebsd-hackers и не
в cc-списке для freebsd-questions) с темой pci</quote>. По этой
команде должна быть просмотрена ваша папка и найдены все сообщения,
посланные в список freebsd-hackers, которые не были также включены в
cc-список для freebsd-questions, и в строке темы которых присутствовало
упоминание pci. Теперь вам стоит задуматься о том, что называется
порядком выполнения операторов. Помните, как при вычислении значений
математических выражений вы начинали слева направо и сначала умножали
и делили, и только потом складывали и вычитали? В MH присутствует
тот же набор правил для команды <command>pick</command>. Он достаточно
сложен, так что вам нужно будет изучить справочную страницу. Этот
документ только знакомит с MH.</para>
</sect2>
<sect2>
<title><command>folder</command>, <command>folders</command>,
<command>refile</command>&mdash;три полезные программы для управления
папками</title>
<para>Имеются три программы, которые предназначены только для управления
вашими папками. Программа <command>folder</command> используется для
переключения между папками, их сжатия и вывода их списка. В самом
простом случае вы можете выполнить команду <command>folder
+<replaceable>newfolder</replaceable></command>, и вы переключитесь на
папку <replaceable>newfolder</replaceable>. С этого момента все ваши
команды MH типа <command>comp</command>, <command>repl</command>,
<command>scan</command> и <command>show</command> будут выполняться над
этой папкой <command>newfolder</command>.</para>
<para>Иногда при чтении и удалении сообщений в ваших папках образуются
<quote>holes</quote>. Если вы выполните команду
<command>scan</command>, то можете увидеть только сообщения 34, 35, 36,
43, 55, 56, 57, 80. Если вы выполните команду
<command>folder -pack</command>, то она перенумерует все ваши
сообщения, так что там не будет дыр. Однако она не удаляет никаких
сообщений. Так что вам может понадобиться периодически просматривать
и физически удалять <command>rmm</command>-сообщения.</para>
<para>Если вам нужна информация о ваших папках, вы можете получить ее
командами <command>folders</command> или
<command>folder -all</command>, которые выводят список всех ваших
папок, количество хранящихся в них сообщений, номер текущего сообщения
в каждой папке, и так далее. Такая строка статистики, которую выводят
эти команды для всех папок, имеет тот же самый вид, что вы получаете
при смене папки по команде <command>folder +foldername</command>.
Результат выполнения команды <command>folders</command> выглядит
примерно так:</para>
<informalexample>
<screen> Folder # of messages ( range ); cur msg (other files)
announce has 1 message ( 1- 1).
drafts has no messages.
f-hackers has 43 messages ( 1- 43).
f-questions has 16 messages ( 1- 16).
inbox+ has 35 messages ( 1- 38); cur= 37.
lists has 8 messages ( 1- 8).
netfuture has 1 message ( 1- 1).
out has 31 messages ( 1- 31).
personal has 6 messages ( 1- 6).
todo has 58 messages ( 1- 58); cur= 1.
TOTAL= 199 messages in 13 folders.
</screen>
</informalexample>
<para>Команду <command>refile</command> нужно использовать для
перемещения сообщения между папками. Когда вы выполняете команду типа
<command>refile 23 +netfuture</command>, то сообщение номер 23
перемещается в папку <filename>netfuture</filename>. Вы можете также
выполнить команду типа <command>refile 23 +netfuture/latest</command>,
которая поместит сообщение номер 23 в папку с именем
<filename>latest</filename>, вложенную в папку
<filename>netfuture</filename>. Если вы хотите сохранить сообщение
в текущей папке и связать его, вы можете выполнить команду
<command>refile -link 23 +netfuture</command>, которая оставит 23
в вашем текущей папке <filename>inbox</filename>, но также и в вашей
папке <filename>netfuture</filename>. Наверное, вы уже начали
понимать, какие по настоящему мощные действия вы можете выполнять с
MH.</para>
</sect2>
</sect1>
<sect1>
<title>Посылка почты</title>
<para>Электронная почта для большинства людей является улицей с движением в
два ряда, так что вы можете захотеть послать что-то обратно. Способ,
каким MH выполняет посылку почты, может сначала показаться трудным для
использования, но он обеспечивает удивительную гибкость. Сначала MH
копирует файл компонентов в исходящую электронную почту. Файл
компонентов в основном представляет собой скелет элетронного письма с уже
помещенными туда заголовками To: и Subject:. Затем вы отсылаетесь к
редактору текстов, в котором вы заполняете информацию заголовков и
набираете тело письма ниже разделительных строк. Затем вызывается
программа <command>whatnow</command>. Находясь в приглашении
<prompt>What now?</prompt>, вы можете выбрать одно из действий
<command>send</command>, <command>list</command>,
<command>edit</command>, <command>edit</command>,
<command>push</command> или <command>quit</command>. Большинство этих
команд говорят сами за себя. Итак, процесс посылки сообщения включает
копирование файла компонент, редактирование вашей электронной почты и
указание программе <command>whatnow</command> действия, которое нужно
сделать с вашей электронной почтой.</para>
<sect2>
<title><command>comp</command>, <command>forw</command>,
<command>reply</command>&mdash;создание, пересылка или ответ на
чье-либо сообщение</title>
<para>Программа <command>comp</command> имеет несколько полезных
параметров командной строки. Самой важной сейчас является опция
<option>-editor</option>. При установке MH используемым по умолчанию
редактором обычно становится программа <command>prompter</command>,
поставляемая с MH. Это не очень привлекательный редактор, он просто
делает то, что должен делать. Так что когда вы собираетесь написать
кому-либо письмо, вы можете воспользоваться командами
<command>comp -editor /usr/bin/vi/</command> или <command>comp -editor
/usr/local/bin/pico/</command>. После запуска
<emphasis>comp</emphasis> вы оказываетесь в вашем редакторе и видите
нечто вроде следующего:</para>
<informalexample>
<screen>To:
cc:
Subject:
--------
</screen>
</informalexample>
<para>Вам нужно указать персону, которой вы посылаете почту, после строки
<literal>To:</literal>. То же самое относится и к остальным
заголовкам, так что вам нужно будет указать тему письма после строки
<literal>Subject:</literal>. Затем вам просто нужно набрать тело
письма после разделительной строки. Это может показаться несколько
упрощенным, так как многие почтовые программы имеют специальные
опросники, которые запрашивают у вас эту информацию, но необходимости в
этом нет. Плюс это на самом деле дает вам дополнительную
гибкость.</para>
<informalexample>
<screen>To:<userinput>freebsd-rave@FreeBSD.org</>
cc:
Subject:<userinput>And on the 8th day God created the FreeBSD core team</>
--------
<userinput>Wow this is an amazing operating system. Thanks!</>
</screen>
</informalexample>
<para>Теперь вы можете сохранить это сообщение и выйти из редактора. Вы
увидите приглашение <prompt>What now?</prompt> и здесь можете набрать
<userinput>send</userinput> или <userinput>s</userinput> и нажать
<keycap>return</keycap>. После этого основная группа разработчиков
FreeBSD получит свои слова восхищения. Как я отмечал выше, вы можете
также воспользоваться другими командами, например,
<command>quit</command>, если не хотите посылать сообщение.</para>
<para>Команда <command>forw</command> ошеломляюще похожа. Большим
отличием является то, что сообщение, которое вы пересылаете,
автоматически включается в исходящее сообщение. Когда вы выполняете
команду <command>forw</command>, она будет пересылать ваше текущее
сообщение. Вы всегда можете указать на пересылку другого сообщения,
выполняя команду <command>forw 23</command>, после чего в исходящее
сообщенее будет помещено сообщение номер 23, а не текущее сообщение.
Кроме этих маленьких различий, команда <command>forw</command> работает
абсолютно так же, как <command>comp</command>. Вы проходите через
в точности такой же процесс посылки сообщения.</para>
<para>По команде <command>repl</command> будет делаться ответ на текущее
сообщение, если только вы не указали другой номер сообщения. Команда
<command>repl</command> приложит все усилия, чтобы забежать вперед и
заполнить некоторые заголовки почтового сообщения. Поэтому вы
заметите, что в заголовке <literal>To:</literal> уже присутствует
адрес получателя. Также уже будет заполнена строка
<literal>Subject:</literal>. Затем вы проходите обычный процесс
написания сообщения и на этом все завершается. Здесь полезно знать о
параметре командной строки <option>-cc</option>. Вы можете
использовать параметры <parameter>all</parameter>,
<parameter>to</parameter>, <parameter>cc</parameter> и
<parameter>me</parameter> после <option>-cc</option> для того, чтобы
<command>repl</command> автоматически добавила различные адреса к
cc-списку сообщения. Вы, наверное, заметили, что исходное сообщение
не будет включаться. Это происходит, потому что в большинстве настроек
MH так указано изначально.</para>
</sect2>
<sect2>
<title>Файлы <filename>components</filename> и
<filename>replcomps</filename>&mdash;файлы компонент для команд
<command>comp</command> и <command>repl</command></title>
<para>Файл <filename>components</filename> обычно располагается в
каталоге <filename>/usr/local/lib/mh</filename>. Вы можете скопировать
этот файл в ваш каталог Mail для MH и отредактировать его так, чтобы он
содержал то, что вы хотите. Это достаточно простой файл. В начале
файла расположены различные почтовые заголовки, разделительная строка
и больше ничего. Команда <command>comp</command> просто копирует этот
файл <filename>components</filename> и затем редактирует его. Вы
можете добавить любой соответствующий стандарту RFC822 заголовок.
Например, в вашем файле <filename>components</filename> вы можете
поместить следующее:</para>
<informalexample>
<screen>
To:
Fcc: out
Subject:
X-Mailer: MH 6.8.3
X-Home-Page: http://www.FreeBSD.org/
-------
</screen>
</informalexample>
<para>Тогда MH будет копировать этот файл компонентов и передаст его в
ваш редактор. Файл <filename>components</filename> весьма прост. Если
вы хотите в сообщениях иметь подпись, просто поместите вашу подпись в
этот файл <filename>components</filename>.</para>
<para>Файл <filename>replcomps</filename> несколько более сложен. По
умолчанию <filename>replcomps</filename> имеет такой вид:</para>
<informalexample>
<screen>
%(lit)%(formataddr %&lt;{reply-to}%?{from}%?{sender}%?{return-path}%&gt;)\
%&lt;(nonnull)%(void(width))%(putaddr To: )\n%&gt;\
%(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\
%&lt;(nonnull)%(void(width))%(putaddr cc: )\n%&gt;\
%&lt;{fcc}Fcc: %{fcc}\n%&gt;\
%&lt;{subject}Subject: Re: %{subject}\n%&gt;\
%&lt;{date}In-reply-to: Your message of "\
%&lt;(nodate{date})%{date}%|%(pretty{date})%&gt;."%&lt;{message-id}
%{message-id}%&gt;\n%&gt;\
--------
</screen>
</informalexample>
<para>Он имеет такой же простой формат, как и файл
<filename>components</filename>, но содержит несколько дополнительных
форматирующих кодов. Команда <literal>%(lit)</literal> опеределяет
место для адреса. <literal>%(formataddr</literal> является функцией,
которая возвращает полный адрес электронной почты. Следующей частью
является <literal>%&lt;</literal>, которая означает условие если и
<literal>{reply-to}</literal> соответствует полю reply-to исходного
сообщения. Таким образом, это может быть проинтерпретировано
следующим образом:</para>
<informalexample>
<screen>
%&lt;<emphasis remap=bf>if</emphasis> {reply-to}
<emphasis remap=bf>в исходном сообщении имеется поле reply-to</emphasis>
то передать его в formataddr, %? <emphasis remap=bf>else</emphasis> {from}
<emphasis remap=bf>взять адрес from</emphasis>,
%? <emphasis remap=bf>else</emphasis> {sender}
<emphasis remap=bf>взять адрес sender</emphasis>, %?
<emphasis remap=bf>else</emphasis> {return-path}
<emphasis remap=bf>взять return-path из исходного сообщения</emphasis>,
%&gt; <emphasis remap=bf>endif</emphasis>.
</screen>
</informalexample>
<para>Как вы можете видеть, форматирование MH может быть достаточно
сложным. Вы можете выяснить, что значат остальные функции и
переменные. Вся информация по написанию строк в таком формате
находится в справочной странице по MH. Действительно удобной вещью
являюется то, что единожды создав собственный файл
<filename>replcomps</filename>, вам не нужно больше его трогать. Ни
одна другая почтовая программа не даст вам той мощи и гибкости, что
дает вам MH.</para>
</sect2>
</sect1>
</article>

View file

@ -0,0 +1,26 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/solid-state/Makefile,v 1.2 2001/07/25 10:26:33 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER=andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,693 @@
<!--
Copyright (c) 2001 The FreeBSD Documentation Project
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML, HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/solid-state/article.sgml,v 1.3 2001/07/01 16:56:58 phantom Exp $
Original revision: 1.1
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
<!ENTITY legalnotice SYSTEM "../../share/sgml/legalnotice.sgml">
]>
<article>
<articleinfo>
<title>FreeBSD и твердотельные устройства</title>
<authorgroup>
<author>
<firstname>John</firstname>
<surname>Kozubik</surname>
<affiliation>
<address><email>john@kozubik.com</email></address>
</affiliation>
</author>
</authorgroup>
<pubdate>$FreeBSD: doc/en_US.ISO8859-1/articles/solid-state/article.sgml,v 1.1 2001/06/20 16:12:33 nik Exp $</pubdate>
<copyright>
<year>2001</year>
<holder>The FreeBSD Documentation Project</holder>
</copyright>
&legalnotice;
<abstract>
<para>В этой статье описывается использование твердотельных дисковых
устройств для создания встраиваемых систем на основе FreeBSD.</para>
<para>Встраиваемые системы имеют преимущество в повышенной надежности
по причине отсутствия в них движущихся частей (жестких дисков). Однако
следует принять во внимание, что системе, как правило, доступно очень
малое дисковое пространство и ограниченный объем запоминающего
устройства.</para>
<para>К отдельно рассматриваемым вопросам относятся типы и характеристики
твердотельных носителей, подходящих для использования в качестве дисков
во FreeBSD, параметры ядра, которые представляют интерес в таких
условиях, механизмы <filename>rc.diskless</filename>, автоматизирующие
инициализацию таких систем и удовлетворяющие требованиям файловых
систем, доступных только для чтения, а также построение файловых систем
с нуля. Статья заканчивается описанием некоторых общих стратегий для
случаев малых систем FreeBSD и работ в режиме только для чтения.</para>
</abstract>
</articleinfo>
<sect1 id="intro">
<title>Твердотельные дисковые устройства</title>
<para>Эта статья будет ограничиваться рассмотрением твердотельных дисковых
устройств, которые делаются на основе флэш-памяти. Флэш-память является
твердотельным (здесь нет движущихся частей) запоминающим устройством,
которое является энергонезависимым (данные остаются в памяти даже после
отключения всех источников питания). Флэш-память может быть
нечувствительной к сильным физическим воздействиям и достаточно быстра
(решения на основе флэш-памяти, описываемые в этой статье, гораздо
медленнее, чем диски EIDE для операций записи, и гораздо быстрее их в
случае выполнения операций чтения). Одним из очень важных свойств
флэш-памяти, различные варианты которого будут рассмотрены далее в этой
статье, является то, что каждый сектор имеет ограниченные возможности по
перезаписыванию. Вы можете только записывать, стирать и снова записывать
на сектор флэш-памяти определенное количество раз до того, как сектор
станет полностью неработоспособным. Хотя многие продукты на основе
флэш-памяти автоматически перенаправляют испорченные блоки, а некоторые
даже распределяют операции записи по всему модулю, фактом является
наличие ограничения на количество операций записи, которые могут
выполняться с устройством. Современные модули имеют характеристики от
1,000,000 до 10,000,000 циклов записи на сектор. Эти характеристики
могут зависеть от температуры рабочей среды.</para>
<para>В частности, мы обсудим компактные модули флэш-памяти, совместимые со
стандартом ATA и модули флэш-памяти Disk-On-Chip компании M-Systems.
Совместимые с ATA компактные флэш-карты весьма популярны в качестве
носителя данных для цифровых камер. Особый интерес представляет тот
факт, что они соответствуют шине IDE по контактам и совместимы с набором
команд ATA. Таким образом, при помощи очень простого и дешевого адаптера
такие устройства могут подключаться непосредственно к шине IDE
компьютера. Если поступить таки образом, то такие операционные системы,
как FreeBSD, распознают диск как обычный винчестер (весьма маленький).
Продукт M-Systems Disk-On-Chip основан на той же самой технологии
флэш-памяти, как и совместимые с ATA компактные флэш-карты, но отличаются
форм-фактором DIP и не совместимы с ATA. Для использования такого
устройства, вы не только должны установить его на материнскую плату с
разъемом Disk-On-Chip, но также встроить драйвер `fla` во все ядра
FreeBSD, с которыми хотите его использовать. Более того, в загрузочном
секторе этого устройства находится критичные данные, так что бы не должны
устанавливать загрузчик FreeBSD (и вообще какой-либо другой загрузчик)
при его использовании.</para>
<para>Существуют и другие решения для твердотельных дисков, но их
стоимость, безвестность и сравнительная сложность использования выводят
их за рамки этой статьи.</para>
</sect1>
<sect1 id="kernel">
<title>Параметры ядра</title>
<para>Для тех. кто создает встраиваемую систему FreeBSD, интерес
представляют несколько параметров ядра.</para>
<para>Во-первых, все встраиваемые системы FreeBSD, которые используют
флэш-память в качестве системного диска, заинтересованы в использовании
дисков в памяти и файловых систем в памяти. Из-за ограниченного
количества циклов записи, которые можно выполнить с флэш-памятью, диск
и файловые системы на нем будут, скорее всего, монтироваться в режиме
доступа только для чтения. В таком случае файловые системы типа
<filename>/tmp</filename> и <filename>/var</filename> монтируются как
файловые системы в памяти для того, чтобы позволить системе создать
журналы и обновить счетчики и временные файлы. Файловые системы в памяти
являются критическим компонентом успешной работы FreeBSD на твердотельных
устройствах.</para>
<para>Вы должны удостовериться, что в конфигурационном файле вашего ядра
присутствуют следующие строки:</para>
<programlisting>
options MFS # Memory Filesystem
options MD_ROOT # md device usable as a potential root device
pseudo-device md # memory disk
</programlisting>
<para>Во-вторых, если вы будете использовать продукт M-Systems
Disk-On-Chip, вы должны также включить такую строку:</para>
<programlisting>device fla0 at isa?</programlisting>
</sect1>
<sect1 id="ro-fs">
<title><filename>rc.diskless</filename> файловые системы в режиме только
чтения</title>
<para>Инициализация встраиваемой системы FreeBSD после загрузки управляется
<filename>/etc/rc.diskless2</filename>
(<filename>/etc/rc.diskless1</filename> для бездисковой загрузки
посредством BOOTP). Этот начальный скрипт вызывается, если поместить
в файл <filename>/etc/rc.conf</filename> такую строку:</para>
<programlisting>diskless_mount=/etc/rc.diskless2</programlisting>
<para><filename>rc.diskless2</filename> монтирует
<filename>/var</filename> как файловую систему в памяти, создает
указываемый список каталогов в <filename>/var</filename> при помощи
команды &man.mkdir.1;, изменяет режимы доступа на некоторые из этих
каталогов и помещает целый набор файлов устройств копированием на
доступный для записи (опять же, это файловая система в памяти) раздел
<filename>/dev</filename>. В процессе выполнения
<filename>/etc/rc.diskless2</filename>, задействуется еще одна переменная
<filename>rc.conf</filename> - <literal>varsize</literal>. Скрипт
<filename>/etc/rc.diskless2</filename> создает раздел
<filename>/var</filename> на основе значения этой переменной из
<filename>rc.conf</filename>:</para>
<programlisting>varsize=8192</programlisting>
<para>Запомните, что это значение указано в секторах. Создание раздела
<filename>/dev</filename> при помощи
<filename>/etc/rc.diskless2</filename>, однако, ограничено
предопределенным значением в 4096 секторов. Легко изменить это значение
непосредственно в файле <filename>/etc/rc.diskless2</filename>, хотя
для каталога <filename>/dev</filename> вряд ли вам понадобится больше
дискового пространства.</para>
<para>Важно помнить, что скрипт <filename>/etc/rc.diskless2</filename>
предполагает, что вы уже удалили ваш обычный раздел
<filename>/tmp</filename> и заменили его символической ссылкой на
<filename>/var/tmp</filename>. Так как <filename>tmp</filename> является
одним из каталогов, создаваемых в <filename>/var</filename> скриптом
<filename>/etc/rc.diskless2</filename> и <filename>/var</filename>
является файловой системой в памяти (которая монтируется с правами чтения
и записи), то <filename>/tmp</filename> будет каталогом, также доступным
для чтения и записи.</para>
<para>Тот факт, что <filename>/var</filename> и <filename>/dev</filename>
являются файловыми системами, доступными для чтения и записи, является
важным признаком, так как раздел <filename>/</filename> (и любые другие
разделы, которые могут находиться на флэш-носителе) должен монтироваться
в режиме только для чтения. Вспомните, что <xref linkend="intro"> мы
касались ограничений флэш-памяти - особенно ограничений, касающихся
возможностей записи. Важно не монтировать файловые системы на
флэш-носителях в режимах чтения и записи, и важность отказа от файла
подкачки не может быть переоценена. Файл подкачки на загруженной системе
может пережечь кусок флэш-носителя менее чем за год. Частое
журналирование и создание временных файлов приводят к тому же результату.
Поэтому, кроме удаления записей <literal>swap</literal> и
<literal>/proc</literal> из вашего файла <filename>/etc/fstab</filename>,
вы должны также изменить поле параметров каждой файловой системы на
<literal>ro</literal> таким образом:</para>
<programlisting>
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1a / ufs ro 1 1
</programlisting>
<para>В результате этих изменений в среднестатической системе несколько
приложений немедленно перестанут работать. Например, порты не будут
устанавливаться из дерева портов из-за отсутствия файла
<filename>/var/db/port.mkversion</filename>, cron не будет нормально
запускаться в результате отсутствия таблиц для него в каталоге
<filename>/var</filename>, созданном
<filename>/etc/rc.diskless2</filename>, а syslog и dhcp будут испытывать
проблемы из-за доступа файловой системы только для чтения, а также
отсутствия записей в <filename>/var</filename>, который был создан
скриптом <filename>/etc/rc.diskless2</filename>. Хотя эти проблемы
являются временными и обсуждаются вместе с решением проблем с запуском
распространенных программных пакетов, в <xref
linkend="strategies">.</para>
<para>Важно помнить, что файловая система, которая была смонтирована
только для чтения при помощи файла <filename>/etc/fstab</filename>, в
любой момент может быть сделана доступной по чтению и записи выдачей
команды:</para>
<screen>
&prompt.root; <userinput>/sbin/mount -uw <replaceable>partition</replaceable></userinput>
</screen>
<para>и может быть возвращена к режиму доступа только для чтения по такой
команде:</para>
<screen>
&prompt.root; <userinput>/sbin/mount -ur <replaceable>partition</replaceable></userinput>
</screen>
</sect1>
<sect1>
<title>Создание файловой системы с нуля</title>
<para>Так как совместимые с ATA компактные флэш-карты распознаются во
FreeBSD как обычные жесткие диски IDE, как это происходит с продуктом
M-Systems Disk-On-Chip (когда вы запускаете ядро с встроенным драйвером
fla), то теоретически вы можете установить FreeBSD по сети при помощи
дискет kern и mfsroot или с компакт-диска. Кроме того, что вам не нужно
записывать какой бы то ни было начальный загрузчик на устройство
M-Systems, никаких дополнительных инструкций не требуется.</para>
<para>Однако даже маленькая установка FreeBSD при помощи обычных процедур
установки может привести к созданию системы размером, превышающим 200
мегабайт. Так как большинство людей используют устройства флэш-памяти
меньшего размера (128 мегабайт считается весьма большим - 32 или даже 16
мегабайт используются гораздо чаще), то установка обычным образом не
подходит&mdash;просто на диске нет места даже для самой минимальной
установки.</para>
<para>Самым простым способом обойти это ограничение на объем является
установка FreeBSD обычным образом на обычный жесткий диск. После
окончания установки, обрежьте операционную систему до размера, который
помещается на ваш флэш-носитель, а затем полностью заархивируйте файловую
систему. Следующие шаги поведут вас через процесс подготовки части
флэш-памяти для вашей заархивированной файловой системы. Запомните, что
из-за того, что обычная установка не выполнялась, такие операции, как
разбиение на разделы, разметка, создание файловой системы и так далее
должны быть выполнены вручную. Кроме дискет kern и mfsroot вам также
нужно воспользоваться дискетой fixit. Если вы используете M-Systems
Disk-On-Chip, то ядро с дискеты kern должно иметь вкомпилированный
параметр <literal>fla</literal>, описываемый в <xref linkend="kernel">.
Пожалуйста, обратитесь к <xref linkend="kern.flp"> для получения указаний
по созданию нового ядра для <filename>kern.flp</filename>.</para>
<procedure>
<step>
<title>Разбиение вашего флэш-носителя на разделы</title>
<para>После загрузки при помощи дискет kern и mfsroot, выберите пункт
<literal>custom</literal> из меню установки. Из следующего пункта
меню выберите <literal>partition</literal>. В меню работы с
разделами вы должны удалить все существующие разделы при помощи
клавиши <keycap>d</keycap>. После удаления всех имеющихся разделов
создайте раздел при помощи клавиши <keycap>c</keycap> и согласитесь
с предлагаемым по умолчанию размером раздела. Когда вы будете
опрошены на предмет типа раздела, удостоверьтесь, что значение типа
равно <literal>165</literal>. Теперь запишите эту таблицу разделов
на диск, нажав клавишу <keycap>w</keycap> (на этом экране эта опция
скрыта). Находясь в меню выбора менеджера загрузки, обратите
внимание на выбор <literal>None</literal>, если вы используете
M-Systems Disk-On-Chip. Если вы используете компактную флэш-карту,
совместимую с ATA, вы должны выбрать FreeBSD Boot Manager. Теперь
нажмите клавишу <keycap>q</keycap> для выхода из меню работы с
разделами. Должно быть выдано еще раз меню для выбора менеджера
загрузки - повторите то, что вы выбирали ранее.</para>
</step>
<step>
<title>Создание файловых систем на вашем устройстве флэш-памяти</title>
<para>Выйдите из меню установки custom, и из главного меню установки
выберите пункт <literal>fixit</literal>. После входа в режим работы
fixit, введите следующие команды:</para>
<informaltable frame="none">
<tgroup cols="2">
<thead>
<row>
<entry align="center">Совместимые с ATA</entry>
<entry align="center">Disk-On-Chip</entry>
</row>
</thead>
<tbody>
<row>
<entry><para><screen>&prompt.root; <userinput>mknod /dev/ad0c c 116 0</userinput>
&prompt.root; <userinput>mknod /dev/ad0c c 116 2</userinput>
&prompt.root; <userinput>disklabel -e /dev/ad0c</userinput></screen></para></entry>
<entry><para><screen>&prompt.root; <userinput>mknod /dev/fla0c c 102 2</userinput>
&prompt.root; <userinput>mknod /dev/fla0c c 102 2</userinput>
&prompt.root; <userinput>disklabel -e /dev/fla0c</userinput></screen></para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>В этот момент вы войдете в редактор vi из-под команды disklabel.
Если вы используете Disk-On-Chip, то первым шагом будет изменение
значения типа около начала файла с <literal>ESDI</literal> на
<literal>DOC2K</literal>. Затем, вне зависимости от того,
используете ли вы Disk-On-Chip или совместимый с ATA компактный
флэш-носитель, вам нужно добавить строку a: в конце файла. Эта
строка <literal>a:</literal> должна выглядеть примерно так:</para>
<programlisting>
a: <replaceable>123456</replaceable> 0 4.2BSD 0 0
</programlisting>
<para>Здесь <replaceable>123456</replaceable> является числом, в
точности совпадающим с тем, что характеризует размер имеющейся
записи для <literal>c:</literal>. В общем, вы копируете существующую
строку для <literal>c:</literal> для строки <literal>a:</literal>,
не забывая определить fstype как <literal>4.2BSD</literal>.
Сохраните файл и завершите редактирование.</para>
<informaltable frame="none">
<tgroup cols="2">
<thead>
<row>
<entry align="center">Совместимые с ATA</entry>
<entry align="center">Disk-On-Chip</entry>
</row>
</thead>
<tbody>
<row>
<entry><para><screen>&prompt.root; <userinput>disklabel -B -r /dev/ad0c</userinput>
&prompt.root; <userinput>newfs /dev/ad0a</userinput></screen></para></entry>
<entry><para><screen>&prompt.root; <userinput>disklabel -B -r /dev/fla0c</userinput>
&prompt.root; <userinput>newfs /dev/fla0a</userinput></screen></para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</step>
<step>
<title>Размещение вашей файловой системы на флэш-носителе</title>
<para>Смонтируйте только что подготовленный флэш-носитель:</para>
<informaltable frame="none">
<tgroup cols="2">
<thead>
<row>
<entry align="center">Совместимые с ATA</entry>
<entry align="center">Disk-On-Chip</entry>
</row>
</thead>
<tbody>
<row>
<entry><para><screen>&prompt.root; <userinput>mount /dev/ad0a /flash</userinput></screen></para></entry>
<entry><para><screen>&prompt.root; <userinput>mount /dev/fla0 /flash</userinput></screen></para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Подключите эту машину к сети, чтобы можно было перенести наш
tar-файл и распаковать его в файловую систему на флэш-носителе. Вот
пример того, как это можно сделать:</para>
<screen>
&prompt.root; <userinput>ifconfig xl0 192.168.0.10 netmask 255.255.255.0</userinput>
&prompt.root; <userinput>route add default 192.168.0.1</userinput>
</screen>
<para>Теперь, когда машина находится в сети, перепишите ваш tar-файл.
Здесь вы можете столкнуться с некоторой проблемой - если объем вашей
флэш-памяти равен, к примеру, 128 мегабайтам, а ваш tar-файл
превышает 64 мегабайта, то вы не можете одновременно разместить
tar-файл на флэш-носителе и распаковать его - вам не хватит места.
Одним из решений этой проблемы, если вы используете ftp, является
распаковка файла во время его передачи по ftp. Если вы передаете
файл именно так, то вы никогда не получите на диске одновременно
архивный файл и его содержимое:</para>
<screen>
<prompt>ftp></prompt> <userinput>get tarfile.tar "| tar xvf -"</userinput>
</screen>
<para>Если ваш файл обработан утилитой gzip, вы также можете этого
добиться:</para>
<screen>
<prompt>ftp></prompt> <userinput>get tarfile.tar "| zcat | tar xvf -"</userinput>
</screen>
<para>После того, как вы получили содержимое вашей заархивированной
файловой системы на файловой системе флэш-памяти, вы можете
размонтировать флэш-память и выполнить перезагрузку:</para>
<screen>
&prompt.root; <userinput>cd /</userinput>
&prompt.root; <userinput>umount /flash</userinput>
&prompt.root; <userinput>exit</userinput>
</screen>
<para>Полагая, что вы правильно настроили вашу файловую систему при
ее построении на обычном диске (с вашей файловой системой,
смонтированной в режиме доступа только для чтения и необходимыми
параметрами, присутствующими в ядре) вы должны успешно загрузить вашу
встраиваемую систему на основе FreeBSD.</para>
</step>
</procedure>
</sect1>
<sect1 id="kern.flp">
<title>Построение устнововочной дискеты <filename>kern.flp</filename> с
драйвером fla</title>
<note>
<para>Этот раздел статьи предназначен только тем, кто использует
флэш-носители M-Systems Disk-On-Chip.</para>
</note>
<para>Возможно, что на загрузочная дискете <filename>kern.flp</filename>
нет ядра со встроенным драйвером <devicename>fla</devicename>, который
необходим для работы системы с Disk-On-Chip. Если вы загрузились с
установочных дискет и оказалось, что диски не были обнаружены, то,
вероятно, в вашем ядре отсутствует драйвер
<devicename>fla</devicename>.</para>
<para>После построения вами ядра с поддержкой <devicename>fla</devicename>,
которое имеет объем, меньший, чем 1.4 мегабайт, вы можете создать
собственный образ дискеты <filename>kern.flp</filename> с этим ядром
с помощью следующей последовательности действий:</para>
<procedure>
<step>
<para>Возьмите существующий файл образа kern.flp</para>
</step>
<step>
<para>
<screen>
&prompt.root; <userinput>vnconfig vn0c kern.flp</userinput>
</screen>
</para>
</step>
<step>
<para>
<screen>
&prompt.root; <userinput>mount /dev/vn0c /mnt</userinput>
</screen>
</para>
</step>
<step>
<para>Перепишите ваш файл ядра в каталог <filename>/mnt</filename>,
заместив при этом уже находящееся там ядро</para>
</step>
<step>
<para>
<screen>
&prompt.root; <userinput>vnconfig -d vn0c</userinput>
</screen>
</para>
</step>
</procedure>
<para>Теперь в вашем файле <filename>kern.flp</filename> находится новое
ядро.</para>
</sect1>
<sect1 id="strategies">
<title>Стратегии работы с системой для случаев небольших и доступных
только для чтения файловых систем</title>
<para>В <xref linkend="ro-fs"> было указано, что файловая система
<filename>/var</filename>, создаваемая скриптом
<filename>/etc/rc.diskless2</filename> и наличие корневой файловой
системы, доступной только для чтения, приводят к проблемам при работе
многих распространенных программных пакетов, используемых во FreeBSD.
В этой статье будут даны рекомендации по настройке нормальной работы
cron и syslog, установке портов и веб-сервера Apache.</para>
<sect2>
<title>cron</title>
<para>В файле <filename>/etc/rc.diskless2</filename> имеется переменная
<literal>var_dirs</literal>. Эта переменная задает список каталогов,
разделенных запятыми, которые будут созданы в каталоге
<filename>/var</filename> после его монтирования как файловой системы
в памяти. <filename>cron</filename> и <filename>cron/tabs</filename>
в этот список не входят, а без этих каталогов cron нормально работать
не будет. Включив <literal>cron</literal>,
<literal>cron/tabs</literal> и, может быть, даже <literal>at</literal>
и <literal>at/jobs</literal> в качестве элементов этой переменной, вы
обеспечите работу даемонов &man.cron.8; и &man.at.1;.</para>
<para>Однако это все же не решит проблему с сохранением cron-таблиц
между перезагрузками. Когда система перезагружается, то файловая
система <filename>/var</filename>, которая располагается в памяти,
будет уничтожена, вместе со всеми cron-таблицами, которые вы могли там
иметь. Поэтому одним из решений может стать создание cron-таблиц для
пользователей, которым они нужны, монтирование вашей файловой системы
<filename>/</filename> в режиме чтения и записи и копирование этих
cron-таблиц в безопасное место, например,
<filename>/etc/tabs</filename> и последующее добавление строки в
конец скрипта <filename>/etc/rc.diskless2</filename> для копирования
этих cron-таблиц в каталог <filename>/var/cron/tabs</filename> после
его создания во время инициализации системы. Вам может также
потребоваться добавить строку, которая изменяет режимы доступа и
права на каталоги, которые вы создали и на файлы, которые вы
скопировали в скрипте <filename>/etc/rc.diskless2</filename>.</para>
</sect2>
<sect2>
<title>syslog</title>
<para>В файле <filename>syslog.conf</filename> задано местоположение
некоторых файлов протоколов, которые имеются в каталоге
<filename>/var/log</filename>. Эти файлы не создаются скриптом
<filename>/etc/rc.diskless2</filename> во время инициализации системы
Поэтому где-нибудь в скрипте <filename>/etc/rc.diskless2</filename>,
после секции, создающей каталоги в <filename>/var</filename>, вам нужно
добавить нечто вроде следующего:</para>
<screen>
&prompt.root; <userinput>touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages</userinput>
&prompt.root; <userinput>chmod 0644 /var/log/*</userinput>
</screen>
<para>Вам также потребуется добавить каталог с протоколами работы к
списку каталогов, создаваемых скриптом
<filename>/etc/rc.diskless2</filename>.</para>
</sect2>
<sect2>
<title>Установка портов</title>
<para>Перед тем, как обсудить изменения, которые нужно сделать для
успешного использования дерева портов, необходимо напомнить о том,
что ваши файловые системе на флэш-носителях доступны только для чтения.
Поэтому вам нужно временно монтировать их в режиме чтения и записи,
используя параметры командной строки, как это показано в
<xref linkend="ro-fs">. Вы всегда должны перемонтировать эти файловые
системы в режим только для чтения после окончания работ - опасно
оставлять их в режиме чтения и записи, чтобы ни один процесс не смог
начать протоколирование или каким-либо другим образом постоянно
записывать данные на флэш-память и портить ее.</para>
<para>Чтобы можно было войти в каталог с портами и успешно выполнить
команду <command>make install</command>, необходимо наличие файла
<filename>/var/db/port.mkversion</filename>, в котором записана
правильная дата. Затем мы должны создать каталог для пакаджей в
файловой системе, не располагающейся в памяти, где будут храниться
пакаджи между перезагрузками. Так как для установки пакаджа в любом
случае требуется монтирование ваших файловых систем для чтения и
записи, имеет смысл выделить область флэш-носителя также и для записи
информации о пакадже.</para>
<para>Прежде всего создайте каталог с базой данных о пакаджах. Обычно
это каталог <filename>/var/db/pkg</filename>, но мы не можем разместить
базу именно здесь, так как она исчезнет после перезагрузки
системы.</para>
<screen>&prompt.root; <userinput>mkdir /etc/pkg</userinput></screen>
<para>Теперь в скрипт <filename>/etc/rc.diskless2</filename> добавьте
строку, которая связывает каталог <filename>/etc/pkg</filename> с
<filename>/var/db/pkg</filename>. Например:</para>
<screen>
&prompt.root; <userinput>ln -s /etc/pkg /var/db/pkg</userinput>
</screen>
<para>Добавьте в скрипт <filename>/etc/rc.diskless2</filename> еще одну
строку, которая создает и копирует
<filename>/var/db/port.mkversion</filename></para>
<screen>
&prompt.root; <userinput>touch /var/db/port.mkversion</userinput>
&prompt.root; <userinput>chmod 0644 /var/db/port.mkversion</userinput>
&prompt.root; <userinput>echo <replaceable>20010412</replaceable> >> /var/db/port.mkversion</userinput>
</screen>
<para>где <replaceable>20010412</replaceable> является датой,
соответствующей вашей версии FreeBSD.</para>
<para>Теперь каждый раз при монтировании ваших файловых систем для чтения
и записи и установки пакаджа, команда <command>make install</command>
будет работать, потому что найдет подходящий файл
<filename>/var/db/port.mkversion</filename>, а информация о пакадже
будет успешно записана в каталог <filename>/etc/pkg</filename> (так как
файловая система будут в это время смонтирована для чтения и записи),
который всегда будет доступным операционной системе как
<filename>/var/db/pkg</filename>.</para>
</sect2>
<sect2>
<title>Веб-сервер Apache</title>
<para>Apache хранит pid-файлы и протоколы в каталоге
<filename><replaceable>apache_install</replaceable>/logs</filename>.
Так как этот каталог, без сомнения, располагается на файловой системе,
доступной только для чтения, то это работать не будет. Необходимо
добавить новый каталог к списку каталогов из
<filename>/etc/rc.diskless2</filename> для их создания в каталоге
<filename>/var</filename> и связать
<filename><replaceable>apache_install</replaceable>/logs</filename> с
<filename>/var/log/apache</filename>. Нужно также задать права доступа
и владельца нового каталога.</para>
<para>Сначала добавьте каталог <literal>log/apache</literal> к списку
каталогов, создаваемых скриптом
<filename>/etc/rc.diskless2</filename>.</para>
<para>Затем добавьте в скрипт <filename>/etc/rc.diskless2</filename>
после секции создания каталогов такие команды:</para>
<screen>
&prompt.root; <userinput>chmod 0774 /var/log/apache</userinput>
&prompt.root; <userinput>chown nobody:nobody /var/log/apache</userinput>
</screen>
<para>И наконец, удалите существующий каталог
<filename><replaceable>apache_install</replaceable>/logs</filename> и
замените его ссылкой:</para>
<screen>
&prompt.root; <userinput>rm -rf (apache_install)/logs</userinput>
&prompt.root; <userinput>ln -s /var/log/apache (apache_install)/logs</userinput>
</screen>
</sect2>
</sect1>
</article>

View file

@ -0,0 +1,22 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/vm-design/Makefile,v 1.2 2001/07/25 10:26:34 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER=andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
IMAGES= fig1.eps fig2.eps fig3.eps fig4.eps
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,922 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/vm-design/article.sgml,v 1.3 2001/07/21 14:26:19 phantom Exp $
Original revision: 1.4
-->
<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article>
<articleinfo>
<title>Элементы архитектуры системы виртуальной памяти во FreeBSD</title>
<authorgroup>
<author>
<firstname>Matthew</firstname>
<surname>Dillon</surname>
<affiliation>
<address>
<email>dillon@apollo.backplane.com</email>
</address>
</affiliation>
</author>
</authorgroup>
<!--
<para>Перевод на русский язык: Андрей Захватов
(<email>andy@FreeBSD.org</email>)</para>
-->
<abstract>
<para>Название статьи говорит лишь о том, что я попытаюсь описать в целом
VM-систему понятным языком. Последний год я сосредоточил усилия в
работе над несколькими основными подсистемами ядра FreeBSD, среди
которых подсистемы VM и подкачки были самыми интересными, а NFS
оказалась &lsquo;необходимой рутиной&rsquo;. Я переписал лишь малую
часть кода. Что касается VM, то я единственным большим обновлением,
которое я сделал, является переделка подсистемы подкачки. Основная
часть моей работы заключалась в зачистке и поддержке кода, с
единственной заметной переделкой кода и без значительной переделки
алгоритмов в VM-подсистеме. В основном теоретическая база работы
VM-подсистемы осталась неизменной, а большинство благодарностей за
современных нововведения за последние несколько лет принадлежат
John Dyson и David Greenman. Не являясь историком, как Керк, я не буду
пытаться связать различные возможности системы с именами, потому что
обязательно ошибусь.</para>
</abstract>
<legalnotice>
<para>Первоначально эта статья была опубликована в номере <ulink
url="http://www.daemonnews.org/">DaemonNews</ulink> за январь 2000
года. Эта версия статьи может включать добавления, касающиеся
изменений в реализации VM во FreeBSD от Мэтта и других авторов.</para>
</legalnotice>
</articleinfo>
<sect1>
<title>Введение</title>
<para>Перед тем, как перейти непосредственно к существующей архитектуре,
потратим немного времени на рассмотрение вопроса о необходимости
поддержки и модернизации любого длительно живущего кода. В мире
программирования алгоритмы становятся более важными, чем код, и именно
из-за академических корней BSD изначально большое внимание уделялось
проработке алгоритмов. Внимание, уделенное архитектуре, в общем
отражается на ясности и гибкости кода, который может быть достаточно
легко изменен, расширен или с течением времени заменен. Хотя некоторые
считают BSD &lsquo;старой&rsquo; операционной системой, те их нас, кто
работает над ней, видят ее скорее системой со &lsquo;зрелым&rsquo; кодом
с различными компонентами, которые были заменены, расширены или изменены
современным кодом. Он развивается, и FreeBSD остается передовой
системой, вне зависимости от того, насколько старой может быть часть
кода. Это важное отличие, которое, к сожалению, не всеми понимается.
Самой большой ошибкой, которую может допустить программист, является
игнорирование истории, и это именно та ошибка, которую сделали многие
другие современные операционные системы. Самым ярки примером здесь
является NT, и последствия ужасны. Linux также в некоторой степени
совершил эту ошибку&mdash;достаточно, чтобы мы, люди BSD, по крайней
мере по разу отпустили по этому поводу шутку. Проблема Linux заключается
просто в отсутствии опыта и истории для сравнения идей, проблема, которая
легко и быстро решается сообществом Linux точно так же, как она решается
в сообществе BSD&mdash;постоянной работой над кодом. Разработчики NT,
с другой стороны, постоянно совершают те же самые ошибки, что были
решены в UNIX десятки лет назад, а затем тратят годы на их устранение.
Снова и снова. Есть несколько случаев &lsquo;проработка архитектуры
отсутствует&rsquo; и &lsquo;мы всегда правы, потому что так говорит наш
отдел продаж&rsquo;. Я плохо переношу тех, кого не учит история.</para>
<para>Большинство очевидной сложности архитектуры FreeBSD, особенно в
подсистеме VM/Swap, является прямым следствием того, что она решает
серьезные проблемы с производительностью, которые проявляются при
различных условиях. Эти проблемы вызваны не плохой проработкой
алгоритмов, а возникают из окружающих факторов. В любом прямом сравнении
между платформами эти проблемы проявляются, когда системные ресурсы
начинают истощаться. Так как я описываю подсистему VM/Swap во FreeBSD,
то читатель должен всегда иметь в виду два обстоятельства. Во-первых,
самым важным аспектом при проектировании производительности является то,
что называется &ldquo;оптимизацией критического маршрута&rdquo;. Часто
случается, что оптимизация производительности дает прирост объема кода
ради того, чтобы критический маршрут работал быстрее. Во-вторых,
четкость общей архитектуры оказывается лучше сильно оптимизированной
архитектуры с течением времени. Когда как обобщенная архитектура
может быть медленнее, чем оптимизированная архитектура, при первой
реализации, при обобщенной архитектуре легче подстраиваться под
изменяющиеся условия и чрезмерно оптимизированная архитектура оказывается
непригодной. Любой код, который должен выжить и поддаваться поддержке
годы, должен поэтому быть тщательно продуман с самого начала, даже если
это стоит потери производительности. Двадцать лет назад были те, кто
отстаивал преимущество программирования на языке ассемблера перед
программированием на языке высокого уровня, потому что первый генерировал
в десять раз более быстрый код. В наши дни ошибочность этого аргумента
очевидна&mdash;можно провести параллели с построением алгоритмов и
обобщением кода.</para>
</sect1>
<sect1>
<title>Объекты VM</title>
<para>Лучше всего начать описание VM-системы FreeBSD с попытки взглянуть на
нее с точки зрения пользовательского процесса. Каждый пользовательский
процесс имеет единое, принадлежащее только ему и неразрывное адресное
пространство VM, содержащее несколько типов объектов памяти. Эти объекты
имеют различные характеристики. Код программы и ее данные являются
единым файлом, отображаемым в память (это выполняющийся двоичный файл),
однако код программы доступен только для чтения, когда как данные
программы размещаются в режиме копирования-при-записи. BSS программы
представляет собой всего лишь выделенную область памяти, заполненную,
если это требовалось, нулями, что называется обнулением страниц памяти
по требованию. Отдельные файлы могут также отображаться в адресное
пространство, именно так работают динамические библиотеки. Такие
отображения требуют изменений, чтобы оставаться принадлежащими процессу,
который их выполнил. Системный вызов fork добавляет переводит проблему
управления VM полностью в новую плоскость, вдобавок к уже имеющимся
сложностям.</para>
<para>Иллюстрирует сложность страница данных двоичной программы (которая
является страницей копируемой-при-записи). Двоичная программа содержит
секцию предварительно инициализированных данных, которая первоначально
отображается непосредственно из файла программы. Когда программа
загружается в Vm-пространство процесса, эта область сначала отображается
в память и поддерживается бинарным файлом программы, позволяя VM-системе
освобождать/повторно использовать страницу, а потом загружать ее снова
из бинарного файла. Однако в момент, когда процесс изменяет эти данные,
VM-система должна сделать копию страницы, принадлежащую только этому
процессу. Так как эта копия была изменена, то VM-система не может больше
освобождать эту страницу, так как впоследствии ее невозможно будет
восстановить.</para>
<para>Вы тут же заметите, что то, что сначало было простым отображением
файла в память, становится гораздо более сложным предметом. Данные могут
модифицироваться постранично, когда как отображение файла выполняется для
многих страниц за раз. Сложность еще более увеличивается, когда процесс
выполняет вызов fork. При этом порождаются два процесса&mdash;каждый со
с собственным адресным пространством, включающим все изменения,
выполненные исходным процессом до вызова функции
<function>fork()</function>. Было бы глупо для VM-системы делать полную
копию данных во время вызова <function>fork()</function>, так как весьма
вероятно, что один из двух процессов будет нужен только для чтения из
той страницы, что позволяет использование исходной страницы. То, что
было страницей, принадлежащей только процессу, сделается снова страницей,
копируемой при записи, так как каждый из процессов (и родитель, и
потомок) полагают, что их собственные изменения после разветвления будут
принадлежать только им, и не затронут родственный процесс.</para>
<para>FreeBSD управляет всем этим при помощи многоуровневой модели
VM-объектов. Исходный файл с двоичной программой переносится на самый
нижний уровень объектов VM. Уровень страниц, копируемых при записи,
находится выше него, и хранит те страницы, которые были скопированы из
исходного файла. Если программа модифицирует страницы данных,
относящиеся к исходному файлу, то система VM обнаруживает это и переносит
копию этой страницы на более высокий уровень. Когда процесс
разветвляется, добавляются новые уровни VM-объектов. Это можно показать
на простом примере. Функция <function>fork()</function> является общей
операцией для всех систем *BSD, так что в этом примере будет
рассматриваться программа, которая запускается, а затем разветвляется.
Когда процесс запускается, VM-система создает некоторый уровень объектов,
обозначим его A:</para>
<mediaobject>
<imageobject>
<imagedata fileref="fig1" format="EPS">
</imageobject>
<textobject>
<literallayout class="monospaced">+---------------+
| A |
+---------------+</literallayout>
</textobject>
<textobject>
<phrase>Рисунок</phrase>
</textobject>
</mediaobject>
<para>A соответствует файлу&mdash;по необходимости страницы памяти могут
высвобождаться и подгружаться с носителя файла. Подгрузка с диска
может потребоваться программе, однако на самом деле мы не хотим, чтобы
она записывалась обратно в файл. Поэтому VM-система создает второй
уровень, B, который физически поддерживается дисковым пространством
подкачки:</para>
<mediaobject>
<imageobject>
<imagedata fileref="fig2" format="EPS">
</imageobject>
<textobject>
<literallayout class="monospaced">+---------------+
| B |
+---------------+
| A |
+---------------+</literallayout>
</textobject>
</mediaobject>
<para>При первой записи в страницу после выполнения этой операции, в B
создается новая страница, содержимое которой берется из A. Все страницы
в B могут сбрасываться и считываться из устройства подкачки. Когда
программа ветвится, VM-система создает два новых уровня объектов&mdash;C1
для порождающего процесса и C2 для порожденного&mdash;они располагаются
поверх B:</para>
<mediaobject>
<imageobject>
<imagedata fileref="fig3" format="EPS">
</imageobject>
<textobject>
<literallayout class="monospaced">+-------+-------+
| C1 | C2 |
+-------+-------+
| B |
+---------------+
| A |
+---------------+</literallayout>
</textobject>
</mediaobject>
<para>В этом случае, допустим, что страница в B была изменена начальным
родительским процессом. В процессе возникнет ситуация копирования при
записи и страница скопируется в C1, при этом исходная страница останется
в B нетронутой. Теперь допустим, что та же самая страница в B изменяется
порожденным процессом. В процессе возникнет ситуация копирования при
записи и страница скопируется в C2. Исходная страница в B теперь
полностью скрыта, так как и C1, и C2 имеют копии, а B теоретически может
быть уничтожена, если она не представляет собой 'реального' файла).
Однако такую оптимизацию не так уж просто осуществить, потому что она
делается на уровне мелких единиц. Во FreeBSD такая оптимизация не
выполняется. Теперь положим (а это часто случается), что порожденный
процесс выполняет вызов <function>exec()</function>. Его текущее
адресное пространство обычно заменяется новым адресным пространством,
представляющим новый файл. В этом случае уровень C2 уничтожается:</para>
<mediaobject>
<imageobject>
<imagedata fileref="fig4" format="EPS">
</imageobject>
<textobject>
<literallayout class="monospaced">+-------+
| C1 |
+-------+-------+
| B |
+---------------+
| A |
+---------------+</literallayout>
</textobject>
</mediaobject>
<para>В этом случае количество потомков B становится равным одному и все
обращения к B теперь выполняются через C1. Это означает, что B и C1
могут быть объединены. Все страницы в B, которые также существуют и в
C1, во время объединения из B удаляются. Таким образом, хотя оптимизация
на предыдущем шаге может не делаться, мы можем восстановить мертвые
страницы при окончании работы процессов или при вызове
<function>exec()</function>.</para>
<para>Такая модель создает некоторое количество потенциальных проблем.
Первая, с которой вы можете столкнуться, заключается в сравнительно
большой последовательности уровней объектов VM, на сканирование которых
тратится время и память. Большое количество уровней может возникнуть,
когда процессы разветвляются, а затем разветвляются еще раз (как
порожденные, так и порождающие). Вторая проблема заключается в том, что
вы можете столкнуться с мертвыми, недоступными страницами глубоко в
иерархии объектов VM. В нашем последнем примере если как родитель, так
и потомок изменяют одну и ту же страницу, они оба получают собственные
копии страницы, а исходная страница в B становится никому не доступной.
такая страница в B может быть высвобождена.</para>
<para>FreeBSD решает проблему с глубиной вложенности с помощью приема
оптимизации, который называется &ldquo;All Shadowed Case&rdquo;. Этот
случай возникает, если в C1 либо C2 возникает столько случаев копирования
страниц при записи, что они полностью закрывают все страницы в B.
Допустим, что такое произошло в C1. C1 может теперь полностью заменить
B, так что вместо цепочек C1->B->A и C2->B->A мы теперь имеем цепочки
C1->A и C2->B->A. Но посмотрите, что получается&mdash;теперь B имеет
только одну ссылку (C2), так что мы можем объединить B и C2. В конечном
итоге B будет полностью удален и мы имеем цепочки C1->A и C2->A. Часто B
будет содержать большое количество страниц, и ни C1, ни C2 не смогут
полностью их заменить. Если мы снова породим процесс и создадим набор
уровней D, при этом, однако, более вероятно, что один из уровней D
постепенно сможет полностью заместить гораздо меньший набор данных,
представленный C1 и C2. Та же самая оптимизация будет работать в любой
точке графа и главным результатом этого является то, что даже на сильно
загруженной машине с множеством порождаемых процессов стеки объектов VM
не часто бывают глубже четырех уровней. Это так как для порождающего,
так и для порожденного процессов, и остается в силе как в случае, когда
ветвление делает родитель, так и в случае, когда ветвление выполняет
потомок.</para>
<para>Проблема с мертвой страницей все еще имеет место, когда C1 или C2
не полностью перекрывают B. Из-за других применяемых нами методов
оптимизации этот случай не представляет большой проблемы и мы просто
позволяем таким страницам существовать. Если система испытывает нехватку
оперативной памяти, она выполняет их выгрузку в область подкачки, что
занимает некоторое пространство в области подкачки, но это все.</para>
<para>Преимущество модели VM-объектов заключается в очень быстром
выполнении функции <function>fork()</function>, так как при этом не
выполняется реального копирования данных. Минусом этого подхода является
то, что вы можете построить сравнительно сложную иерархию объектов VM,
которая несколько замедляет обработку ситуаций отсутствия страниц памяти,
и к тому же тратится память на управление структурами объектов VM.
Приемы оптимизации, применяемые во FreeBSD, позволяют снизить значимость
этих проблем до степени, когда их можно без особых потерь
игнорировать.</para>
</sect1>
<sect1>
<title>Уровни области подкачки</title>
<para>Страницы с собственными данными первоначально являются страницами,
копируемыми при записи или заполняемыми нулями. Когда выполняется
изменение, и, соответственно, копирование, начальное хранилище объекта
(обычно файл) не может больше использоваться для хранения копии страницы,
когда VM-системе нужно использовать ее повторно для других целей. В
этот момент на помощь приходит область подкачки. Область подкачки
выделяется для организации хранилища памяти, которая иначе не может быть
доступна. FreeBSD создает структуру управления подкачкой для объекта
VM, только когда это действительно нужно. Однако структура управления
подкачкой исторически имела некоторые проблемы.</para>
<para>Во FreeBSD 3.x в структуре управления областью подкачки
предварительно выделяется массив, который представляет целый объект,
требующий хранения в области подкачки&mdash;даже если только несколько
страниц этого объекта хранятся в области подкачки. Это создает проблему
фрагментации памяти ядра в случае, когда в память отображаются большие
объекты или когда ветвятся процессы, занимающие большой объем памяти при
работе (RSS). Также для отслеживания памяти подкачки в памяти ядра
поддерживается &lsquo;список дыр&rsquo;, и он также несколько
фрагментирован. Так как 'список дыр' является последовательным списком,
то производительность при распределении и высвобождении памяти в области
подкачки неоптимально и ее сложность зависит от количества страниц как
O(n). Также в процессе высвобождения памяти в области подкачки требуется
выделение памяти в ядре, и это приводит к проблемам блокировки при
недостатке памяти. Проблема еще более обостряется из-за дыр, создаваемых
по чередующемуся алгоритму. Кроме того, список распределения блоков в
области подкачки легко оказывается фрагментированной, что приводит к
распределению непоследовательных областей. Память ядра также должна
распределяться по ходу работы для дополнительных структур по управлению
областью подкачки при выгрузке страниц памяти в эту область. Очевидно,
что мест для усовершенствований предостаточно.</para>
<para>Во FreeBSD 4.x подсистема управления областью подкачки была полностью
переписана мною. При этом структуры управления областью подкачки
распределяются при помощи хэш-таблицы, а не через линейный массив, что
дает им фиксированный размер при распределении и работу с гораздо
меньшими структурами. Вместо того, чтобы использовать однонаправленный
связный список для отслеживания выделения пространства в области
подкачки, теперь используется побитовая карта блоков области подкачки,
выполненная в основном в виде древовидной структуры с информацией о
свободнов пространстве, находящейся в узлах структур. Это приводит к
тому, что выделение и высвобождение памяти в области подкачки становится
операцией сложности O(1). Все дерево также распределяется заранее для
того, чтобы избежать распределения памяти ядра во время операций с
областью подкачки при критически малом объеме свободной памяти. В конце
концов, система обращается к области подкачки при нехватке памяти, так
что мы должны избежать распределения памяти ядра в такие моменты для
избежания потенциальных блокировок. Наконец, для уменьшения фрагментации
дерево может распределять большой последовательный кусок за раз,
пропуская меньшие фрагментированные области. Я не сделал последний шаг
к заведению 'указателя на распределение', который будет передвигаться
по участку области подкачки при выделении памяти для обеспечения в
будущем распределения последовательных участков, или по крайней мере
местоположения ссылки, но я убежден, что это может быть сделано.</para>
</sect1>
<sect1>
<title>Когда освобождать страницу</title>
<para>Так как система VM использует всю доступную память для кэширования
диска, то обычно действительно незанятых страниц очень мало. Система VM
зависит от того, как она точно выбирает незанятые страницы для повторного
использования для новых распределений. Оптимальный выбор страниц для
высвобождения, возможно, является самой важной функцией любой VM-системы,
из тех, что она может выполнять, потому что при неправильном выборе
система VM вынуждена будет запрашивать страницы с диска, значительно
снижая производительность всей системы.</para>
<para>Какую дополнительную нагрузку мы может выделить в критическом пути
для избежания высвобождения не той страницы? Каждый неправильный выбор
будет стоить нам сотни тысяч тактов работы центрального процессора и
заметное замедление работы затронутых процессов, так что мы должны
смириться со значительными издержками для того, чтобы была заведомо
выбрана правильная страница. Вот почему FreeBSD превосходит другие
системы в производительности при нехватке ресурсов памяти.</para>
<para>Алгоритм определения свободной страницы написан на основе истории
использования страниц памяти. Для получения этой истории система
использует возможности бита использования памяти, которые имеются в
большинстве аппаратных таблицах страниц памяти.</para>
<para>В любом случае, бит использования страницы очищается, и в некоторый
более поздний момент VM-система обращается к странице снова и
обнаруживает, что этот бит установлен. Это указывает на то, что страница
активно используется. Периодически проверяя этот бит, накапливается
история использования (в виде счетчика) физической страницы. Когда позже
VM-системе требуется высвободить некоторые страницы, проверка истории
выступает указателем при определении наиболее вероятной кандидатуры для
повторного использования.</para>
<sidebar>
<title>Что, если аппаратура не имеет бита использования страницы?</title>
<para>Для тех платформ, что не имеют этой возможности, система эмулирует
этот бит. Она снимает отображение или защищает страницу, что приводит
к ошибке доступа к странице, если к странице выполняется повторное
обращение. При возникновении этой ошибки система просто помечает
страницу как используемую и снимает защиту со страницы, так что она
может использоваться. Хотя использование такого приема только для
определения использования страницы весьма накладно, это выгоднее, чем
повторно использовать страницу для других целей и обнаружить, что
она снова нужна процессу и подгружать ее с диска.</para>
</sidebar>
<para>FreeBSD использует несколько очередей страниц для обновления выбора
страниц для повторного использования, а также для определения того, когда
же грязные страницы должны быть сброшены в хранилище. Так как таблицы
страниц во FreeBSD являются динамическими объектами, практически ничего
не стоит вырезать страницу из адресного пространства любого использующего
ее процесса. После того, как подходящая страница, на основе счетчика
использования, выбрана, именно это и выполняется. Система должна
отличать между чистыми страницами, которые теоретически могут быть
высвобождены в любое время, и грязными страницами, которые сначала должны
быть переписаны в хранилище перед тем, как их можно будет использовать
повторно. После нахождения подходящей страницы она перемещается в
неактивную очередь, если она является грязной, или в очередь кэша, если
она чистая. Отдельный алгоритм, основывающийся на отношении количества
грязных страниц к чистым, определяет, когда грязные страницы в неактивной
очереди должны быть сброшены на диск. Когда это выполнится, сброшенные
страницы перемещаются из неактивной очереди в очередь кэша. В этот
момент страницы в очереди кэша могут быть повторно активизированы VM со
сравнительно малыми накладными расходами. Однако страницы в очереди кэша
предполагается &lsquo;высвобождать немедленно&rsquo; и повторно
использовать в LRU-порядке (меньше всего используемый), когда системе
потребуется выделение дополнительной памяти.</para>
<para>Стоит отметить, что во FreeBSD VM-система пытается разделить чистые и
грязные страницы во избежание срочной необходимости в ненужных сбросах
грязных страниц (что отражается на пропускной способности ввода/вывода) и
не перемещает беспричинно страницы между разными очередями, когда
подсистема управления памятью не испытывает нехватку ресурсов. Вот
почему вы можете видеть, что при выполнении команды
<command>systat -vm</command> в некоторых системах значение счетчика
очереди кэша мало, а счетчик активной очереди большой. При повышении
нагрузки на VM-систему она прилагает большие усилия на поддержку
различных очередей страниц в соотношениях, которые являются наиболее
эффективными. Годами ходили современные легенды, что Linux выполняет
работу по предотвращению выгрузки на диск лучше, чем FreeBSD, но это не
так. На самом деле FreeBSD старается сбросить на диск неиспользуемые
страницы для освобождения места под дисковый кэш, когда как Linux хранит
неиспользуемые страницы в памяти и оставляет под кэш и страницы процессов
меньше памяти. Я не знаю, остается ли это правдой на сегодняшний
день.</para>
</sect1>
<sect1>
<title>Оптимизация ошибок доступа к страницам и их обнуления</title>
<para>Полагая, что ошибка доступа к странице памяти в VM не является
операцией с большими накладными расходами, если страница уже находится в
основной памяти и может быть просто отображена в адресное пространство
процесса, может оказаться, что это станет весьма накладно, если их
будет оказываться регулярно много. Хорошим примером этой ситуации
является запуск таких программ, как &man.ls.1; или &man.ps.1;, снова и
снова. Если бинарный файл программы отображен в память, но не отображен
в таблицу страниц, то все страницы, к которым обращалась программа,
окажутся недоступными при каждом запуске программы. Это не так уж
необходимо, если эти страницы уже присутствуют в кэше VM, так что FreeBSD
будет пытаться восстанавливать таблицы страниц процесса из тех страниц,
что уже располагаются в VM-кэше. Однако во FreeBSD пока не выполняется
предварительное копирование при записи определенных страниц при выполнении
вызова exec. Например, если вы запускаете программу &man.ls.1;
одновременно с работающей <command>vmstat 1</command>, то заметите, что
она всегда выдает некоторое количество ошибок доступа к страницам, даже
когда вы запускаете ее снова и снова. Это ошибки заполнения нулями, а не
ошибки кода программы (которые уже были обработаны). Предварительное
копирование страниц при выполнении вызовов exec или fork находятся в
области, требующей более тщательного изучения.</para>
<para>Большой процент ошибок доступа к страницам, относится к ошибкам при
заполнении нулями. Вы можете обычно видеть это, просматривая вывод
команды <command>vmstat -s</command>. Это происходит, когда процесс
обращается к страницам в своей области BSS. Область BSS предполагается
изначально заполненной нулями, но VM-система не заботится о выделении
памяти до тех пор, пока процесс реально к ней не обратится. При
возникновении ошибки VM-система должна не только выделить новую страницу,
но и заполнить ее нулями. Для оптимизации операции по заполнению нулями
в системе VM имеется возможность предварительно обнулять страницы и
помечать их, и запрашивать уже обнуленные страницы при возникновении
ошибок заполнения нулями. Предварительное заполнение нулями происходит,
когда CPU простаивает, однако количество страниц, которые система заранее
заполняет нулями, ограничено, для того, чтобы не переполнить кэши памяти.
Это прекрасный пример добавления сложности в VM-систему ради оптимизации
критического пути.</para>
</sect1>
<sect1>
<title>Оптимизация таблицы страниц</title>
<para>Оптимизация таблицы страниц составляет самую содержательную часть
архитектуры VM во FreeBSD и она проявляется при появлении нагрузки при
значительном использовании <function>mmap()</function>. Я думаю, что это
на самом деле особенность работы большинства BSD-систем, хотя я не
уверен, когда это проявилось впервые. Есть два основных подхода к
оптимизации. Первый заключается в том, что аппаратные таблицы страниц
не содержат постоянного состояния, а вместо этого могут быть сброшены в
любой момент с малыми накладными расходами. Второй подход состоит в том,
что каждая активная таблица страниц в системе имеет управляющую структуру
<literal>pv_entry</literal>, которая связана в структуру
<literal>vm_page</literal>. FreeBSD может просто просматривать эти
отображения, которые существуют, когда как в Linux должны проверяться все
таблицы страниц, которые <emphasis>могут</emphasis> содержать нужное
отображение, что в некоторых ситуация дает увеличение сложности O(n^2).
Из-за того, что FreeBSD стремится выбрать наиболее подходящую к
повторному использованию или сбросу в область подкачки страницу, когда
ощущается нехватка памяти, система дает лучшую производительность при
нагрузке. Однако во FreeBSD требуется тонкая настройка ядра для
соответствия ситуациям с большим совместно используемым адресным
пространством, которые могут случиться в системе, обслуживающей сервер
телеконференций, потому что структуры <literal>pv_entry</literal> могут
оказаться исчерпанными.</para>
<para>И в Linux, и во FreeBSD требуются доработки в этой области. FreeBSD
пытается максимизировать преимущества от потенциально редко применяемой
модели активного отображения (к примеру, не всем процессам нужно
отображать все страницы динамической библиотеки), когда как Linux
пытается упростить свои алгоритмы. FreeBSD имеет здесь общее преимущество
в производительности за счет использования дополнительной памяти, но
FreeBSD выглядит хуже в случае, когда большой файл совместно используется
сотнями процессов. Linux, с другой стороны, выглядит хуже в случае,
когда много процессов частично используют одну и ту же динамическую
библиотеку, а также работает неоптимально при попытке определить, может
ли страница повторно использоваться, или нет.</para>
</sect1>
<sect1>
<title>Подгонка страниц</title>
<para>Мы закончим рассмотрением метода оптимизации подгонкой страниц.
Подгонка является методом оптимизации, разработанным для того, чтобы
доступ в последовательные страницы виртуальной памяти
максимально использовал кэш процессора. В далеком прошлом (то есть
больше 10 лет назад) процессорные кэши предпочитали отображать
виртуальную память, а не физическую. Это приводило к огромному
количеству проблем, включая необходимость очистки кэша в некоторых
случаях при каждом переключении контекста и проблемы с замещением данных
в кэше. В современных процессорах кэши отображают физическую память
именно для решения этих проблем. Это означает, что две соседние страницы
в адресном пространстве процессов могут не соответствовать двух соседним
страницам в кэше. Фактически, если вы об этом не позаботились, то
соседние страницы в виртуальной памяти могут использовать ту же самую
страницу в кэше процессора&mdash;это приводит к сбросу кэшируемых данных
и снижению производительности CPU. Это так даже с множественными
ассоциативными кэшами (хотя здесь эффект несколько сглажен).</para>
<para>Код выделения памяти во FreeBSD выполняет оптимизацию с применением
подгонки страниц, означающую то, что код выделения памяти будет пытаться
найти свободные страницы, которые являются последовательными с точки
зрения кэша. Например, если страница 16 физической памяти назначается
странице 0 виртуальной памяти процесса, а в кэш помещается 4 страницы, то
код подгонки страниц не будет назначать страницу 20 физической
памяти странице 1 виртуальной памяти процесса. Вместо этого будет
назначена страница 21 физической памяти. Код подгонки страниц
попытается избежать назначение страницы 20, потому что такое отображение
перекрывается в той же самой памяти кэша как страница 16, и приведет к
неоптимальному кэшированию. Как вы можете предположить, такой код
значительно добавляет сложности в подсистему выделения памяти VM, но
результат стоит того. Подгонка страниц делает память VM предсказуемой,
как и обычная физическая память, относительно производительности
кэша.</para>
</sect1>
<sect1>
<title>Заключение</title>
<para>Виртуальная память в современных операционных системах должна решать
несколько различных задач эффективно и при разных условиях. Модульный
и алгоритмический подход, которому исторически следует BSD, позволяет нам
изучить и понять существующую реализацию, а также сравнительно легко
изменить большие блоки кода. За несколько последних лет в VM-системе
FreeBSD было сделано некоторое количество усовершенствований, и работа
над ними продолжается.</para>
</sect1>
<sect1>
<title>Дополнительный сеанс вопросов и ответов от Аллена Вриггса (Allen
Briggs) <email>briggs@ninthwonder.com</email></title>
<qandaset>
<qandaentry>
<question>
<para>Что это за &ldquo;алгоритм чередования&rdquo;, который вы
упоминали в списке недостатков подсистемы управления разделом
подкачки во FreeBSD 3.x?</para>
</question>
<answer>
<para>FreeBSD использует в области подкачки механизм чередования,
с индексом по умолчанию, равным четырем. Это означает, что FreeBSD
резервирует пространство для четырех областей подкачки, даже если
у вас имеется всего лишь одна, две или три области. Так как в
области подкачки имеется чередование, то линейное адресное
пространство, представляющее &lsquo;четыре области подкачки&rsquo;,
будет фрагментироваться, если у вас нет на самом деле четырех
областей подкачки. Например, если у вас две области A и B, то
представление адресного пространства для этой области подкачки во
FreeBSD будет организовано с чередованием блоков из 16
страниц:</para>
<literallayout>A B C D A B C D A B C D A B C D</literallayout>
<para>FreeBSD 3.x использует &lsquo;последовательный список свободных
областей&rsquo; для управления свободными областями в разделе
подкачки. Идея состоит в том, что большие последовательные блоки
свободного пространства могут быть представлены при помощи узла
односвязного списка (<filename>kern/subr_rlist.c</filename>). Но
из-за фрагментации последовательный список сам становится
фрагментированным. В примере выше полностью неиспользуемое
пространство в A и B будет показано как &lsquo;свободное&rsquo;,
а C и D как &lsquo;полностью занятое&rsquo;. Каждой
последовательности A-B требуется для учета узел списка, потому что
C и D являются дырами, так что узел списка не может быть связан
со следующей последовательностью A-B.</para>
<para>Почему мы организуем чередование в области подкачки вместо
того, чтобы просто объединить области подкачки в одно целое и
придумать что-то более умное? Потому что гораздо легче выделять
последовательные полосы адресного пространства и получать в
результате автоматическое чередование между несколькими дисками,
чем пытаться выдумывать сложности в другом месте.</para>
<para>Фрагментация вызывает другие проблемы. Являясь
последовательным списком в 3.x и имея такое огромную фрагментацию,
выделение и освобождение в области подкачки становится алгоритмом
сложности O(N), а не O(1). Вместе с другими факторами (частое
обращение к области подкачки) вы получаете сложность уровней O(N^2)
и O(N^3), что плохо. В системе 3.x также может потребоваться
выделение KVM во время работы с областью подкачки для создания
нового узла списка, что в условии нехватки памяти может привести к
блокировке, если система попытается сбросить страницы в область
подкачки.</para>
<para>В 4.x мы не используем последовательный список. Вместо этого
мы используем базисное дерево и битовые карты блоков области
подкачки, а не ограниченный список узлов. Мы принимаем
предварительное выделение всех битовых карт, требуемых для всей
области подкачки, но при этом тратится меньше памяти, потому что
мы используем битовые карты (один бит на блок), а не связанный
список узлов. Использование базисного дерева вместо
последовательного списка дает нам производительность O(1) вне
зависимости от фрагментации дерева.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Я не понял следующее:</para>
<blockquote>
<para>Стоит отметить, что во FreeBSD VM-система пытается разделить
чистые и грязные страницы во избежание срочной необходимости в
ненужных сбросах грязных страниц (что отражается на пропускной
способности ввода/вывода) и не перемещает беспричинно страницы
между разными очередями, когда подсистема управления памятью не
испытывает нехватку ресурсов. Вот почему вы можете видеть, что
при выполнении команды <command>systat -vm</command> в некоторых
системах значение счетчика очереди кэша мало, а счетчик активной
очереди большой.</para>
</blockquote>
<para>Как разделение чистых и грязных (неактивных) страниц связано с
ситуацией, когда вы видите маленький счетчик очереди кэша и
большой счетчик активной очереди в выдаче команды
<command>systat -vm</command>? Разве системная статистика не
считает активные и грязные страницы вместе за счетчик активной
очереди?</para>
</question>
<answer>
<para>Да, это запутывает. Связь заключается в &ldquo;желаемом&rdquo;
и &ldquo;действительном&rdquo;. Мы желаем разделить страницы, но
реальность такова, что пока у нас нет проблем с памятью, нам это на
самом деле не нужно.</para>
<para>Это означает, что FreeBSD не будет очень сильно стараться над
отделением грязных страниц (неактивная очередь) от чистых страниц
(очередь кэша), когда система не находится под нагрузкой, и не
будет деактивировать страницы (активная очередь -> неактивная
очередь), когда система не нагружена, даже если они не
используются.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>В примере с &man.ls.1; / <command>vmstat 1</command> могут ли
некоторые ошибки доступа к странице быть ошибками страниц данных
(COW из выполнимого файла в приватные страницы)? То есть я
полагаю, что ошибки доступа к страницам являются частично ошибками
при заполнении нулями, а частично данных программы. Или вы
гарантируете, что FreeBSD выполняет предварительно COW для данных
программы?</para>
</question>
<answer>
<para>Ошибка COW может быть ошибкой при заполнении нулями или данных
программы. Механизм в любом случае один и тот же, потому что
хранилище данных программы уже в кэше. Я на самом деле не рад
ни тому, ни другому. FreeBSD не выполняет предварительное COW
данных программы и заполнение нулями, но она
<emphasis>выполняет</emphasis> предварительно отображение страниц,
которые имеются в ее кэше.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>В вашем разделе об оптимизации таблицы страниц, не могли бы вы
более подробно рассказать о <literal>pv_entry</literal> и
<literal>vm_page</literal> (или vm_page должна быть
<literal>vm_pmap</literal>&mdash;как в 4.4, cf. pp. 180-181 of
McKusick, Bostic, Karel, Quarterman)? А именно какое
действие/реакцию должно потребоваться для сканирования
отображений?</para>
<para>Что делает Linux в тех случаях, когда FreeBSD работает плохо
(совместное использование отображения файла между многими
процессами)?</para>
</question>
<answer>
<para><literal>vm_page</literal> представляет собой пару
(object,index#). <literal>pv_entry</literal> является записью из
аппаратной таблицы страниц (pte). Если у вас имеется пять
процессов, совместно использующих одну и ту же физическую страницу,
и в трех таблицах страниц этих процессов на самом деле отображается
страница, то страница будет представляться одной структурой
<literal>vm_page</literal> и тремя структурами
<literal>pv_entry</literal>.</para>
<para>Структуры <literal>pv_entry</literal> представляют страницы,
отображаемые MMU (одна структура <literal>pv_entry</literal>
соответствует одной pte). Это означает, что, когда нам нужно
убрать все аппаратные ссылки на <literal>vm_page</literal> (для
того, чтобы повторно использовать страницу для чего-то еще,
выгрузить ее, очистить, пометить как грязную и так далее), мы
можем просто просмотреть связный список структур
<literal>pv_entry</literal>, связанных с этой
<literal>vm_page</literal>, для того, чтобы удалить или изменить
pte из их таблиц страниц.</para>
<para>В Linux нет такого связного списка. Для того, чтобы удалить
все отображения аппаратной таблицы страниц для
<literal>vm_page</literal>, linux должен пройти по индексу каждого
объекта VM, который <emphasis>может</emphasis> отображать страницу.
К примеру, если у вас имеется 50 процессов, которые все отображают
ту же самую динамическую библиотеку и хотите избавиться от страницы
X в этой библиотеке, то вам нужно пройтись по индексу всей таблицы
страниц для каждого из этих 50 процессов, даже если только 10 из
них на самом деле отображают страницу. Так что Linux использует
простоту подхода за счет производительности. Многие алгоритмы VM,
которые имеют сложность O(1) или (N малое) во FreeBSD, в Linux
приобретают сложность O(N), O(N^2) или хуже. Так как pte,
представляющий конкретную страницу в объекте, скорее всего, будет
с тем же смещением во всех таблицах страниц, в которых они
отображаются, то уменьшение количества обращений в таблицы страниц
по тому же самому смещению часто позволяет избежать разрастания
кэша L1 для этого смещения, что приводит к улучшению
производительности.</para>
<para>Во FreeBSD введены дополнительные сложности (схема с
<literal>pv_entry</literal>) для увеличения производительности
(уменьшая количество обращений <emphasis>только</emphasis> к тем
pte, которые нужно модифицировать).</para>
<para>Но во FreeBSD имеется проблема масштабирования, которой нет в
Linux, потому что имеется ограниченное число структур
<literal>pv_entry</literal>, и это приводит к возникновению проблем
при большом объеме совместно используемых данных. В этом случае
у вас может возникнуть нехватка структур
<literal>pv_entry</literal>, даже если свободной памяти хватает.
Это может быть достаточно легко исправлено увеличением количества
структур <literal>pv_entry</literal> при настройке, но на самом
деле нам нужно найти лучший способ делать это.</para>
<para>Что касается использования памяти под таблицу страниц против
схемы с <literal>pv_entry</literal>: Linux использует
&lsquo;постоянные&rsquo; таблицы страниц, которые не сбрасываются,
но ему не нужны <literal>pv_entry</literal> для каждого
потенциально отображаемого pte. FreeBSD использует
&lsquo;сбрасываемые&rsquo; таблицы страниц, но для каждого
реально отображаемого pte добавляется структура
<literal>pv_entry</literal>. Я думаю, что использование памяти
будет примерно одинакова, тем более что у FreeBSD есть
алгоритмическое преимущество, заключающееся в способности
сбрасывать таблицы страниц с очень малыми накладными
расходами.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Наконец, в разделе о подгонке страниц хорошо бы было
иметь краткое описание того, что это значит. Я не совсем это
понял.</para>
</question>
<answer>
<para>Знаете ли вы, как работает аппаратный кэш памяти L1? Объясняю:
Представьте машину с 16МБ основной памяти и только со 128К памяти
кэша L1. В общем, этот кэш работает так, что каждый блок по 128К
основной памяти использует <emphasis>те же самые</emphasis> 128К
кэша. Если вы обращаетесь к основной памяти по смещению 0, а затем
к основной памяти по смещению 128К, вы перезаписываете данные кэша,
прочтенные по смещению 0!</para>
<para>Я очень сильно все упрощаю. То, что я только что описал,
называется &lsquo;напрямую отображаемым&rsquo; аппаратным кэшем
памяти. Большинство современных кэшей являются так называемыми
2-сторонними множественными ассоциативными или 4-сторонними
множественными ассоциативными кэшами. Множественная
ассоциативность позволяет вам обращаться к вплоть до N различным
областям памяти, которые используют одну и ту же память кэша без
уничтожения ранее помещенных в кэш данных. Но только N.</para>
<para>Так что если у меня имеется 4-сторонний ассоциативный кэш, я
могу обратиться к памяти по смещению 0, смещению 128К, 256К и
смещению 384K, затем снова обратиться к памяти по смещению 0 и
получу ее из кэша L1. Однако, если после этого я обращусь к памяти
по смещению 512К, один из ранее помещенных в кэш объектов данных
будет из кэша удален.</para>
<para>Это чрезвычайно важно&hellip; для большинства обращений к
памяти процессора <emphasis>чрезвычайно</emphasis> важно, чтобы
данные находились в кэше L1, так как кэш L1 работает на тактовой
частоте работы процессора. В случае, если данных в кэше L1 не
обнаруживается, и они ищутся в кэше L2 или в основной памяти,
процессор будет простаивать, или, скорее, сидеть, сложив ручки,
в ожидании окончания чтения из основной памяти, хотя за это время
можно было выполнить <emphasis>сотни</emphasis> операций. Основная
память (динамическое ОЗУ, которое установлено в компьютере)
работает по сравнению со скоростью работы ядра современных
процессоров <emphasis>медленно</emphasis>.</para>
<para>Хорошо, а теперь рассмотрим подгонку страниц: Все современные
кэши памяти являются так называемыми
<emphasis>физическими</emphasis> кэшами. Они кэшируют адреса
физической памяти, а не виртуальной. Это позволяет кэшу не
принимать во внимание переключение контекстов процессов, что очень
важно.</para>
<para>Но в мире UNIX вы работаете с виртуальными адресными
пространствами, а не с физическими. Любая программа, вами
написанная, имеет дело с виртуальным адресным пространством, ей
предоставленным. Реальные <emphasis>физические</emphasis>
страницы, соответствующие виртуальному адресному пространству, не
обязательно расположены физически последовательно! На самом деле
у вас могут оказаться две страницы, которые в адресном пространстве
процессов являются граничащими, но располагающимися по смещению 0 и
по смещению 128К в <emphasis>физической</emphasis> памяти.</para>
<para>Обычно программа полагает, что две граничащие страницы будут
кэшироваться оптимально. То есть вы можете обращаться к объектам
данных в обеих страницах без замещений в кэше данных друг друга.
Но это имеет место, если только физические страницы,
соответствующие виртуальному адресному пространству, располагаются
рядом (в такой мере, что попадают в кэш).</para>
<para>Это именно то, что выполняет подгонка. Вместо того,
чтобы назначать <emphasis>случайные</emphasis> физические страницы
виртуальным адресам, что может привести к неоптимальной работе
кэша, при подгонке страниц виртуальным адресам назначаются
<emphasis>примерно подходящие по порядку</emphasis> физические
страницы. Таким образом, программы могут писаться в предположении,
что характеристики низлежащего аппаратного кэша для виртуального
адресного пространства будут такими же, как если бы программа
работала непосредственно в физическом адресном пространстве.</para>
<para>Заметьте, что я сказал &lsquo;примерно&rsquo; подходящие, а не
просто &lsquo;последовательные&rsquo;. С точки зрения напрямую
отображаемого кэша в 128К, физический адрес 0 одинаков с физическим
адресом 128К. Так что две граничащие страницы в вашем виртуальном
адресном пространстве могут располагаться по смещению 128К и 132К
физической памяти, но могут легко находиться по смещению 128К и по
смещению 4К физической памяти, и иметь те же самые характеристики
работы кэша. Так что при подгонке <emphasis>не
нужно</emphasis> назначать в действительности последовательные
страницы физической памяти последовательным страницам виртуальной
памяти, достаточно просто добиться расположения страниц по
соседству друг с другом с точки зрения работы кэша.</para>
</answer>
</qandaentry>
</qandaset>
</sect1>
</article>

View file

@ -0,0 +1,104 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fig1.eps
%%Creator: fig2dev Version 3.2.3 Patchlevel
%%CreationDate: Sun Oct 8 19:54:25 2000
%%For: nik@canyon.nothing-going-on.org (Nik Clayton)
%%BoundingBox: 0 0 119 65
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 65 moveto 0 0 lineto 119 0 lineto 119 65 lineto closepath clip newpath
-143.0 298.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
% Polyline
7.500 slw
n 2400 4200 m 4050 4200 l 4050 4950 l 2400 4950 l
cp gs col0 s gr
% Polyline
n 4050 4200 m
4350 3900 l gs col0 s gr
% Polyline
n 2400 4200 m 2700 3900 l 4350 3900 l 4350 4650 l
4050 4950 l gs col0 s gr
/Helvetica-Bold ff 180.00 scf sf
3225 4650 m
gs 1 -1 sc (A) dup sw pop 2 div neg 0 rm col0 sh gr
$F2psEnd
rs

View file

@ -0,0 +1,115 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fig2.eps
%%Creator: fig2dev Version 3.2.3 Patchlevel
%%CreationDate: Sun Oct 8 19:55:31 2000
%%For: nik@canyon.nothing-going-on.org (Nik Clayton)
%%BoundingBox: 0 0 120 110
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 110 moveto 0 0 lineto 120 0 lineto 120 110 lineto closepath clip newpath
-174.0 370.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
/Helvetica-Bold ff 180.00 scf sf
3750 5100 m
gs 1 -1 sc (B) dup sw pop 2 div neg 0 rm col0 sh gr
% Polyline
7.500 slw
n 4871 5100 m 4879 5100 l gs col0 s gr
% Polyline
n 2925 5400 m 4575 5400 l 4575 6150 l 2925 6150 l
cp gs col0 s gr
% Polyline
n 4575 4650 m
4875 4350 l gs col0 s gr
% Polyline
n 2925 4650 m 4575 4650 l 4575 5400 l 2925 5400 l
cp gs col0 s gr
% Polyline
n 2925 4650 m 3225 4350 l 4875 4350 l 4875 5100 l
4575 5400 l gs col0 s gr
/Helvetica-Bold ff 180.00 scf sf
3750 5850 m
gs 1 -1 sc (A) dup sw pop 2 div neg 0 rm col0 sh gr
% Polyline
n 4875 5100 m 4875 5850 l
4575 6150 l gs col0 s gr
$F2psEnd
rs

View file

@ -0,0 +1,133 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fig3.eps
%%Creator: fig2dev Version 3.2.3 Patchlevel
%%CreationDate: Sun Oct 8 19:53:51 2000
%%For: nik@canyon.nothing-going-on.org (Nik Clayton)
%%BoundingBox: 0 0 120 155
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 155 moveto 0 0 lineto 120 0 lineto 120 155 lineto closepath clip newpath
-174.0 370.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
/Helvetica-Bold ff 180.00 scf sf
4125 4350 m
gs 1 -1 sc (C2) dup sw pop 2 div neg 0 rm col0 sh gr
% Polyline
7.500 slw
n 4871 5100 m 4879 5100 l gs col0 s gr
% Polyline
n 2925 5400 m 4575 5400 l 4575 6150 l 2925 6150 l
cp gs col0 s gr
% Polyline
n 4575 4650 m
4875 4350 l gs col0 s gr
% Polyline
n 2925 4650 m 4575 4650 l 4575 5400 l 2925 5400 l
cp gs col0 s gr
% Polyline
n 4875 3600 m 4875 5100 l
4575 5400 l gs col0 s gr
% Polyline
n 2925 4650 m 2925 3900 l 3225 3600 l
4875 3600 l gs col0 s gr
% Polyline
n 2925 3900 m 4425 3900 l 4575 3900 l
4875 3600 l gs col0 s gr
% Polyline
n 4575 4650 m
4575 3900 l gs col0 s gr
% Polyline
n 3750 4650 m 3750 3900 l
4050 3600 l gs col0 s gr
/Helvetica-Bold ff 180.00 scf sf
3750 5850 m
gs 1 -1 sc (A) dup sw pop 2 div neg 0 rm col0 sh gr
/Helvetica-Bold ff 180.00 scf sf
3750 5100 m
gs 1 -1 sc (B) dup sw pop 2 div neg 0 rm col0 sh gr
/Helvetica-Bold ff 180.00 scf sf
3375 4350 m
gs 1 -1 sc (C1) dup sw pop 2 div neg 0 rm col0 sh gr
% Polyline
n 4875 5100 m 4875 5850 l
4575 6150 l gs col0 s gr
$F2psEnd
rs

View file

@ -0,0 +1,133 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fig4.eps
%%Creator: fig2dev Version 3.2.3 Patchlevel
%%CreationDate: Sun Oct 8 19:55:53 2000
%%For: nik@canyon.nothing-going-on.org (Nik Clayton)
%%BoundingBox: 0 0 120 155
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 155 moveto 0 0 lineto 120 0 lineto 120 155 lineto closepath clip newpath
-174.0 370.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
%%Page: 1 1
10 setmiterlimit
0.06000 0.06000 sc
/Helvetica-Bold ff 180.00 scf sf
3375 4350 m
gs 1 -1 sc (C1) dup sw pop 2 div neg 0 rm col0 sh gr
% Polyline
7.500 slw
n 4871 5100 m 4879 5100 l gs col0 s gr
% Polyline
n 2925 5400 m 4575 5400 l 4575 6150 l 2925 6150 l
cp gs col0 s gr
% Polyline
n 4575 4650 m
4875 4350 l gs col0 s gr
% Polyline
n 2925 4650 m 4575 4650 l 4575 5400 l 2925 5400 l
cp gs col0 s gr
% Polyline
n 4875 4350 m 4875 5100 l
4575 5400 l gs col0 s gr
% Polyline
n 2925 4650 m 2925 3900 l 3225 3600 l
4050 3600 l gs col0 s gr
% Polyline
n 3750 4650 m 3750 3900 l
4050 3600 l gs col0 s gr
% Polyline
n 2925 3900 m
3750 3900 l gs col0 s gr
% Polyline
n 3750 4650 m 4050 4350 l
4875 4350 l gs col0 s gr
% Polyline
n 4050 4350 m
4050 3600 l gs col0 s gr
/Helvetica-Bold ff 180.00 scf sf
3750 5850 m
gs 1 -1 sc (A) dup sw pop 2 div neg 0 rm col0 sh gr
/Helvetica-Bold ff 180.00 scf sf
3750 5100 m
gs 1 -1 sc (B) dup sw pop 2 div neg 0 rm col0 sh gr
% Polyline
n 4875 5100 m 4875 5850 l
4575 6150 l gs col0 s gr
$F2psEnd
rs

View file

@ -0,0 +1,26 @@
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/zip-drive/Makefile,v 1.2 2001/07/25 10:26:34 phantom Exp $
#
# Original revision: 1.1
#
MAINTAINER=andy@FreeBSD.org.ua
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= article.sgml
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -0,0 +1,299 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/zip-drive/article.sgml,v 1.2 2001/06/30 11:18:56 phantom Exp $
Original revision: 1.2
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>
<article>
<articleinfo>
<title>Устройства ZIP</title>
<authorgroup>
<author>
<firstname>Jason</firstname>
<surname>Bacon</surname>
<affiliation>
<address><email>acadix@execpc.com</email></address>
</affiliation>
</author>
</authorgroup>
</articleinfo>
<sect1>
<title>Обзор устройств ZIP</title>
<para>Диски ZIP являются сменными магнитными дисками большой емкости,
чтение и запись на которые может выполняться устройствами ZIP от компании
iomega. Диски ZIP похожи на дискеты, кроме того, что они работают
гораздо быстрее, и имеют гораздо большую емкость. Когда как дискеты
обычно имеют емкость в 1.44 мегабайта, диски ZIP могут быть двух
разновидностей, объемами 100 и 250 мегабайт. Диски ZIP не нужно
путать с супер-дискетами объемом в 120 мегабайт, привод для которых может
также работать и с обычными дискетами объемом 1.44 мегабайта.</para>
<para>IOMEGA продает также более емкое и производительное устройство,
которое называется JAZZ. Устройства JAZZ бывают емкостями 1 и 2
гигабайта.</para>
<para>Устройства ZIP продаются как во внешнем, так и во внутреннем
исполнении, и используют один из трех интерфейсов:</para>
<orderedlist>
<listitem>
<para>Интерфейс SCSI (Small Computer Standard Interface) является самым
быстрым, сложным, расширяемым и самым дорогим. Интерфейс SCSI
применяется во всех типах компьютеров от PC до рабочих станций RISC и
миникомпьютеров, для подключения разнообразной периферии, такой, как
дисковые и ленточные накопители, сканеры и так далее. Устройства ZIP
с интерфейсом SCSI могут быть во внутреннем и внешнем исполнении, и
предполагается, что ваш адаптер имеет внешний разъем.</para>
<note>
<para>Если вы используете внешнее устройство SCSI, ни в коем случае
нельзя подключать или отключать его от шины SCSI при работающем
компьютере. В противном случае это может привести к порче файловой
системы на дисках, которые были подключены.</para>
</note>
<para>Если вы хотите добиться максимальной производительности и
простоты установки, то лучше всего использовать интерфейс SCSI. Это
может потребовать добавления SCSI-адаптера, так как большинство PC
(за исключением высокопроизводительных серверов) не имеют встроенной
поддержки SCSI. Каждый SCSI-адаптер, в зависимости от модели, может
поддерживать 7 или 15 устройств SCSI.</para>
<para>Каждое SCSI-устройство имеет собственный контроллер, и эти
контроллеры весьма сложны и хорошо стандартизованы (вторая буква
`S' в слове SCSI означает Standard), так что с точки зрения
операционной системы все диски SCSI выглядят примерно одинаково, то
же самое касается стримеров SCSI и так далее. Для поддержки
устройств SCSI операционной системе нужен драйвер только для
конкретного адаптера и универсальный драйвер для каждого типа
устройств, другими словами, драйвер SCSI-диска, драйвер SCSI-стримера
и так далее. Если некоторые устройства SCSI, с которыми лучше
использовать специализированными драйверами (к примеру, стримеры
DAT), но они будут работать и с универсальным драйвером. Просто
универсальный драйвер может не поддерживать некоторых возможностей
конкретного устройства.</para>
<para>Использование SCSI-устройства ZIP сводится к определению того,
какой файл устройства в каталоге <filename>/dev</filename>
соответствует устройству ZIP. Это может быть выяснено по сообщениям,
выдающимся при загрузке FreeBSD (после загрузки их можно найти в
файле <filename>/var/log/messages</filename>), среди которых вы
увидите такие строчки:</para>
<programlisting>
da1: &lt;IOMEGA ZIP 100 D.13&gt; Removable Direct Access SCSI-2 Device
</programlisting>
<para>Это означает, что устройству ZIP соответствует
<filename>/dev/da1</filename>.</para>
</listitem>
<listitem>
<para>Интерфейс IDE (Integrated Drive Electronics) является дешевым
интерфейсом, используемым дисками на многих настольных ПК.
Большинство IDE-устройств являются только внутренними.</para>
<para>Производительность устройств ZIP с интерфейсом IDE сравнима со
SCSI-устройствами ZIP. (Интерфейс IDE не так быстр, как SCSI, но
производительность устройств ZIP ограничена в основном механикой
устройства, а не интерфейсом шины.)</para>
<para>Минусом при использовании интерфейса IDE является его
ограниченность. Большинство адаптеров IDE может поддерживать только
два устройства, и интерфейс IDE не был рассчитан на широкое
применение. Например, оригинальный интерфейс IDE не поддерживает
винчестеры с количеством дорожек, превышающим 1024, что заставляет
многих необдуманно обновлять аппаратуру. Если у вас есть планы по
расширению возможностей вашего ПК добавлением дополнительного диска,
стримера или сканера, вам стоит задуматься о приобретении
SCSI-адаптера и устройства ZIP с интерфейсом SCSI во избежание
проблем в будущем.</para>
<para>Устройства IDE во FreeBSD предваряются буквой
<literal>w</literal>. Например, жесткий диск IDE может называться
<filename>/dev/wd0</filename>, IDE (ATAPI) привод компакт-дисков
может называться <filename>/dev/wcd1</filename>, и так далее.</para>
</listitem>
<listitem>
<para>Интерфейс параллельного порта популярен для переносимых внешних
устройств, таких, как внешние устройства ZIP и сканеры, потому что
практически любой компьютер имеет стандартный параллельный порт
(обычно используемый для подключения принтера). Это упрощает жизнь
тем, кто переносит данные между несколькими компьютерами посредством
своего ZIP-устройства.</para>
<para>Как правило, производительность здесь ниже, чем в случае
ZIP-устройств с интерфейсами SCSI или IDE, так как она ограничена
скоростью параллельного порта. Пропускная способность параллельного
порта значительно различается между разными компьютерами, и зачастую
может настраиваться в BIOS компьютера. Некоторым машинам также может
понадобиться настроить BIOS на работу параллельного порта в
двунаправленном режиме. (Параллельные порты изначально были
предназначены только для вывода на принтеры)</para>
</listitem>
</orderedlist>
</sect1>
<sect1>
<title>Устройство ZIP для параллельного порта: Драйвер устройства
<devicename>vpo</devicename></title>
<para>Для использования ZIP-устройства с интерфейсом параллельного порта
во FreeBSD в ядре должно быть присутствовать устройство. Устройства ZIP
для параллельного порта имеют встроенный контроллер SCSI. Драйвер vpo
позволяет ядру FreeBSD работать со SCSI-контроллером ZIP-устройства через
параллельный порт.</para>
<para>Так как драйвер vpo не входит в стандартное ядро (начиная с FreeBSD
3.2), то для использования устройства вам необходимо перестроить ядро.
Процесс построения ядра подробно описан в другом разделе. Ниже приведена
краткая последовательность шагов для включения драйвера vpo:</para>
<orderedlist>
<listitem>
<para>Запустите <command>/stand/sysinstall</command> и установите в
вашей системе исходный код ядра.</para>
<screen>
&prompt.root; <userinput>cd /sys/i386/conf</userinput>
&prompt.root; <userinput>cp GENERIC MYKERNEL</userinput>
</screen>
<para>Отредактируйте файл <filename>MYKERNEL</filename>, изменив строку
<literal>ident</literal> на <literal>MYKERNEL</literal> и
раскомментируйте строчку, описывающую драйвер vpo.</para>
<para>Если у вас имеется второй параллельный порт, вам может
потребоваться скопировать раздел для <literal>ppc0</literal>, чтобы
создать устройство <literal>ppc1</literal>. Второй параллельный
порт, как правило, использует IRQ 5 и адрес 378. В конфигурационном
файле требуется указать только IRQ.</para>
<para>Если диск с корневой файловой системой является диском с
интерфейсом SCSI, то вы можете столкнуться с проблемой в
последовательности обнаружения устройств, что может привести к
попытке использования ZIP-устройства в качестве диска с корневой
файловой системой. Это будет приводить к ошибке загрузки, пока вы не
поместите корневую файловую систему FreeBSD на ваш ZIP-диск! Для
этого вам нужно <quote>зафиксировать</quote> корневой диск, а именно
заставить ядро ассоциировать выбранное устройство с устройством
<filename>/dev/da0</filename>, то есть с корневым SCSI-диском. Затем
ZIP-диск будет связан со следующим доступным SCSI-диском, например, с
<literal>/dev/da1</literal>. Для того, чтобы привязать ваш SCSI-диск
к устройству <literal>da0</literal>, измените строчку
<programlisting>device da0</programlisting>
на
<programlisting>disk da0 at scbus0 target 0 unit 0</programlisting>
</para>
<para>Вам может потребоваться сменить номер устройства (target) выше на
SCSI ID вашего диска. Также вам нужно привязать scbus0 к вашему
контроллеру. Например, если у вас установлен контроллер Adaptec
15xx, вам нужно сменить
<programlisting>controller scbus0</programlisting>
на
<programlisting>controller scbus0 at aha0</programlisting>
</para>
<para>И наконец, раз вы редактируете конфигурационный файл ядра, вы
можете заодно удалить все ненужные драйверы. Это нужно делать с
большой осторожностью, и только если вы уверены во вносимых
изменениях. Удаление ненужных драйверов уменьшит размер ядра, что
даст больше памяти для ваших приложений. Для определения того,
какие драйверы не нужны, перейдите в конец файла
<filename>/var/log/messages</filename>, и поищите строчки с
диагностикой "not found". Затем закомментируйте эти устройства в
конфигурационном файле вашего ядра. Вы можете также изменить другие
параметры для уменьшения размера и ускорения работы вашего ядра.
Прочтите раздел о перекомпиляции вашего ядра для получения более
полной информации.</para>
</listitem>
<listitem>
<para>Теперь пришло время компиляции ядра:</para>
<screen>
&prompt.root; <userinput>/usr/sbin/config MYKERNEL</userinput>
&prompt.root; <userinput>cd ../../compile/MYKERNEL</userinput>
&prompt.root; <userinput>make clean depend && make all install</userinput>
</screen>
</listitem>
</orderedlist>
<para>После того, как ядро будет перестроено, вам нужно выполнить
перезагрузку. Перед тем, как это сделать, удостоверьтесь, что
ZIP-устройство подключено к параллельному порту. Вы должны увидеть
ZIP-устройство среди сообщений, выдаваемых при загрузке, как устройство
vpo0 или vpo1, в зависимости от того, к какому параллельному порту
оно подключено. Кроме того, будет указано, к какому файлу устройства
был привязан ZIP-диск. Это будет <filename>/dev/da0</filename>, если
в системе нет других SCSI-дисков, или <filename>/dev/da1</filename> в
случае, если ваш SCSI-диск зафиксирован в качестве корневого
устройства.</para>
</sect1>
<sect1>
<title>Монтирование дисков ZIP</title>
<para>Для работы с ZIP-диском вы должны его смонтировать, точно так же, как
и любое другое дисковое устройство. Файловая система на устройстве
представлена как слайс 4, поэтому для устройств с параллельным или
SCSI-интерфейсом вам нужно сделать следующее:</para>
<screen>
&prompt.root; <userinput>mount_msdos /dev/da1s4 /mnt</userinput>
</screen>
<para>Для устройств ZIP с интерфейсом IDE используйте вот что:</para>
<screen>
&prompt.root; <userinput>mount_msdos /dev/wd1s4 /mnt</userinput>
</screen>
<para>Для облегчения монтирования будет полезно также обновить файл
<filename>/etc/fstab</filename>. Добавьте строку, соответствующую
вашей системе, наподобие следующей:
<programlisting>/dev/da1s4 /zip msdos rw,noauto 0 0</programlisting>
и создайте каталог <filename>/zip</filename>.
</para>
<para>Теперь вы можете монтировать диск просто по команде
<screen>&prompt.root; <userinput>mount /zip</userinput></screen>
и выполнять размонтирование по команде
<screen>&prompt.root; <userinput>umount /zip</userinput></screen>
</para>
<para>Более подробная информация о формате файла
<filename>/etc/fstab</filename> находится в &man.fstab.5;.</para>
<para>Вы можете также создать файловую систему FreeBSD на ZIP-диске при
помощи &man.newfs.8;. Однако диск можно будет использовать только в
системе FreeBSD и, может быть, с еще несколькими клонами Unix, которые
распознают файловые системы FreeBSD. (Определенно этого не могут делать
DOS и Windows.)</para>
</sect1>
</article>