@ Карта сайта News Автора!

Bog BOS: Загрузка Linux

Последние изменения:
2017.10.24: hard: Таблицы разделов MBR и GPT

Последнее изменение файла: 2017.12.07
Скопировано с www.bog.pp.ru: 2017.12.12

Bog BOS: Загрузка Linux

В статье описывается процесс загрузки Linux (x86, GRUB, SysV init): последовательность выполнения, настройка загрузчиков и /etc/inittab.

Последовательность загрузки (x86 и x86_64) в режиме BIOS (полный PnP)

  1. инициализация контроллера RAM
  2. декомпрессия BIOS из флеш в RAM
  3. защита от записи захваченного куска и передача туда управления
  4. POST (Power On Self Test) - процедура идентификации, тестирования и конфигурации оборудования
  5. процедура IPL - Initial Program Load (по мотивам BBS, PnP BIOS, PCI Local Bus)
  6. первоначальный загрузчик находит и загружает программу загрузки 2 этапа (stage 2) и передаёт ей управление (GRUB, LILO, SYSLINUX); используется BIOS API; обычное место загрузчика 2 этапа - /boot/
  7. загрузчик 2 этапа выбирает, находит и загружает ядро и RAM диск (initrd) в память; GRUB читает конфигурацию из /boot/grub/grub.conf; конфигурация для LILO хранится в MBR; GRUB и LILO позволяют вывести список возможных загружаемых систем на экран и выбрать нужную с помощью клавиатуры; GRUB позволяет изменить параметры загрузки (корневая файловая система, ядро, RAM диск, параметры ядра) с помощью текстового редактора; используется BIOS API; RAM диск содержит образ файловой системы с модулями (драйверами) устройств, необходимыми для монтирования корневой файловой системы; в случае со встроенным Linux RAM диск содержит всю систему
  8. ядро повторно обходит и инициализирует периферийные устройства, для которых есть встроенные драйвера
  9. ядро монтирует RAM диск (предварительно разжав) и загружает с него необходимые модули, инициализирует соответствующие устройства
  10. если необходимо, то ядро инициализирует LVM и программный RAID
  11. ядро размонтирует RAM диск и освобождает занимаемую им память
  12. ядро монтирует корневую файловую систему в режиме "только чтение"; в процессе дальнейшей работы ядро загружает дополнительные модули с корневой файловой системы
  13. запускается процесс /sbin/init (далее описывается загрузка в стиле System V)
  14. init разбирает конфигурационный файл /etc/inittab для определения дальнейших действий; если при загрузке указан уровень s (или S), то inittab не читается, а система переходит в однопользовательский режим (shell на /dev/console с правами root); строка с действием initdefault определяет "уровень выполнения" (run level) по умолчанию, т.е. режим работы системы (однопользовательская, многопользовательская, с доступом в сеть, с графическим окружением и т.д.); строка с действием sysinit (/etc/rc.d/rc.sysinit) определяет скрипт инициализации;
  15. init выполняет скрипт /etc/rc.d/rc.sysinit (проверка и монтирование остальных файловых систем, swap и т.д.)
  16. в "нормальном" /etc/inittab при переходе на любой уровень запускается скрипт /etc/rc.d/rc с указанием уровня в качестве параметра; данный скрипт запускает скрипты /etc/rcуровень.d/K* (в алфавитном порядке) с параметром stop и скрипты /etc/rcуровень.d/S* с параметром start; в конце запускается /etc/rc.d/rc.local; по традиции скрипты являются символьными ссылками на скрипты в директории /etc/init.d/; вместо /etc/init.d/ может использоваться /etc/rc.d/init.d/; вместо /etc/rcуровень.d/ может использоваться /etc/rc.d/rcуровень.d; реальность несколько сложнее

Последовательность загрузки (x86 и x86_64) в режиме UEFI и systemd

  1. инициализация платформы UEFI
  2. менеджер загрузки UEFI выбирает драйверы и приложения из списка
  3. загрузка ядра и RAM диска; RAM диск содержит образ файловой системы с модулями (драйверами) устройств, необходимыми для монтирования корневой файловой системы; в случае со встроенным Linux RAM диск содержит всю систему
  4. ядро повторно обходит и инициализирует периферийные устройства, для которых есть встроенные драйвера
  5. ядро монтирует RAM диск (предварительно разжав) и загружает с него необходимые модули, инициализирует соответствующие устройства - dracut
  6. ядро размонтирует RAM диск и освобождает занимаемую им память
  7. ядро монтирует корневую файловую систему в режиме "только чтение"; в процессе дальнейшей работы ядро загружает дополнительные модули с корневой файловой системы
  8. запускается процесс /usr/lib/systemd/systemd
  9. тут будет длинный рассказ после того как systemd устоится

Загрузчики

В различных дистрибутивах и различных ситуациях могут использоваться следующие загрузчики:

LILO и GRUB работают через BIOS, а большинство BIOS позволяют доступ только к первым двум IDE-дискам (считая ATAPI CD-ROM) в пределах первых 1023 цилиндров. Так что каталог (или раздел) /boot, в котором хранятся как файлы самого загрузчика, так и загружаемые файлы (ядро, initrd) должен удовлетворять данным ограничениям.

Уровни выполнения и /etc/inittab

Формат файла /etc/inittab (комментарии начинаются с символа '#'):

идентификатор:перечень-уровней-выполнения:действие:процесс

где

При запуске процесса устанавливаются переменные окружения: PATH, INIT_VERSION, RUNLEVEL, PREVLEVEL, CONSOLE.

Уровни выполнения для Red Hat Linux:

Переход на другой уровень можно сделать с помощью программы telinit или прямо через /dev/initctl. telinit с указанием уровня q (Q) заставляет init перечитать /etc/inittab. Использование SIGPWR и /etc/powerstatus признано устаревшим.

Загрузчик может передать процессу init параметры

Ссылки

@ Карта сайта News Автора!

Bog BOS: Загрузка Linux

Последние изменения:
2017.10.24: hard: Таблицы разделов MBR и GPT

TopList
. Плитка Vendome La Faenza - коллекция для тех, кто предпочитает благородную классику.
Copyright © 1996-2017 Sergey E. Bogomolov; www.bog.pp.ru (КГБ знает все, даже то что у Вас на диске ;)