boot-scripts - общее описание последовательности загрузки системы
Последовательность загрузки варьируется в отдельных местах на разных системах, но в целом все равно разбивается на несколько основных шагов: (i) включение оборудования, (ii) загрузчик ОС, (iii) запуск ядра, (iv) работа init и inittab, (v) загрузочные скрипты. Теперь опишем каждый из этих шагов более подробнее.
Эта программа обычно осуществляет простейшие тесты системы и реализует доступ к памяти, где хранятся дополнительные настройки компьютера. Этот блок в PC реализован на памяти CMOS с питанием от батареи, и для краткости называется просто CMOS, хотя официальное ее название снаружи мира PC - nvram (non-volatile ram).
Параметры, хранящиеся в nvram, отличаются в разных системах, но как минимум там хранится информация о загрузочном устройстве или о методе поиска загрузочного устройства.
Затем стадия включения определяет загрузочное устройство и подгружает с него загрузчик операционной системы, расположенной на определенном месте устройства, и передает управление дальнейшей загрузкой ему.
В большинстве систем этот начальный загрузчик в силу разных обстоятельств крайне ограничен. Даже на системах не-PC существуют некоторые ограничения на размер и сложность загрузчика, ну а ограничение MBR до 512 байт на PC (включая и таблицу разделов!) делает совершенно невозможным полностью разместить там полноценный загрузчик ОС.
Тем не менее, большинство операционных систем хитрят и указывают в начальном загрузчике вызов вторичного загрузчика ОС, расположенного в особом месте на разделе диска.
В Linux системным загрузчиком ОС обычно является программа lilo(8) или grub(8). Оба они могут устанавливаться как вторичные загрузчики (то есть раздел DOS с установленным MBR указывает на них), либо как загрузчик из двух частей, где первая часть кода в MBR запускает вторую, расподложенную на системном загрузочном разделе.
Основной задачей загрузчика ОС является определение ядра на диске, затем его загрузка в память и запуск. Большинство системных загрузчиков позволяют использование интерактивного режима, тем самым позволяя загружать разные ядра (резервные или наоборот, экспериментальные версии) и передавать ядру дополнительные опции при загрузке.
Некоторые из параметров, передаваемые ядру, уже могут влиять на эти действия (например, вы можете переопределить корневую файловую систему по умолчанию). Для более подробной информации о параметрах ядра Linux читайте bootparam(7).
Только затем ядро создает первый процесс (пользовательский) с номером 1. Этот процесс исполняет программу /sbin/init, передавая ей все оставшиеся параметры загрузки, не обработанные ядром.
Это позволяет системному администратору легко определять и управлять схемой загрузки, так как на каждом уровне запуска определены разные алгоритмы загрузки и разные наборы сервисов (например: 4 это однопользовательский режим, на 2 запускаются почти все сетевые сервисы и т.п.). Администратор может изменить текущий уровень запуска с помощью init(8) и определить текущий уровень запуска, используя runlevel(8).
Однако, было бы неразумно управлять отдельными сервисами в одном файле, поэтому inittab только указывает на наборы скриптов, действительно запускающих/останавливающих отдельные сервисы.
Для каждого управляемого сервиса (mail, nfs server, cron и т.п.) существует отдельный скрипт запуска в особом каталоге (/etc/init.d в большинстве версий Linux). Каждый из этих скриптов воспринимает один аргумент, обычно слово Скрипт может (необязательно) воспринимать и другие параметры (например, 'restart' для остановки и запуска, 'status' для отображения состояния сервиса). Запуск скрипта без параметров обычно покажет все возможные аргументы.
Первичный скрипт (обычно /etc/rc) вызывается из inittab(5) и запускает остальные скрипты сервисов через ссылки в подкаталогах. Все ссылки с именами, начинающимися на 'S' вызываются с аргументом на 'K' запускаются с аргументом 'stop' (тем самым останавливая сервис).
Для придания порядка пуску скриптов в одном уровне запуска имена ссылок содержат порядковые номера. Также для понимания смысла имен они обычно заканчиваются на имя сервиса, который они обслуживают. Например: ссылка /etc/rc2.d/S80sendmail запускает сервис sendmail на уровне запуска 2. Это случится после запуска /etc/rc2.d/S12syslog, но перед запуском /etc/rc2.d/S90xfs.
Для управления порядком загрузки и уровнями запуска нужно просто привести эти файлы в нужный вам вид. Однако, во многих версиях Linux существуют инструменты, помогающие в решении задач по управлению сервисами (например: chkconfig(8)).
В более старых версиях Unices эти файлы содержали именно командные строки для демонов, но всовременных системах Linux (а также в HPUX) эти файлы просто содержат разные опции и переменные оболочки. Загрузочные скрипты в /etc/init.d просматривают сначала эти файлы настроек и лишь потом используют значения переменных.
/etc/init.d/, /etc/rc[S0-6].d/. /etc/sysconfig/
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |