завершены (т.е. закрыты все используемые ими файлы и др.), затем
демонтируются файловые системы и swap-области и, в конце концов,
на экран выдается сообщение о том, что питание может быть
отключено. Если же такая процедура не будет произведена, то могут
произойти серьезные сбои в последующей работе системы. Например,

- 17 -

информация, хранящаяся в кэш буфере файловой системы, будет
утеряна, нарушится целостность файловой системы и, следовательно,
она будет не пригодна к использованию.

3.2 Процесс запуска при близком рассмотрении

Linux может быть запущена как с дискет, так и с жесткого
диска. В книге "Установка и запуск Linux" подробно описан запуск
системы.

При включении компьютера, сначала BIOS производит
тестирование оборудования, а затем запуск операционной системы.
Сначала выбирается устройство, с которого будет производится
запуск (обычно первый дисковод, если в него вставлена дискета, в
противном случае - первый жесткий диск, если он установлен, хотя
порядок выбора может быть настроен) и считывается самый первый
сектор, который называется загрузочным. Его также называют MBR
(Master Boot Record), так как у жесткого диска может быть
несколько разделов и у кажодого может быть свой загрузочный
сектор.

В загрузочном секторе находится небольшая программа
(относительно небольшая чтобы она могла разместится в одном
секторе), которая загружает и запускает операционную систему. При
загрузке с дискеты, в загрузочном секторе находится код, который
обеспечивает только считывание ядра системы в определенную заранее
область памяти. Загрузочная дискета для Linux не содержит никаких
файловых систем. Ядро записано на дискете как последовательность
блоков, так как это значительно упрощает процесс загрузки. Однако,
вполне можно загружаться с дискеты, на которой установлена
какая-нибудь файловая система, используя загpузчик LILO.

При загрузке с жесткого диска, код, расположенный в MBR,
проверяет таблицу разделов (также расположенную в MBR), определяет
активный раздел (раздел, используемый при загрузке), считывает
загрузочный сектор этого раздела и запускает считанный код. Код,
расположенный в загрузочном секторе активного раздела жесткого
диска, выполняет те же функции, что и код, находящийся в

- 18 -

загрузочном секторе дискеты: он считывает ядро из выбранного
раздела, а затем запускает его. Однако здесь существует много
тонкостей, так как использование отдельного раздела диска только
для хранения кода ядра неэффективно, поэтому код, расположенный в
загрузочном секторе раздела, не просто последовательно считывает
информацию с диска, а использует считывание по секторам.
Существует несколько способов решения этой проблемы, но наиболее
простым из них является использование LILO загрузчика (информацию
по установке и настройке LILO см. в документации по LILO).

При загрузке с использованием LILO обычно сразу же
загружается и запускается ядро, заданное по умолчанию, однако
можно сконфигурировать LILO так, чтобы можно было бы загрузить
одно из нескольких возможных ядер или даже другую операционную
систему (в добавление к Linux). Также можно указать требуемое ядро
или операционную сиситему во время загрузки. При нажатии клавиши
ALT, SHIFT или CTRL (после загрузки LILO) будет выдан запрос, где
можно указать ядро или систему. Однако при конфигурировании можно
установить опцию, при которой LILO будет всегда выдвать такой
запрос, а также указать время, по истечении которого загружается
ядро, установленное по умолчанию.

Существуют и другие загрузчики, подобные LILO, однако у него
есть несколько полезных функций, которых нет в других загрузчиках,
так как он был написан специально для Linux. Например, имеется
возможность передачи ядру параметров во время загрузки или
изменения некоторых опций, встроенных в ядро. Среди подобных
загрузчиков (bootlin, bootactv и др.) LILO является наилучшим
выбором.

Загрузка системы как с жесткого диска, так и с дискет имеет
свои преимущества, хотя загрузка с жесткого диска считается лучше
и быстрее, так как она позволяет избежать неудобства, связанные со
сменой дискет. Однако в некоторых случаях загрузка с дискет более
удобна. Например, при установке системы или при повреждении
файловой системы.

