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 байт на ПК (включая таблицу разделов) делает почти невозможным сделать его многофункциональным.

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

In Linux, the OS loader is often grub(8) (an alternative is lilo(8)).

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

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

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

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

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

When /sbin/init starts, it reads /etc/inittab for further instructions. This file defines what should be run when the /sbin/init program is instructed to enter a particular run level, giving the administrator an easy way to establish an environment for some usage; each run level is associated with a set of services (for example, run level S is single-user mode, and run level 2 entails running most network services).

The administrator may change the current run level via init(1), and query the current run level via runlevel(8).

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

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

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

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

  Последовательность каталогов запуска
To make specific scripts start/stop at specific run levels and in a specific order, there are sequencing directories, normally of the form /etc/rc[0-6S].d. In each of these directories, there are links (usually symbolic) to the scripts in the /etc/init.d directory.

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).

To define the starting or stopping order within the same run level, the name of a link contains an order-number. Also, for clarity, the name of a link usually ends with the name of the service to which it refers. For example, the link /etc/rc2.d/S80sendmail starts the sendmail(8) service on run level 2. This happens after /etc/rc2.d/S12syslog is run but before /etc/rc2.d/S90xfs is run.

To manage these links is to manage the boot order and run levels; under many systems, there are tools to help with this task (e.g., 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> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).