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:
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
ru_RU.KOI8-R/articles
MakefileMakefile.inc
dialup-firewall
diskless-x
explaining-bsd
fonts
formatting-media
freebsd-questions
ipsec-must
mh
solid-state
vm-design
zip-drive
|
@ -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"
|
||||
|
|
|
@ -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}
|
||||
|
|
26
ru_RU.KOI8-R/articles/dialup-firewall/Makefile
Normal file
26
ru_RU.KOI8-R/articles/dialup-firewall/Makefile
Normal 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"
|
384
ru_RU.KOI8-R/articles/dialup-firewall/article.sgml
Normal file
384
ru_RU.KOI8-R/articles/dialup-firewall/article.sgml
Normal 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<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524</replaceable>
|
||||
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --> <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<POINTOPOINT,MULTICAST> mtu 1500</replaceable>
|
||||
<emphasis>(skipped...)</emphasis>
|
||||
tun0: flags=<replaceable>8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524</replaceable>
|
||||
<emphasis>(IPv6 stuff skipped...)</emphasis>
|
||||
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --> <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>
|
26
ru_RU.KOI8-R/articles/diskless-x/Makefile
Normal file
26
ru_RU.KOI8-R/articles/diskless-x/Makefile
Normal 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"
|
367
ru_RU.KOI8-R/articles/diskless-x/article.sgml
Normal file
367
ru_RU.KOI8-R/articles/diskless-x/article.sgml
Normal 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:></prompt> <userinput>cd \netboot</userinput>
|
||||
<prompt>C:></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 <pid></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.<ip>', где <ip>
|
||||
является 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:
|
||||
-->
|
20
ru_RU.KOI8-R/articles/explaining-bsd/Makefile
Normal file
20
ru_RU.KOI8-R/articles/explaining-bsd/Makefile
Normal 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"
|
621
ru_RU.KOI8-R/articles/explaining-bsd/article.sgml
Normal file
621
ru_RU.KOI8-R/articles/explaining-bsd/article.sgml
Normal 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&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&T
|
||||
Research, которая также дала начало современной ОС UNIX System
|
||||
V. Это факт может удивить, если вспомнить, что AT&T никогда
|
||||
не открывала исходные коды своих разработок.</para>
|
||||
|
||||
<para>Действительно, UNIX никогда не был программным обеспечением
|
||||
с открытыми исходниками, и в законном смысле BSD определённо
|
||||
<emphasis>НЕ</emphasis> UNIX. Но с другой стороны, в AT&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&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&T, и,
|
||||
следовательно, требовал лицензии. К 1990 году финансирование
|
||||
CSRG прекратилось, и группа была распущена. Кое-кто из бывших
|
||||
членов группы решил опубликовать код BSD отдельно от закрытого
|
||||
кода AT&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&T подала в суд на <ulink
|
||||
url="http://www.bsdi.com">BSDI</ulink>, компанию-поставщика
|
||||
ОС BSD/386. Основным пунктом обвинения было то, что BSD/386
|
||||
содержала в себе закрытый код, принадлежавший AT&T.
|
||||
Дело вроде бы уладили за пределами суда в 1994-ом, но целая
|
||||
серия вторичных тяжб и по сей день отравляет жизнь многим
|
||||
людям. Совсем недавно, в марте 2000, в Internet была
|
||||
опубликована статья, утверждавшая, что судебное
|
||||
разбирательство окончательно завершено (<quote>recently
|
||||
settled</quote>).</para>
|
||||
|
||||
<para>В результате разбирательства прояснился вопрос с
|
||||
названиями: если в 80-х годах BSD была известна под именем
|
||||
<quote>BSD UNIX</quote>, то с исключением последних следов
|
||||
кода, принадлежавшего AT&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=/&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>
|
26
ru_RU.KOI8-R/articles/fonts/Makefile
Normal file
26
ru_RU.KOI8-R/articles/fonts/Makefile
Normal 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"
|
1002
ru_RU.KOI8-R/articles/fonts/article.sgml
Normal file
1002
ru_RU.KOI8-R/articles/fonts/article.sgml
Normal file
File diff suppressed because it is too large
Load diff
26
ru_RU.KOI8-R/articles/formatting-media/Makefile
Normal file
26
ru_RU.KOI8-R/articles/formatting-media/Makefile
Normal 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"
|
664
ru_RU.KOI8-R/articles/formatting-media/article.sgml
Normal file
664
ru_RU.KOI8-R/articles/formatting-media/article.sgml
Normal 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>
|
|
@ -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
|
||||
#
|
||||
|
||||
|
|
|
@ -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>> </literal></quote>. Вставка пробела после
|
||||
<quote><literal>> </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>
|
||||
|
|
20
ru_RU.KOI8-R/articles/ipsec-must/Makefile
Normal file
20
ru_RU.KOI8-R/articles/ipsec-must/Makefile
Normal 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"
|
367
ru_RU.KOI8-R/articles/ipsec-must/article.sgml
Normal file
367
ru_RU.KOI8-R/articles/ipsec-must/article.sgml
Normal 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<<L)
|
||||
#define Q (10*V)
|
||||
#define K (100 *Q)
|
||||
#define MAXSAMP (Q + K)
|
||||
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
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 < 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 < V; i++) {
|
||||
table[i] = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < 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 < Q + K; i++) {
|
||||
j = i;
|
||||
b = fgetc(fptr);
|
||||
|
||||
if (b < 0)
|
||||
run = 0;
|
||||
|
||||
if (run) {
|
||||
if (table[b] > 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 < (int)(sum*8.0 + 0.50); i++)
|
||||
printf("-");
|
||||
|
||||
printf("\n");
|
||||
|
||||
/* refill initial table */
|
||||
if (0) {
|
||||
for (i = 0; i < Q; i++) {
|
||||
b = fgetc(fptr);
|
||||
if (b < 0) {
|
||||
run = 0;
|
||||
} else {
|
||||
table[b] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</programlisting>
|
||||
</sect1>
|
||||
</article>
|
20
ru_RU.KOI8-R/articles/mh/Makefile
Normal file
20
ru_RU.KOI8-R/articles/mh/Makefile
Normal 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"
|
819
ru_RU.KOI8-R/articles/mh/article.sgml
Normal file
819
ru_RU.KOI8-R/articles/mh/article.sgml
Normal 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>—чтение
|
||||
новой почты или проверка ее наличия</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<<On Mon, 15 J
|
||||
30 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
|
||||
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
|
||||
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
|
||||
33 01/16 Michael Smith Re: FBSD 2.1<<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>—вывод и передвижение по электронной
|
||||
почте</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>—сканирование ваших сообщений</title>
|
||||
|
||||
<para><command>scan</command> выдает краткий список сообщений в вашем
|
||||
текущем почтовом ящике. Вот пример того, что вам выдаст команда
|
||||
<command>scan</command>.</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>
|
||||
30+ 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
|
||||
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
|
||||
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
|
||||
33 01/16 Michael Smith Re: FBSD 2.1<<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>—удаление
|
||||
текущего сообщения или почтового ящика</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...<<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<<>>> Bill Fenner said: > 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" <stvlange@wwa.com>
|
||||
To: matt@garply.com
|
||||
Subject: Request...
|
||||
Message-Id: <Pine.BSD.3.91.960119133211.824A-100000@sashimi.wwa.com>
|
||||
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: <199601191756.RAA24416@whydos.lkg.dec.com>
|
||||
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."
|
||||
<199601182318.AA11772@Sysiphos>
|
||||
X-Mailer: exmh version 1.5omega 10/6/94
|
||||
Date: Fri, 19 Jan 1996 17:56:40 +0000
|
||||
From: Matt Thomas <matt@lkg.dec.com>
|
||||
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<<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<<>From matt@tempest.garply.com Tue
|
||||
29 01/16 Karl Heuer need configure/make volunteers<<The FSF is looki
|
||||
30 01/18 Paul Stephanouk Re: [alt.religion.scientology] Raw Meat (humor)<
|
||||
31 01/18 Bill Lenherr Re: Linux NIS Solaris<<--- On Thu, 18 Jan 1996 1
|
||||
34 01/19 John Fieber Re: Stuff for the email section?<<On Fri, 19 Jan
|
||||
35 01/19 support@foo.garpl [garply.com #1138] parlor<<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<<>>> Bill Fenner said: > 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>—поиск почты по некоторому
|
||||
критерию</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>… <option>-and</option> …</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>… <option>-or</option> &hellip</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><option>-not</option> …</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><option>-lbrace</option> …
|
||||
<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>—три полезные программы для управления
|
||||
папками</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>—создание, пересылка или ответ на
|
||||
чье-либо сообщение</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>—файлы компонент для команд
|
||||
<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 %<{reply-to}%?{from}%?{sender}%?{return-path}%>)\
|
||||
%<(nonnull)%(void(width))%(putaddr To: )\n%>\
|
||||
%(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\
|
||||
%<(nonnull)%(void(width))%(putaddr cc: )\n%>\
|
||||
%<{fcc}Fcc: %{fcc}\n%>\
|
||||
%<{subject}Subject: Re: %{subject}\n%>\
|
||||
%<{date}In-reply-to: Your message of "\
|
||||
%<(nodate{date})%{date}%|%(pretty{date})%>."%<{message-id}
|
||||
%{message-id}%>\n%>\
|
||||
--------
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>Он имеет такой же простой формат, как и файл
|
||||
<filename>components</filename>, но содержит несколько дополнительных
|
||||
форматирующих кодов. Команда <literal>%(lit)</literal> опеределяет
|
||||
место для адреса. <literal>%(formataddr</literal> является функцией,
|
||||
которая возвращает полный адрес электронной почты. Следующей частью
|
||||
является <literal>%<</literal>, которая означает условие если и
|
||||
<literal>{reply-to}</literal> соответствует полю reply-to исходного
|
||||
сообщения. Таким образом, это может быть проинтерпретировано
|
||||
следующим образом:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>
|
||||
%<<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>,
|
||||
%> <emphasis remap=bf>endif</emphasis>.
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>Как вы можете видеть, форматирование MH может быть достаточно
|
||||
сложным. Вы можете выяснить, что значат остальные функции и
|
||||
переменные. Вся информация по написанию строк в таком формате
|
||||
находится в справочной странице по MH. Действительно удобной вещью
|
||||
являюется то, что единожды создав собственный файл
|
||||
<filename>replcomps</filename>, вам не нужно больше его трогать. Ни
|
||||
одна другая почтовая программа не даст вам той мощи и гибкости, что
|
||||
дает вам MH.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</article>
|
26
ru_RU.KOI8-R/articles/solid-state/Makefile
Normal file
26
ru_RU.KOI8-R/articles/solid-state/Makefile
Normal 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"
|
693
ru_RU.KOI8-R/articles/solid-state/article.sgml
Normal file
693
ru_RU.KOI8-R/articles/solid-state/article.sgml
Normal 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
|
||||
мегабайт используются гораздо чаще), то установка обычным образом не
|
||||
подходит—просто на диске нет места даже для самой минимальной
|
||||
установки.</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>
|
22
ru_RU.KOI8-R/articles/vm-design/Makefile
Normal file
22
ru_RU.KOI8-R/articles/vm-design/Makefile
Normal 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"
|
922
ru_RU.KOI8-R/articles/vm-design/article.sgml
Normal file
922
ru_RU.KOI8-R/articles/vm-design/article.sgml
Normal 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
|
||||
оказалась ‘необходимой рутиной’. Я переписал лишь малую
|
||||
часть кода. Что касается 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 ‘старой’ операционной системой, те их нас, кто
|
||||
работает над ней, видят ее скорее системой со ‘зрелым’ кодом
|
||||
с различными компонентами, которые были заменены, расширены или изменены
|
||||
современным кодом. Он развивается, и FreeBSD остается передовой
|
||||
системой, вне зависимости от того, насколько старой может быть часть
|
||||
кода. Это важное отличие, которое, к сожалению, не всеми понимается.
|
||||
Самой большой ошибкой, которую может допустить программист, является
|
||||
игнорирование истории, и это именно та ошибка, которую сделали многие
|
||||
другие современные операционные системы. Самым ярки примером здесь
|
||||
является NT, и последствия ужасны. Linux также в некоторой степени
|
||||
совершил эту ошибку—достаточно, чтобы мы, люди BSD, по крайней
|
||||
мере по разу отпустили по этому поводу шутку. Проблема Linux заключается
|
||||
просто в отсутствии опыта и истории для сравнения идей, проблема, которая
|
||||
легко и быстро решается сообществом Linux точно так же, как она решается
|
||||
в сообществе BSD—постоянной работой над кодом. Разработчики NT,
|
||||
с другой стороны, постоянно совершают те же самые ошибки, что были
|
||||
решены в UNIX десятки лет назад, а затем тратят годы на их устранение.
|
||||
Снова и снова. Есть несколько случаев ‘проработка архитектуры
|
||||
отсутствует’ и ‘мы всегда правы, потому что так говорит наш
|
||||
отдел продаж’. Я плохо переношу тех, кого не учит история.</para>
|
||||
|
||||
<para>Большинство очевидной сложности архитектуры FreeBSD, особенно в
|
||||
подсистеме VM/Swap, является прямым следствием того, что она решает
|
||||
серьезные проблемы с производительностью, которые проявляются при
|
||||
различных условиях. Эти проблемы вызваны не плохой проработкой
|
||||
алгоритмов, а возникают из окружающих факторов. В любом прямом сравнении
|
||||
между платформами эти проблемы проявляются, когда системные ресурсы
|
||||
начинают истощаться. Так как я описываю подсистему VM/Swap во FreeBSD,
|
||||
то читатель должен всегда иметь в виду два обстоятельства. Во-первых,
|
||||
самым важным аспектом при проектировании производительности является то,
|
||||
что называется “оптимизацией критического маршрута”. Часто
|
||||
случается, что оптимизация производительности дает прирост объема кода
|
||||
ради того, чтобы критический маршрут работал быстрее. Во-вторых,
|
||||
четкость общей архитектуры оказывается лучше сильно оптимизированной
|
||||
архитектуры с течением времени. Когда как обобщенная архитектура
|
||||
может быть медленнее, чем оптимизированная архитектура, при первой
|
||||
реализации, при обобщенной архитектуре легче подстраиваться под
|
||||
изменяющиеся условия и чрезмерно оптимизированная архитектура оказывается
|
||||
непригодной. Любой код, который должен выжить и поддаваться поддержке
|
||||
годы, должен поэтому быть тщательно продуман с самого начала, даже если
|
||||
это стоит потери производительности. Двадцать лет назад были те, кто
|
||||
отстаивал преимущество программирования на языке ассемблера перед
|
||||
программированием на языке высокого уровня, потому что первый генерировал
|
||||
в десять раз более быстрый код. В наши дни ошибочность этого аргумента
|
||||
очевидна—можно провести параллели с построением алгоритмов и
|
||||
обобщением кода.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Объекты VM</title>
|
||||
|
||||
<para>Лучше всего начать описание VM-системы FreeBSD с попытки взглянуть на
|
||||
нее с точки зрения пользовательского процесса. Каждый пользовательский
|
||||
процесс имеет единое, принадлежащее только ему и неразрывное адресное
|
||||
пространство VM, содержащее несколько типов объектов памяти. Эти объекты
|
||||
имеют различные характеристики. Код программы и ее данные являются
|
||||
единым файлом, отображаемым в память (это выполняющийся двоичный файл),
|
||||
однако код программы доступен только для чтения, когда как данные
|
||||
программы размещаются в режиме копирования-при-записи. BSS программы
|
||||
представляет собой всего лишь выделенную область памяти, заполненную,
|
||||
если это требовалось, нулями, что называется обнулением страниц памяти
|
||||
по требованию. Отдельные файлы могут также отображаться в адресное
|
||||
пространство, именно так работают динамические библиотеки. Такие
|
||||
отображения требуют изменений, чтобы оставаться принадлежащими процессу,
|
||||
который их выполнил. Системный вызов fork добавляет переводит проблему
|
||||
управления VM полностью в новую плоскость, вдобавок к уже имеющимся
|
||||
сложностям.</para>
|
||||
|
||||
<para>Иллюстрирует сложность страница данных двоичной программы (которая
|
||||
является страницей копируемой-при-записи). Двоичная программа содержит
|
||||
секцию предварительно инициализированных данных, которая первоначально
|
||||
отображается непосредственно из файла программы. Когда программа
|
||||
загружается в Vm-пространство процесса, эта область сначала отображается
|
||||
в память и поддерживается бинарным файлом программы, позволяя VM-системе
|
||||
освобождать/повторно использовать страницу, а потом загружать ее снова
|
||||
из бинарного файла. Однако в момент, когда процесс изменяет эти данные,
|
||||
VM-система должна сделать копию страницы, принадлежащую только этому
|
||||
процессу. Так как эта копия была изменена, то VM-система не может больше
|
||||
освобождать эту страницу, так как впоследствии ее невозможно будет
|
||||
восстановить.</para>
|
||||
|
||||
<para>Вы тут же заметите, что то, что сначало было простым отображением
|
||||
файла в память, становится гораздо более сложным предметом. Данные могут
|
||||
модифицироваться постранично, когда как отображение файла выполняется для
|
||||
многих страниц за раз. Сложность еще более увеличивается, когда процесс
|
||||
выполняет вызов fork. При этом порождаются два процесса—каждый со
|
||||
с собственным адресным пространством, включающим все изменения,
|
||||
выполненные исходным процессом до вызова функции
|
||||
<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 соответствует файлу—по необходимости страницы памяти могут
|
||||
высвобождаться и подгружаться с носителя файла. Подгрузка с диска
|
||||
может потребоваться программе, однако на самом деле мы не хотим, чтобы
|
||||
она записывалась обратно в файл. Поэтому 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-система создает два новых уровня объектов—C1
|
||||
для порождающего процесса и C2 для порожденного—они располагаются
|
||||
поверх 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 решает проблему с глубиной вложенности с помощью приема
|
||||
оптимизации, который называется “All Shadowed Case”. Этот
|
||||
случай возникает, если в C1 либо C2 возникает столько случаев копирования
|
||||
страниц при записи, что они полностью закрывают все страницы в B.
|
||||
Допустим, что такое произошло в C1. C1 может теперь полностью заменить
|
||||
B, так что вместо цепочек C1->B->A и C2->B->A мы теперь имеем цепочки
|
||||
C1->A и C2->B->A. Но посмотрите, что получается—теперь 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 в структуре управления областью подкачки
|
||||
предварительно выделяется массив, который представляет целый объект,
|
||||
требующий хранения в области подкачки—даже если только несколько
|
||||
страниц этого объекта хранятся в области подкачки. Это создает проблему
|
||||
фрагментации памяти ядра в случае, когда в память отображаются большие
|
||||
объекты или когда ветвятся процессы, занимающие большой объем памяти при
|
||||
работе (RSS). Также для отслеживания памяти подкачки в памяти ядра
|
||||
поддерживается ‘список дыр’, и он также несколько
|
||||
фрагментирован. Так как 'список дыр' является последовательным списком,
|
||||
то производительность при распределении и высвобождении памяти в области
|
||||
подкачки неоптимально и ее сложность зависит от количества страниц как
|
||||
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 со
|
||||
сравнительно малыми накладными расходами. Однако страницы в очереди кэша
|
||||
предполагается ‘высвобождать немедленно’ и повторно
|
||||
использовать в 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 лет назад) процессорные кэши предпочитали отображать
|
||||
виртуальную память, а не физическую. Это приводило к огромному
|
||||
количеству проблем, включая необходимость очистки кэша в некоторых
|
||||
случаях при каждом переключении контекста и проблемы с замещением данных
|
||||
в кэше. В современных процессорах кэши отображают физическую память
|
||||
именно для решения этих проблем. Это означает, что две соседние страницы
|
||||
в адресном пространстве процессов могут не соответствовать двух соседним
|
||||
страницам в кэше. Фактически, если вы об этом не позаботились, то
|
||||
соседние страницы в виртуальной памяти могут использовать ту же самую
|
||||
страницу в кэше процессора—это приводит к сбросу кэшируемых данных
|
||||
и снижению производительности 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>Что это за “алгоритм чередования”, который вы
|
||||
упоминали в списке недостатков подсистемы управления разделом
|
||||
подкачки во FreeBSD 3.x?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>FreeBSD использует в области подкачки механизм чередования,
|
||||
с индексом по умолчанию, равным четырем. Это означает, что FreeBSD
|
||||
резервирует пространство для четырех областей подкачки, даже если
|
||||
у вас имеется всего лишь одна, две или три области. Так как в
|
||||
области подкачки имеется чередование, то линейное адресное
|
||||
пространство, представляющее ‘четыре области подкачки’,
|
||||
будет фрагментироваться, если у вас нет на самом деле четырех
|
||||
областей подкачки. Например, если у вас две области 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 использует ‘последовательный список свободных
|
||||
областей’ для управления свободными областями в разделе
|
||||
подкачки. Идея состоит в том, что большие последовательные блоки
|
||||
свободного пространства могут быть представлены при помощи узла
|
||||
односвязного списка (<filename>kern/subr_rlist.c</filename>). Но
|
||||
из-за фрагментации последовательный список сам становится
|
||||
фрагментированным. В примере выше полностью неиспользуемое
|
||||
пространство в A и B будет показано как ‘свободное’,
|
||||
а C и D как ‘полностью занятое’. Каждой
|
||||
последовательности 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>Да, это запутывает. Связь заключается в “желаемом”
|
||||
и “действительном”. Мы желаем разделить страницы, но
|
||||
реальность такова, что пока у нас нет проблем с памятью, нам это на
|
||||
самом деле не нужно.</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>—как в 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 использует
|
||||
‘постоянные’ таблицы страниц, которые не сбрасываются,
|
||||
но ему не нужны <literal>pv_entry</literal> для каждого
|
||||
потенциально отображаемого pte. FreeBSD использует
|
||||
‘сбрасываемые’ таблицы страниц, но для каждого
|
||||
реально отображаемого 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>Я очень сильно все упрощаю. То, что я только что описал,
|
||||
называется ‘напрямую отображаемым’ аппаратным кэшем
|
||||
памяти. Большинство современных кэшей являются так называемыми
|
||||
2-сторонними множественными ассоциативными или 4-сторонними
|
||||
множественными ассоциативными кэшами. Множественная
|
||||
ассоциативность позволяет вам обращаться к вплоть до N различным
|
||||
областям памяти, которые используют одну и ту же память кэша без
|
||||
уничтожения ранее помещенных в кэш данных. Но только N.</para>
|
||||
|
||||
<para>Так что если у меня имеется 4-сторонний ассоциативный кэш, я
|
||||
могу обратиться к памяти по смещению 0, смещению 128К, 256К и
|
||||
смещению 384K, затем снова обратиться к памяти по смещению 0 и
|
||||
получу ее из кэша L1. Однако, если после этого я обращусь к памяти
|
||||
по смещению 512К, один из ранее помещенных в кэш объектов данных
|
||||
будет из кэша удален.</para>
|
||||
|
||||
<para>Это чрезвычайно важно… для большинства обращений к
|
||||
памяти процессора <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>Заметьте, что я сказал ‘примерно’ подходящие, а не
|
||||
просто ‘последовательные’. С точки зрения напрямую
|
||||
отображаемого кэша в 128К, физический адрес 0 одинаков с физическим
|
||||
адресом 128К. Так что две граничащие страницы в вашем виртуальном
|
||||
адресном пространстве могут располагаться по смещению 128К и 132К
|
||||
физической памяти, но могут легко находиться по смещению 128К и по
|
||||
смещению 4К физической памяти, и иметь те же самые характеристики
|
||||
работы кэша. Так что при подгонке <emphasis>не
|
||||
нужно</emphasis> назначать в действительности последовательные
|
||||
страницы физической памяти последовательным страницам виртуальной
|
||||
памяти, достаточно просто добиться расположения страниц по
|
||||
соседству друг с другом с точки зрения работы кэша.</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
</qandaset>
|
||||
</sect1>
|
||||
</article>
|
104
ru_RU.KOI8-R/articles/vm-design/fig1.eps
Normal file
104
ru_RU.KOI8-R/articles/vm-design/fig1.eps
Normal 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
|
115
ru_RU.KOI8-R/articles/vm-design/fig2.eps
Normal file
115
ru_RU.KOI8-R/articles/vm-design/fig2.eps
Normal 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
|
133
ru_RU.KOI8-R/articles/vm-design/fig3.eps
Normal file
133
ru_RU.KOI8-R/articles/vm-design/fig3.eps
Normal 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
|
133
ru_RU.KOI8-R/articles/vm-design/fig4.eps
Normal file
133
ru_RU.KOI8-R/articles/vm-design/fig4.eps
Normal 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
|
26
ru_RU.KOI8-R/articles/zip-drive/Makefile
Normal file
26
ru_RU.KOI8-R/articles/zip-drive/Makefile
Normal 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"
|
299
ru_RU.KOI8-R/articles/zip-drive/article.sgml
Normal file
299
ru_RU.KOI8-R/articles/zip-drive/article.sgml
Normal 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: <IOMEGA ZIP 100 D.13> 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>
|
Loading…
Reference in a new issue