После того, как ядро системы загружено в память (с жесткого

- 19 -

диска или с дискет) и запущено, выполняются приблизительно
следующие действия:

Так как ядро Linux установлено в запакованном виде, то прежде
всего оно само себя распаковывает. Это выполняет небольшая
программа, расположенная в самом начале кода.

Если на компьютере установлена видеоплата sVGA,
поддерживающая нестандартные текстовые режимы (такие как 100x40),
выдается запрос для указания требуемого режима. При компиляции
ядра можно сразу указать используемый режим, чтобы он не
запрашивался системой во время загрузки. Режим также может быть
установлен при помощи LILO или rdev(8).

Затем ядро тестирует аппаратное обеспечение (жесткие диски,
дисководы, сетевые адаптеры и др.) и конфигурирует соответствующие
драйверы устройств. Во время этого процесса на экран выдаются
подсказывающие сообщения. Вот примерно то, что происходит во время
загрузки:

LILO boot:
Loading linux.
Console: colour EGA+ 80x25, 8 virtual consoles
Serial driver version 3.94 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
lp_init: lp1 exists (0), using polling driver
Memory: 7332k/8192 available (300k kernel code, 384k reserved, 176k data)
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M
Loopback device init
Warning WD8013 board not found at i/o = 280
Math coprocessor using irq13 error reporting
Partition check:
hda: hda1 hda2 hda3
VFS: Mounted root (ext filesystem)
Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20

Хотя текст сообщений довольно сильно различается на разных

- 20 -

системах и зависит от аппаратного обеспечения, версии Linux и
конфигурации.

После этого, ядро пытается смонтиpовать файловую систему
root. Место, куда она будет смонтирована, устанавливается во время
компиляции или с помощью rdev или LILO. Тип файловой системы
определяется автоматически. Если система root не монтиpуется,
например по причине того, что ядро не содержит драйвер
соответствующей файловой системы, то система зависает.

Файловая система root обычно монтиpуется в режиме read-only
(это устанавливается таким же образом как и узел монтиpования).
Это делает возможным проверку файловой системы в то время как она
смонтиpована, хотя проверка файловой системы, установленной в
режиме read-write не рекомедуется.

Затем ядро запускает программу init(8) в фоновом режиме (она
расположена в каталоге /sbin/init) которая становится главным
процессом. init выполняет различные функции, требуемые при
установке системы.

В конце концов init запускает программу getty(8) для
виртуальных консолей и последовательных линий. Эта программа
позволяет подключаться к системе посредством виртуальных консолей
и терминалов, подключенных через последовательные порты. init
может быть сконфигурирована также для запуска и других программ.

После этого процесс запуска системы считается завершенным и
система готова к работе.

3.3 Завершение работы и выключение системы

При выключении системы Linux необходимо выполнять некоторые
процедуры. Если этого не сделать, то файловые системы и файлы
могут повредиться. Это происходит по причине наличия в Linux
дискового кэша, информация из которого записывается на диск только
через некоторые промежутки времени. Это значительно повышает
производительность системы, но также означает, что если просто

- 21 -

выключить питание компьютера, то в дисковом кэше может находится
большое количество информации и файловая система может быть
частично повреждена, так как на диск обычно сбрасывается только
часть информации.

Другой причиной для этого является мультизадачность системы,
где одновременно может выполняться несколько процессов и
выключение питания может быть гибельным для системы. Особенно это
касается компьютеров, на которых одновременно работает несколько
пользователей.

Существуют команды, предназначенные для правильного
выключения системы - это shutdown(8) и halt(8), расположенные в
каталоге /sbin. Есть два обычных способа их применения.

Если система установлена на компьютере, где работает один
пользователь, то обычно завершают работу всех программ, работу
всех виртуальных консолей, входят в систему под пользователем root
(или остаются подключенными под этим пользователем, только в этом
случае нужно перейти в корневой каталог во избежание проблем с
демонтированием файловых систем), затем выполняется команда halt
или shutdown -h now (при желании можно установить задержку,
которая устанавливается заменой параметра now на знак '+' и числом
минут, по истечении которых будет завершена работа системы) или
просто halt.

