Аппаратный загрузчик запускает дисковый загрузчик GRUB2
Дисковый загрузчик читает конфиг /boot/grub2/grub.cfg
[общается с заказчиком] и загружает ядро linux + INIT-ram-disk
Ядро linux монтирует RAM-disk, подгружает с него дравера
монтирует ROOT, и запускает Процесс Init (или Процесс SystemD)
Процесс Init читает конфиг /etc/inittab
Процесс SystemD читает конфиг /etc/systemd/system/*
и в соответствии с ним запустает все остальное
Boot, bootstrapping - слова, обозначающие сейчас
"Загрузить/пнуть, процесс начальной загрузки", на самом деле
произошли из английской фразы "Pull itself up by its own boot
straps" (Поднять себя за шнурки собственных ботинок)
Начинается все с Boot-prom'a - небольшой программы, которая
хранится в нестираемой памяти компьютера и начинает
выполняться сразу после включения.
Естественно, boot-prom умеет делать многое: форматировать
диски, инсталлировать операционную систему, запускать тесты
hardware. Однако главное его предназначение - найти на диске и
запустить на выполнение файл /unix - ядро операционной системы.
И своего собственного разума на это ему обычно не хватает,
поэтому он в первую очередь загружает с жесткого диска
"загрузчика операционной системы", а уж тот делает все
остальное.
BIOS загружает с загрузочного диска блок начальной загрузки активного
раздела.
Он запускает загрузчик GRUB2. Тот читает свои настроечные файлы в
/boot/grub2, подгружает дополнительные модули и драверы, дает выбрать
пользователю пункт меню загрузки и загружает ядро и init-ramdisk описанные в
/boot/grub2/grub.cfg
Основные настройки заданы в файле /etc/default/grub , после их изменения:
grub2-mkconfig -o /boot/grub2/grub.cfg'
Загрузка в single mode
Boot: ... root=/dev/sda2 ... single
Загрузка в еще более single user:
Boot: linux ... init=/bin/sh
mount -n -o remount /
passwd root
pvconv
insmod de4x5
ifconfig eth0 195.232.171.30
route add -net 195.232.171.0 gw 195.232.171.30
insmod nfs
Ядро инициализирует себя и после этого запускает процесс init.
А init - все остальные процессы, программы, которые необходимы
для нормального функционирования операционной системы.
Все дальнейшие действия в системе определяются этим процессом.
Все, что нужно делать init-у, определяет специальная таблица.
Процесс init всегда находится на каком-либо "УРОВНЕ ВЫПОЛНЕНИЯ".
Уровень выполнения определяет состояние и поведение всей систе-
мы. Уровень обозначается цифрой (или буквой) 0,1,2,3,4,5,6,s,S
0 - prom монитор - Полный останов системы;
1, s, S - single user mode. Однопользовательский режим;
2 - многопользовательский режим без NFS-сервера;
3 - многопользовательский режим с NFS-сервером;
6 - перезагрузка;
* Примерный фрагмент управляющей таблицы /etc/inittab *
bchk::sysinit:/etc/bcheckrc/dev/console 2>&1
brc::sysinit:/etc/brc > /dev/console 2>&1
is:3:initdefault:
rc:12345:wait:/etc/rc > /dev/console 2>&1
r0:0:wait:/etc/rc0 > /dev/console 2>&1
r2:23:wait:/etc/rc2 > /dev/console 2>&1
r3:3:wait:/etc/rc3 > /dev/console 2>&1
pf:12345:powerfail:/etc/powerfail > /dev/console 2>&1
co:12345:respawn:/etc/sysmonitor console console
t1:23:respawn:/etc/sysmonitor tty01 9600
t2:23:off:/etc/sysmonitor tty02 9600
Формат таблицы:
ИМЯ:Уровни_выполнения:вид_действия:запускаемая команда
ИМЯ: - просто имя строчки - они все должны быть разными
вид_действия:
sysinit запустить один раз после начальной загрузки;
на соответствующем уровне выполнения:
wait - запустить один раз и дожидаться, пока не окончится;
respawn - запустить параллельно, а если окончится, перезапус-
кать снова;
off - ничего не делать (просто игнорировать эту строку).
Если посмотреть внимательно на таблицу, то можно разобраться,
что же в действительности происходит при загрузке и откуда бе-
рутся все эти загадочные сообщения.
Сперва init запускает процессы, которые "sysinit"
Отработав все строки "sysinit" уровня, init идет все
дальше по /etc/inittab и обнаруживает строку initdefault 3 -
она заставляет его "перейти" на уровень 3.
* Run Command - стандартные RC-каталоги запуска *
Перейдя на уровень выполнения 3, init и отрабатывает
первую встретившуюся строчку с уровнем "3" - запускается
командный файл /etc/rc2 - загляните в него. Там все просто:
/etc/rc2 берет и выполняет командные файлы /etc/rc2.d/S*,
лежащие в каталоге /etc/rc2.d. Каждый файл выполняется с
параметром "start"
Отработав /etc/rc2, init точно таким же образом запускает
файл /etc/rc3. Вслед за этим он запускает несколько процессов
sysmonitor - по одному на каждый имеющийся терминал. Это те
самые процессы, которые говорят на терминал: "Login: "
Пользователь, войдя на терминал, некоторое время работает, но
как только он "уходит" из системы, на указанном терминале
ничего не остается. init тут же выполняет действие "respawn" -
перезапускает на терминал sysmonitor - и опять жизнерадостное
"Login: " появляется на терминале.
По умолчанию init устанавливает уровень выполнения 5.
При начальной загрузке отрабатывается файл
/etc/rc.d/rc.S
Затем для перехода в многопользовательский режим
/etc/rc.d/rc.M
из которого запускаются файлы
/etc/rc.d/rc.inet1 устанавливающий сетевые интерфейсы
/etc/rc.d/rc.inet2 запускающий сетевые сервисы
/etc/rc.d/rc.local запускающий несколько полезных программ и
демонов - например, поддержка мыши, httpd,
русификация консоля и т.п.
Используется стандартная технология rc-файлов System V
RC-каталоги:
/etc/rc.d/rc[0123456].d/
/etc/rc.d/init.d/
Конфигурационные параметры для RC-команд:
/etc/sysconfig/
Популярность: 22, Last-modified: Fri, 30 Jun 2023 10:26:17 GmT