ИМЯ 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 называется «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.
Первичный сценарий (обычно /etc/rc) вызывается из inittab(5); он запускает остальные сценарии служб через ссылки в соответствующих подкаталогах. Все ссылки с
Через управление этими ссылками осуществляется управление порядком загрузки и уровнями выполнения; во многих системах существуют инструменты, помогающие в решении этой задачи (например, 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)
|