Если на копьютере, на котором установлена система, работает
одновременно несколько пользователей, то возможно использование
команды shutdown в следующем формате:

shutdown -h +time message,

где time это время, по истечении которого работа системы будет
завершена, а message - сообщение, в котором объясняется причина
выключения. Напpимеp,

root# shutdown -h +10 'We will install a new disk. System should
> be back on-line in three hours.'

- 22 -


Выполнение этой команды предупредит каждого пользователя,
работающего в системе, что она будет выключена через 10 минут.
Сообщение выдается на каждый терминал, где работают пользователи,
включая xterm.

Broadcast message from root (ttyp0) Wed Aug 2 01:03:25 1995...

We will install a new disk. System should
be back on-line in three hours.
The system is going DOWN for system halt in 10 minutes !!

Выдача сообщения автоматически повторяется несколько раз
перед прекращением работы системы и каждый раз с более коротким
интервалом. При использовании halt нельзя установить задержку,
поэтому эта программа редко применяется на многопользовательских
системах.

Замечание: файл /etc/inittab содержит команды, выполняющиеся
при выключении системы.

После запуска процесса прекращения работы системы,
демонтируются все файловые системы (кроме системы root),
завершается выполнение всех процессов и программ-демонов, затем
демонтируется файловая система root и вся работа завершается.
После этого выдается сообщение, в котором говорится, что можно
отключить питание. Только после этого питание компьютера может
быть отключено.

В некоторых случаях невозможно завершить этот процесс
соответствующим образом. Например, при повреждении кода ядра в
памяти, нарушается его работа или система зависает и просто нет
возможности ввести новую команду можно только надеяться, что
ничего не повредится и выключить питание. Если же неполадки не
такие серьезные (например вышла из строя клавиатура), а ядро и
программа update работают нормально, то наилучшим вариантом будет
подождать несколько минут, пока update(8) не сохранит на диске
информацию, хранящуюся в кэш-буфере и только после этого выключить

- 23 -

питание.

Некоторые выключают компьютер после трехкратного выполнения
команды sync(8), которая сбрасывает на диск содержимое буфера, и,
после прекращения обращения к диску, выключают компьютер. Если в
момент выключения работа всех программ была завершена, то эта
процедура почти идентична выполнению команды shutdown. Однако,
файловые системы не демонтируются, что может привести к некоторым
проблемам, связанным с флагом 'clean filesystem' системы ext2fs. В
любом случае использование этого способа не рекомендуется.

3.4 Перезагрузка системы

Процесс перезагрузки может быть достигнут путем прекращения
работы системы, выключения питания и включения снова. Более
простой способ - это указать команде shutdown перезагрузить
систему установив опцию -r. Например, для этого можно использовать
команду shutdown -r now. Также можно использовать команду reboot.

3.5 Однопользовательский режим работы

Команда shutdown может также использоваться для перевода
системы в однопользовательский режим, в котором к системе никто не
может подключится кроме пользователя root, который использует для
работы главную консоль. Это иногда применяется для
административных целей, для выполнения которых не может быть
использована нормально работающая система.

3.6 Дискеты для экстенной загрузки

Не всегда имеется возможность загрузки системы с жесткого
диска. Например, при неправильных установках в LILO загрузчике
систему невозможно будет загрузить. В таких случаях должен быть
другой способ загрузки. Для персональных компьютеров обычно она
выполняется с дискет.

Большинство распространяемых версий Linux позволяют во время
установки системы создать загрузочную дискету. Однако многие такие

- 24 -

дискеты содержат только ядро и, предполагается, что для устранения
неполадок будут использоваться программы, находящиеся на
установочных дисках. Иногда этих программ бывает недостаточно,
например, когда требуется восстановить некоторые файлы, созданные
с помощью программ, которых нет на этих дисках.

Поэтому может возникнуть необходимость в создании специально
настроенного диска. В документации "Bootdisk HOWTO" содержится
необходимая информация для создания подобного диска.

