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$
|
# $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
|
# Original revision: 1.9
|
||||||
|
|
||||||
#SUBDIR = committers-guide
|
#SUBDIR = committers-guide
|
||||||
#SUBDIR+= dialup-firewall
|
SUBDIR+= dialup-firewall
|
||||||
#SUBDIR+= diskless-x
|
SUBDIR+= diskless-x
|
||||||
SUBDIR = freebsd-questions
|
SUBDIR+= explaining-bsd
|
||||||
#SUBDIR+= fonts
|
SUBDIR+= fonts
|
||||||
#SUBDIR+= formatting-media
|
SUBDIR+= formatting-media
|
||||||
#SUBDIR+= ipsec-must
|
SUBDIR+= freebsd-questions
|
||||||
#SUBDIR+= mh
|
SUBDIR+= ipsec-must
|
||||||
|
SUBDIR+= mh
|
||||||
#SUBDIR+= multi-os
|
#SUBDIR+= multi-os
|
||||||
#SUBDIR+= new-users
|
#SUBDIR+= new-users
|
||||||
#SUBDIR+= programming-tools
|
#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}/../..
|
DOC_PREFIX?= ${.CURDIR}/../..
|
||||||
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
|
.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$
|
||||||
# $FreeBSD: doc/ru_RU.KOI8-R/articles/Makefile.inc,v 1.1 2001/03/11 16:23:41 phantom Exp $
|
# $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
|
# Original revision: 1.3
|
||||||
#
|
#
|
||||||
|
|
||||||
|
TIDYFLAGS= -latin1
|
||||||
DESTDIR?= ${DOCDIR}/ru_RU.KOI8-R/articles/${.CURDIR:T}
|
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
|
# 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" [
|
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
|
||||||
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
|
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
|
||||||
%man;
|
%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>
|
<article>
|
||||||
<articleinfo>
|
<articleinfo>
|
||||||
<title>Как работать со списком рассылки FreeBSD-questions c максимальной
|
<title>Как работать со списком рассылки FreeBSD-questions c максимальной
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
</affiliation>
|
</affiliation>
|
||||||
</author>
|
</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>
|
<abstract>
|
||||||
<para>В этом документе содержится информация, которая будет полезна
|
<para>В этом документе содержится информация, которая будет полезна
|
||||||
|
@ -112,7 +112,7 @@ subscribe FreeBSD-questions
|
||||||
<para>Когда вы подписывались на список рассылки FreeBSD-questions, вы
|
<para>Когда вы подписывались на список рассылки FreeBSD-questions, вы
|
||||||
получили приглашающее сообщение от
|
получили приглашающее сообщение от
|
||||||
<email>Majordomo@FreeBSD.ORG</email>. В этом сообщении, кроме всего
|
<email>Majordomo@FreeBSD.ORG</email>. В этом сообщении, кроме всего
|
||||||
прочего, вам рассказвывалось о том, как отписаться. Вот типичное
|
прочего, вам рассказывалось о том, как отписаться. Вот типичное
|
||||||
сообщение:</para>
|
сообщение:</para>
|
||||||
|
|
||||||
<literallayout class="monospaced">
|
<literallayout class="monospaced">
|
||||||
|
@ -210,13 +210,13 @@ you consider the question to be pretty technical.
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
|
|
||||||
<para>Имеется также некоторое количество других специализиованных списков
|
<para>Имеется также некоторое количество других специализированных списков
|
||||||
рассылки, например, <literal>FreeBSD-isp</literal>, которые отражают
|
рассылки, например, <literal>FreeBSD-isp</literal>, которые отражают
|
||||||
интересы ISP (Поставщиков Услуг Интернет), работающих со FreeBSD. Если
|
интересы ISP (Поставщиков Услуг Интернет), работающих со FreeBSD. Если
|
||||||
случилось так, что вы являетесь ISP, это вовсе не значит, что вы
|
случилось так, что вы являетесь ISP, это вовсе не значит, что вы
|
||||||
должны автоматически посылать свои вопросы в список рассылки
|
должны автоматически посылать свои вопросы в список рассылки
|
||||||
<literal>FreeBSD-isp</literal>. Здесь также подходит критерий,
|
<literal>FreeBSD-isp</literal>. Здесь также подходит критерий,
|
||||||
указанный выше, и в ваших интересах следовать ему, потому именно так
|
указанный выше, и в ваших интересах следовать ему, потому что именно так
|
||||||
можно получить результат.</para>
|
можно получить результат.</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ you consider the question to be pretty technical.
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Не всякий человек, могущий ответить на вопрос о FreeBSD, читает
|
<para>Не всякий человек, могущий ответить на вопрос о FreeBSD, читает
|
||||||
все сообщения: обычно читается строка с темой письма и решается,
|
все сообщения: обычно читается строка с темой письма и решается,
|
||||||
представляет ли сообщение интерес. То есть в ваших инетересах
|
представляет ли сообщение интерес. То есть в ваших интересах
|
||||||
указать тему письма. ``FreeBSD problem'' или ``Help'' недостаточно.
|
указать тему письма. ``FreeBSD problem'' или ``Help'' недостаточно.
|
||||||
Если вы не укажете тему вообще, то многие даже не потрудятся прочесть
|
Если вы не укажете тему вообще, то многие даже не потрудятся прочесть
|
||||||
сообщение. Если тема сообщения недостаточно конкретна, то люди,
|
сообщение. Если тема сообщения недостаточно конкретна, то люди,
|
||||||
|
@ -314,7 +314,7 @@ you consider the question to be pretty technical.
|
||||||
может выглядеть немножко глупо, потому что ваши сообщения все равно
|
может выглядеть немножко глупо, потому что ваши сообщения все равно
|
||||||
будут доставляться, однако многие люди получают несколько сотен
|
будут доставляться, однако многие люди получают несколько сотен
|
||||||
сообщений в день. Зачастую они сортируют входящие сообщения по
|
сообщений в день. Зачастую они сортируют входящие сообщения по
|
||||||
теме и дате, и если ваше сообщенне не будет предшествовать первому
|
теме и дате, и если ваше сообщение не будет предшествовать первому
|
||||||
ответу, то они могут предположить, что оно потерялось и даже не
|
ответу, то они могут предположить, что оно потерялось и даже не
|
||||||
взглянут на него.</para>
|
взглянут на него.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
@ -342,7 +342,7 @@ you consider the question to be pretty technical.
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>В случае любой проблемы, которая <emphasis>может</emphasis>
|
<para>В случае любой проблемы, которая <emphasis>может</emphasis>
|
||||||
быть связана с работой оборудования, расскажите о вашем
|
быть связана с работой оборудования, расскажите о вашем
|
||||||
аппаратном обеспечении. В случае сомнений предположьте, что это,
|
аппаратном обеспечении. В случае сомнений предположите, что это,
|
||||||
возможно, вина оборудования. Какой тип процессора используется?
|
возможно, вина оборудования. Какой тип процессора используется?
|
||||||
Насколько он быстр? Какая материнская плата? Сколько
|
Насколько он быстр? Какая материнская плата? Сколько
|
||||||
установлено памяти? Какое периферийное оборудование?</para>
|
установлено памяти? Какое периферийное оборудование?</para>
|
||||||
|
@ -506,7 +506,7 @@ fine, but when I try to reboot the system, I get the message
|
||||||
общем случае ответы <quote>Yeah, me too</quote> сильно не помогут,
|
общем случае ответы <quote>Yeah, me too</quote> сильно не помогут,
|
||||||
хотя есть и исключения, например, когда кто-нибудь описывает свою
|
хотя есть и исключения, например, когда кто-нибудь описывает свою
|
||||||
проблему и не знает, его ли это ошибка, или что-то не так с
|
проблему и не знает, его ли это ошибка, или что-то не так с
|
||||||
аппартаным или программным обеспечением. Если вы посылаете сообщение
|
аппаратным или программным обеспечением. Если вы посылаете сообщение
|
||||||
<quote>me too</quote>, включите также относящуюся к делу
|
<quote>me too</quote>, включите также относящуюся к делу
|
||||||
информацию.</para>
|
информацию.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
@ -515,8 +515,8 @@ fine, but when I try to reboot the system, I get the message
|
||||||
<para>Уверены ли вы, что поняли вопрос? Очень часто тот, кто задает
|
<para>Уверены ли вы, что поняли вопрос? Очень часто тот, кто задает
|
||||||
вопрос, путается или не может все хорошо описать. Даже при самом
|
вопрос, путается или не может все хорошо описать. Даже при самом
|
||||||
полном понимании системы легко послать ответ, который не отвечает
|
полном понимании системы легко послать ответ, который не отвечает
|
||||||
на вопрос. Это не помогает: вы делаете того, кто послал вопрос, еще
|
на вопрос. К сожалению, так вы никому не поможете, только ещё больше
|
||||||
полее запутавшимся или разочарованным. Если никто больше не
|
запутаете и разочаруете спрашивающего. Если никто больше не
|
||||||
отвечает, или вы не очень уверены, то всегда можете запросить более
|
отвечает, или вы не очень уверены, то всегда можете запросить более
|
||||||
подробную информацию.</para>
|
подробную информацию.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
@ -536,14 +536,15 @@ fine, but when I try to reboot the system, I get the message
|
||||||
сообщений, посланных и отвеченных другими. Если вы пошлете
|
сообщений, посланных и отвеченных другими. Если вы пошлете
|
||||||
сообщение, представляющее интерес для всех, минуя список рассылки, то
|
сообщение, представляющее интерес для всех, минуя список рассылки, то
|
||||||
лишите этих людей их информации. Будьте внимательны при ответе всем;
|
лишите этих людей их информации. Будьте внимательны при ответе всем;
|
||||||
многие посылают сообщения с сотнями CC-адресатов. Если это ваш
|
многие посылают сообщения с сотнями CC-адресатов. В таких случаях
|
||||||
случай, соответственно отбросьте строки Cc:.</para>
|
удалите лишние строки Cc:.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Включите текст из исходного сообщения, который относится к делу.
|
<para>Из исходного сообщения включите текст, который относится к делу.
|
||||||
Усеките его до мимнимума, но не переусердствуйте. Тот, кто не читал
|
Избегайте излишнего цитирования, но не переусердствуйте. Тот, кто не
|
||||||
первоначального сообщения, должен понять, о чем идет речь.</para>
|
читал первоначального сообщения, должен понять, о чём же идёт
|
||||||
|
речь.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
<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>. Вставка пробела после
|
||||||
<quote><literal>> </literal></quote> и пустых строк между вашим
|
<quote><literal>> </literal></quote> и пустых строк между вашим
|
||||||
текстом и первоначальным текстом сделает результат более
|
и первоначальным текстами сделает результат более читабельным.</para>
|
||||||
читабельным.</para>
|
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Поместите ваш ответ в правильном месте (после текста, на который
|
<para>Поместите ваш ответ в правильном месте (после текста, на который
|
||||||
вы отвечаете). Очень трудно читать набор ответов, когда каждый из
|
вы отвечаете). Очень трудно читать набор ответов, когда каждый из
|
||||||
них следует перед текстом, на который он отвечает.</para>
|
них следует перед текстом, к которому относится.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -570,21 +570,21 @@ fine, but when I try to reboot the system, I get the message
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Если задающий вопрос не следует соглашениям по форматированию
|
<para>Если спрашивающий не следует соглашениям по форматированию текста
|
||||||
текста (строки слишком длинны, неподходящая строка темы),
|
(слишком длинные строки, неподходящая строка темы),
|
||||||
<emphasis>пожалуйста</emphasis>, исправьте это. В случае
|
<emphasis>пожалуйста</emphasis>, исправьте эти ошибки. В случае
|
||||||
некорректной строки темы письма (типа <quote>HELP!!??</quote>)
|
некорректной строки темы письма (типа <quote>HELP!!??</quote>)
|
||||||
измените ее на (к примеру) <quote>Re: Difficulties with sync PPP
|
измените её, например, так: <quote>Re: Difficulties with sync PPP
|
||||||
(was: HELP!!??)</quote>. В таком случае у других людей, пытающихся
|
(was: HELP!!??)</quote>. В таком случае у других людей, пытающихся
|
||||||
отследить обсуждение, будет меньше проблем.</para>
|
отследить обсуждение, будет меньше проблем.</para>
|
||||||
|
|
||||||
<para>В таких случаях хорошо сказать, что вы сделали и почему, но
|
<para>В таких случаях хорошо сказать, что вы сделали и почему, но
|
||||||
постарайтесь не грубить. Если оказывается, что вы не можете
|
постарайтесь не грубить. Если вы чувствуете, что не можете ответить,
|
||||||
ответить, не скатываясь на грубость, не отвечайте.</para>
|
не скатываясь на грубость, воздержитесь от ответа вообще.</para>
|
||||||
|
|
||||||
<para>Если вы хотите ответить на сообщение лишь потому, что оно плохо
|
<para>Если вы хотите ответить на сообщение лишь потому, что оно плохо
|
||||||
оформлено, ответьте только автору, но не в список. Если хотите, то
|
оформлено, ответьте только автору, но не в список. Если хотите, то
|
||||||
в ответ можете просто послать ему это сообщение.</para>
|
в ответ можете просто послать ему эту статью.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
</sect1>
|
</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