После включения питания компьютера и завершения тестирования аппаратных средств, BIOS определяет загрузочное устройство, и с его нулевого сектора считывает запись MBR (Master Boot Record). Размер этой записи обычно составляет 512 Кб. В этой записи помещаются:
— малая программа-загрузчик (первичный загрузчик);
— таблица разделов диска;
— проверочное число для проверки, действительно ли сектор загрузочный.
Основная задача MBR — найти на диске и считать в память код загрузчика следующего этапа (основного загрузчика) и передать ему управление. В качестве основного загрузчика обычно выступают LILO (LInux LOader) или GRUB (GRand Unified Bootloader).
Загрузчик LILO является стандартным загрузчиком во многих дистрибутивах (например, Alt Linux). Состоит из двух частей: LI (располагается в MBR и служит для вызова основного загрузчика) и LO. LO имеет собственную карту размещения файлов (обычно /boot/map), в которой хранится путь к загружаемому ядру и образу виртуального диска. Виртуальный диск служит для монтирования промежуточной файловой системы, чтобы ядро получило доступ к драйверам и утилитам. Выполняемые LILO операции зависят от настроек конфигурационного файла /etc/lilo.conf.
Загрузчик GRUB является более гибким, чем LILO. Используется по умолчанию в дистритутивах Fedora Core. GRUB поддерживает большинство файловых систем, понимает форматы большинства исполняемых файлов, использует графический интерфейс. Обычно конфигурационный файл находится в /boor/grub/grub.conf.
Основной загрузчик загружает ядро системы в оперативную память. Ядро монтирует корневую файловую систему и запускает процесс init. Это единственный процесс, запускаемый непосредственно ядром, его PID равен 1. Он является предком практически всех процессов в системе.
Процесс init отвечает за продолжение процедуры загрузки и перевод системы в стандартный режим работы, выполняя различные операции. Их состав зависит от т.н. уровня выполнения (run level), определяющего операции, конфигурацию запущенных процессов и состояние системы после загрузки. Существуют 8 основных уровней выполнения:
— 0 — действия по выключению (останову) системы;
— 1 — однопользовательский режим; предназначен для администрирования системы; система полностью сконфигурирована, но не запущен ни один сервис, из пользователей может работать только root;
— 2 — во многих дистрибутивах не используется; в некоторых системах сконфигурирован аналогично 3-му уровню выполнения;
— 3 — многопользовательский режим, стандартный режим для сервера;
— 4 — в ряде дистрибутивов не сконфигурирован, в ряде используется для графического входа в систему;
— 5 — аналогично 4 в зависимости от дистрибутива;
— 6 — действия по перезагрузке системы;
— S (или s) — в основном, аналогичен 1, но иногда указывается в сценариях как отдельный уровень.
Кроме указанных основных уровней иногда используют т.н. «уровни по требованию» (odnemand level), обозначаемые A, B, C… Эти уровни являются фиктивными, при переходе на них запускаются приписанные к ним процессы, но текущий уровень выполнения не меняется.
Конкретные операции каждом уровне определены в конфигурационном файле /etc/inittab.
В процессе развития Unix-подобных систем выделились две основные системы инициализации (наборы сценариев загрузки):
1. BSD (Berkeley Software Distribution). Вместо уровней выполнения используется понятие режима — группа процессов, объединенная общей функциональностью. Каждый режим запускается своим сценарием. Сценарии находятся в каталоге /etc и называются rc.n, где n — номер или буква уровня выполнения.
2. System V. Каждому уровню выполнения соответствует свой каталог с именами rc0.d, rc1.d,… Эти каталоги находятся в каталоге /etc. Сценарии в этих каталогах представляют собой символические ссылки на настоящие сценарии в каталоге /etc/init.d. Имена сценариев начинаются либо с S (запускают процесс, start), либо с K (останавливают процесс, kill). Переключением уровней занимается центральный сценарий /etc/rc.