При загрузке со специально настроенного диска нельзя
использовать привод, на котором смонтирована эта дискета, для
каких-либо других целей. Это может создать некоторые неудобства,
если в компьютере имеется только один дисковод. Однако, если
компьютер имеет достаточный объем памяти, можно загрузить этот
диск в RAM диск (для этого ядро, расположенное на дискете должно
быть сконфигурировано соответствующим образом). Это позволяет
использовать дисковод для других целей.
.
- 25 -



Глава 4 Использование Дисков и Других Устройств
Хранения Информации

При установке системы или изменении ее конфигурации обычно
возникает много проблем с дисками. Нужно установить файловые
системы на дисках так, чтобы на них могли хранится файлы, а также
зарезервировать пространство для других частей операционной
системы.

В этой главе рассматриваются все эти вопросы. Обычно, если
система уже установлена, то каких-либо проблем с дисками в
дальнейшем быть не должно, кроме pаботы с дискетами. При установке
нового диска или его настройке следует обращаться к этой главе.

При администрировании дисков могут возникнуть следующие
проблемы:

Форматирование диска (в настоящее время форматирование
является необязательной процедурой для многих типов дисков).

Разделение диска, если диск будет использоваться для разных
целей. Одна из причин разделения - это хранение разных
операционных систем на одном диске. Другая причина - хранение
пользовательских и системных файлов в pазных pазделах, что
упрощает резервное копирование и восстановление, а также защиту
системных файлов от повреждений.

Создание файловой системы на соответствующем диске или
разделе. В системе Linux диск ничего не значит, пока на нем не
установлена файловая система. Только после этого возможна работа с
файлами.

Монтирование различных файловых систем для формирования
единой структуры каталогов, как автоматически так и вручную
(файловые системы, монтируемые вручную, должны быть вpучную
демонтированы).

- 26 -


В главе 6 рассматриваются вопросы буфеpизации дисков и работы
с виртуальной памятью, что также нужно знать при работе с дисками.

В этой главе рассматриваются вопросы, которые необходимо
знать при работе с жесткими и гибкими дисками. К сожалению здесь
не рассматривается использование ленточных накопителей и приводов
для компакт дисков.

4.1 Типы устройств

В системе UNIX, а следовательно и Linux, существует два типа
устройств: блочные устройства с прямым доступом (такие как диски)
и символьные устройства (такие как ленточные накопители и
последовательные порты), некоторые из них могут быть
последовательными, а некоторые - с прямым доступом. Каждое
поддерживаемое устройство представляется в файловой системе файлом
устройства. При выполнении операций чтения или записи с подобным
файлом, происходит обмен данными между устройством, на которое
указывает этот файл. Такой способ доступа к устройствам позволяет
не использовать специальные программы (а также специальные методы
програмирования, такие как работа с прерываниями). Например, для
распечатки файла на принтере, используется следующая команда:

ttyp5 root ~ $ cat filename > /dev/lp1
ttyp5 root ~ $

Однако, для распечатки файлов используется специальная
программа (обычно lpr(1)), которая контролирует поток поступающих
файлов во избежание возникновения конфликтных ситуаций, например,
при попытке распечатать на одном принтере одновpеменно несколько
разных файлов. По мере распечатки, новые файлы поступают
автоматически. По подобной схеме работает большинство устройств.
Однако с файлами устройств проблемы возникают очень редко.

Так как устройства отображаются как файлы в файловой системе
(в каталоге /dev), несложно обнаружить с помощью команды ls(1)
какие существуют файлы устройств. После выполнения команды ls -l

- 27 -

на экран выводится список файлов, причем в первой колонке
содержится тип файла и права доступа к нему. Например, для
просмотра файла, соответствующего последовательному порту,
используется следующая команда:

ttyp5 root ~ $ ls -l /dev/cua0
crw-rw-rw- 1 root uucp 5, 64 Nov 30 1993 /dev/cua0
ttyp5 root ~ $

Первый символ в первой колонке, т.е. 'c', показывает тип
файла, в данном случае символьное устройство. Для обычных файлов
используется символ '-', для каталогов - 'd', для блочных
устройств - 'b' (см. pуководство к команде ls(1) для более
подробной информации).

Наличие большого количества файлов устройств совсем не
означает, что эти устройства на самом деле установлены. Наличие
файла /dev/sda ни о чем не говорит и совсем не означает, что в
компьютере установлен жесткий диск SCSI. Это предусмотрено для
облегчения установки программ и нового оборудования (нет
необходимости искать нужные параметры и создавать файлы для новых
устройств).

4.2 Жесткие диски

В этом разделе рассматриваются термины, связанные с
использованием жестких дисков.

Жесткий диск состоит из одной или нескольких круглых пластин,
одна или обе стороны которой покрыты магнитным материалом,
используемым для хранения информации. Для каждой стороны
предусмотрена головка, позволяющая считывать или записывать
информацию. Пластины вращаются на одной оси обычно со скоростью
3600 оборотов в минуту, хотя в более быстрых пpиводах используются
более высокие скорости. Головки перемещаются вдоль радиуса
поверхности пластин, что позволяет получить доступ к любой точке
поверхности.


- 28 -

Центральный процессор (CPU) и жесткий диск обмениваются
информацией через дисковый контроллер. Это упрощает схему
обращения и работы с диском, так как контроллеры для разных типов
дисков могут быть построены с использованием одного интерфейса для
связи с компьютером. Поэтому, например, для считывания сектора
можно воспользоваться всего лишь одной командой вместо сложных
последовательностей электрических сигналов для того, чтобы
переместить головки к нужной позиции, синхронизировать вращение
диска и считывание или запись данных и др. (на самом деле,
интерфейс между компьютером и контроллером тоже достаточно сложен,
но не на столько, на сколько он был бы без использования
контроллера). Котроллер также выполняет и некоторые другие
функции, такие как буфеpизация информации или автоматическая
замена плохих секторов.

Существуют еще некоторые понятия, знание которых необходимо
для понимания работы жесткого диска. Обычно поверхности делятся на
концентрические кольца, называемые дорожками или трэками, которые,
в свою очередь, делятся на сектора. Такое разделение нужно для
указания нужных позиций на диске и для распределения дискового
пространства на файлы. Для нахождения нужной информации на диске
достаточно примерно следующих данных: "поверхность 3, дорожка 5,
сектор 7". Обычно количество секторов на дорожке одинаково для
всех дорожек на диске, хотя в некоторых устройствах на внешних
трэках размещается большее количество секторов (все сектора имеют
один и тот же физический размер, поэтому на более длинных дорожках
помещается больше секторов). Стандартный размер сектора равен 512
байт. Диск не может оперировать данными, объем которых менее
одного сектора.

Каждая поверхность разделена на дорожки (и сектора) таким
образом, что при перемещении головки одной поверхности к
какой-либо дорожке, головки остальных поверхностей будут
установлены на этой же дорожке. Совокупность всех таких дорожек
называется цилиндром. Для перемещения головок от одной дорожки
(цилиндра) к другой требуется какое-то количество времени. Таким
образом, если разместить данные, доступ к которым чаще всего
производится сразу (например, файл), в одном цилиндре, то

- 29 -

необходимость в перемещении головок отпадает. Это повышает
производительность работы диска. Не всегда представляется
возможным разместить файл подобным образом. Файлы, которые
хранятся в разных местах на диске, называются фрагментированными.

Количество поверхностей (или головок, что в принципе одно и
то же), цилиндров и секторов сильно различается у разных
устройств. Совокупность таких параметров называется структурой
диска, которая хранится в специальной памяти, для питания которой
используются аккумуляторы. Эта память называется CMOS RAM, откуда
операционная система может считывать информацию во время ее
загрузки или во время установки драйвера.

