boot(7)

ИМЯ
boot - процесс запуска системы, основанный на UNIX System V Release 4

ОПИСАНИЕ
Процесс запуска (или «последовательность запуска») варьируется в отдельных местах на разных системах, но в целом её можно разделить на несколько основных шагов, управляемых следующими компонентами:

(1) оборудование

(2) загрузчик операционной системы

(3) ядро

(4) начальный процесс пользовательского пространства (init и inittab)

(5) загрузочные сценарии

Далее следует их более подробное описание.

  Оборудование
После подачи питания или аппаратной перезагрузки управление передаётся программе, хранящейся в памяти, доступной только на чтение (обычно это PROM). По историческим причинам, связанным с персональными компьютерами, эту программу часто называют BIOS.

Эта программа, обычно, выполняет простейшие тесты компьютера и читает дополнительные из энергонезависимой памяти. Эта память в ПК реализована на базе памяти CMOS с питанием от батареи, и для краткости называется просто CMOS, хотя её официальное название вне мира ПК — NVRAM (nonvolatile RAM).

Параметры, хранящиеся в NVRAM, отличаются в разных системах, но как минимум, в ней хранится информация об устройстве с загрузчиком ОС или о порядке просмотра устройств; такое устройство называют загрузочным устройством. На аппаратной загрузочной стадии из постоянного места загрузочного устройства загружается загрузчик ОС, а затем ему передаётся управление.

Примечание:
    Устройство, с которого может быть прочитан загрузчик ОС, может находиться в сети; в этом случае детали загрузки определяются протоколами типа DHCP, TFTP, PXE, Etherboot и т. п.

  Загрузчик ОС
Основной задачей загрузчика ОС является поиск ядра на некоем устройстве, загрузка его в память и запуск. Большинство загрузчиков ОС имеют интерактивный режим, позволяют указывать альтернативное ядро (резервное, если не заработает последнее собранное) и передавать ядру необязательные параметры.

В обычных ПК загрузчик ОС расположен в начальном 512-байтовом блоке загрузочного устройства — в так называемой главной загрузочной записи MBR (Master Boot Record).

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

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

В Linux системным загрузчиком ОС часто является программа lilo(8) или grub(8).

  Ядро
После загрузки ядро инициализирует различные компоненты компьютера и ОС; каждая часть ПО, ответственного за эту задачу, обычно, считается драйвером какого-то компонента. Ядро запускает процесс создания виртуальной памяти (это процесс ядра, в современных ядрах Linux называется «kswapd») и монтирует одну из файловых систем в качестве корневой (/).

Некоторые из параметров, которые могли быть переданы ядру, влияют на эти действия (например, можно переопределить корневую файловую систему по умолчанию). Для получения более подробной информации о параметрах ядра Linux читайте bootparam(7).

Только после этого ядро создаёт первый пользовательский процесс PID (идентификатор процесса) которого равен 1. Обычно, этот процесс исполняет программу /sbin/init, передавая ей все оставшиеся параметры загрузки, не обработанные ядром.

  Корневой процесс пользовательского пространства

Примечание:
    Дальнейшее описание применимо к ОС на основе UNIX System V Release 4. Однако, в некоторых широко используемых системах используется похожий, но существенно отличающийся подход, называемый systemd(1), процесс загрузки которого подробно описан в bootup(7).

При запуске /sbin/init считывается файл /etc/inittab для получения дальнейших инструкций. Этот файл определяет, что должно быть запущено, когда программа /sbin/init получит команду перейти на определённый уровень выполнения (run-level). Это позволяет администратору легко настроить окружение под какую-то задачу; для каждого уровня выполнения определён свой набор служб (например, S это однопользовательский (single-user) режим, на уровне 2 запускаются почти все сетевые службы).

Администратор может изменить текущий уровень выполнения с помощью init(1) и определить текущий уровень, используя runlevel(8).

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

  Загрузочные сценарии

Примечание:
    Следующее описание применимо к системам, основанным на UNIX System V Release 4. Однако в некоторых широко используемых системах (Slackware Linux, FreeBSD, OpenBSD) используется немного другая схема загрузочных сценариев.

Для каждой управляемой службы (почтовой, сервера nfs, cron и т. п.) существует отдельный сценарий запуска в особом каталоге (/etc/init.d в большинстве версий Linux). Каждый из этих сценариев воспринимает в качестве отдельного аргумента слово «start» (вызывает запуск сценария) или слово «stop» (остановка службы). Сценарий может (необязательно) воспринимать и другие параметры (например, «restart» для остановки и запуска, «status» для отображения состояния службы и т. п.). Запуск сценария без параметров обычно покажет все возможные аргументы.

  Последовательность каталогов запуска
Для того, чтобы разные сценарии запускались/останавливались на разных уровнях выполнения в некотором, чётко определённом порядке, существует так называемая последовательность каталогов запуска. Это список каталогов, обычно /etc/rc[0-6S].d. В каждом из этих каталогов есть ссылки (обычно символические) на сценарии в каталоге /etc/init.d.

A primary script (usually /etc/rc) is called from inittab(5); this primary script calls each service's script via a link in the relevant sequencing directory. Each link whose name begins with 'S' is called with the argument "start" (thereby starting the service). Each link whose name begins with 'K' is called with the argument "stop" (thereby stopping the service).

Для определения порядка запуска или остановки сценариев в одном уровне выполнения имена ссылок содержат порядковые номера. Также, для понимания смысла имён, они, обычно, заканчиваются на имя службы, которую они обслуживают. Например: ссылка /etc/rc2.d/S80sendmail запускает службу sendmail на уровне выполнения 2. Это случится после запуска /etc/rc2.d/S12syslog, но перед запуском /etc/rc2.d/S90xfs.

Через управление этими ссылками осуществляется управление порядком загрузки и уровнями выполнения; во многих системах существуют инструменты, помогающие в решении этой задачи (например, chkconfig(8)).

  Настройки загрузки
Программу, предоставляющую службу, часто называют демоном (daemon). Обычно, демоны могут воспринимать разные параметры командной строки и параметры. Для изменения таких параметров системным администраторам без редактирования текста сценария загрузки можно использовать отдельные файлы настроек. Они расположены в особом каталоге (обычно, /etc/sysconfig в старых системах Red Hat) и используются загрузочными сценариями.

В старых системах UNIX эти файлы содержали именно параметры командной строки демона, но в современных системах Linux (а также в HP-UX) эти файлы просто содержат разные переменные оболочки. Загрузочные сценарии в /etc/init.d читают и включают эти файлы настроек (то есть, выполняют команду sources для своего файла настройки) и после этого используют значения переменных.

ФАЙЛЫ
/etc/init.d/, /etc/rc[S0-6].d/, /etc/sysconfig/

СМ. ТАКЖЕ
init(1), systemd(1), inittab(5), bootparam(7), bootup(7), runlevel(8), shutdown(8)

ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Artyom Kunyov <artkun@guitarplayer.ru>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy Ovchinnikov <dmitriyxt5@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.