К сожалению, BIOS построен так, что не представляется
возможным указать дорожку, номер которой превышает 1024, для
записи в CMOS RAM, что является серьезным ограничением для дисков
больших объемов. Для решения этой проблемы контроллер жесткого
диска передает заведомо неправильную информацию о структуре диска
и преобразует данные, представляемые компьютером, в нечто,
соответсвующее реальности. Например, жесткий диск может состоять
из 8 головок, 2048 дорожек с 35 секторами в каждой. В то время как
контроллер может утверждать, что диск имеет 16 головок и 1024
дорожки с 35 секторами в каждой, не превышая предела на хранение в
CMOS RAM числа дорожек и преобразуя адресацию уменьшая номер
головки вдвое и удваивая номер дорожки. Преобразование адресов
искажает представление операционной системы о структуре диска, что
усложняет размещение требуемой информации на одном цилиндре для
увеличения производительности.

Преобразование используется только для IDE дисков. В SCSI
дисках используется доступ с применением последовательного номера
сектора (который контроллер преобразует в номер головки, цилиндра
и сектора диска) и другой метод обмена информацией с процессором.
Однако, процессор может не иметь представления о реальной
структуре диска.

Так как системе Linux часто не известна информация о
структуре диска, то в файловых системах не используется размещение

- 30 -

отдельных файлов в пределах одного цилиндра. Вместо этого
применяется размещение файлов в цепочках последовательно
расположенных секторов, что дает приблизительно одинаковую
производительность. Хотя проблема усложняется за счет
использования специальных возможностей контроллера, таких как
внутреннее кэширование и других автоматических функций.

Каждый жесткий диск представлен отдельным файлом. Для IDE
дисков обычно существует только два таких файла. Они известны как
/dev/hda и /dev/hdb соответственно. Для SCSI дисков используются
файлы /dev/sda и /dev/sdb и т.д. Подобные обозначения применяются
и для других типов дисков. Файлы устройств для жестких дисков
предоставляют доступ к целому диску, не рассматривая разделы
(которые будут описаны ниже) и поэтому не составляет труда
перепутать разделы диска или информацию в них, если не быть
достаточно осторожным. Файлы жестких дисков обычно используются
для доступа к информации в MBR (которые также рассмотрены ниже).

4.3 Гибкие диски

Гибкий диск состоит из мягкой пластины, покрытой с одной или
обоих сторон материалом, подобным тому, которым покрыты пластины в
жестком диске. У самой дискеты нет никаких головок, они
установлены в приводе. Дискету можно сравнить с одной пластиной,
установленной в жестком диске, только дискета является съемной и
привод может использоваться для работы с различными дисками, в то
время как жесткий диск является одним неделимым устройством.

Также как жесткий диск, дискета делится на дорожки и сектора
(а две соответствующие дорожки на разных сторонах составляют
цилиндр), но их намного меньше, чем на жестком диске.

Дисковод может работать с несколькими типами дискет.
Например, привод на 3.5 дюйма может работать с дисками на 720 Кб и
1.44 Мб. Так как при использовании разных типов дисков, работа
самого привода немного различается, к тому же операционная система
должна иметь представление об объеме диска, существует множество
файлов устройств для работы с приводами для гибких дисков.

- 31 -

Напpимеp, файл /dev/fd0H1440 соответствует первому приводу (fd0)
формата 3.5 дюйма с дискетой на 3.5 дюйма высокой плотности (H)
объемом 1440 Кб (1440), т.е. позволяет pаботать с обычными
дискетами на 3.5 дюйма.

Имена файлов для приводов гибких дисков довольно сложные,
поэтому в системе Linux существует специальный тип устройства,
который автоматически определяет тип используемого гибкого диска.
Метод определения заключается в последовательном чтении первого
сектора вставленной дискеты с пpименением различных способов
чтения, до тех пор, пока он не будет правильно считан.
Естественно, диск должен быть сначала отформатирован.
Автоматическими устройствами являются /dev/fd0, /dev/fd1 и т.д.

Параметры для автоматических устройств, которые используются
для доступа к диску, могут быть установлены с помощью программы
setfdprm(8). Это может быть полезно в некоторых случаях, например,