Глава 7. Запуск и завершение работы Linux
7.1. Введение
Проблема
Существует множество способов запуска и остановки системы Linux. Также не стоит забывать о сценариях инициализации, управляющих запуском различных процессов, и о различных уровнях выполнения системы (runlevels), в каждом из которых может работать свой набор процессов.
Выполните следующую команду:
$ ps axfl
Найдите процесс с номером 1 (вывод сокращён, в вашей системе выходные данные команды будут содержать больше столбцов и строк):
UID PID PPID STAT TTY TIME COMMAND
0 1 0 S ? 0:03 init
Это init, предок всех процессов в системе Linux. Обратите внимание: идентификатор родительского процесса PPID (Parent Process ID) равен 0, потому что init является первым процессом, стартующим после запуска ядра.
Решение
Процесс загрузки Linux проходит примерно так:
- BIOS инициализирует оборудование и читает загрузочный сектор.
- Главная загрузочная запись (MBR, Master Boot Record) запускает загрузчик операционной системы, который передаёт управление ядру.
- Ядро инициализирует периферийные устройства, загружает драйверы, монтирует корневую файловую систему и вызывает /sbin/init.
- Программа /sbin/init запускает все процессы пользовательского уровня. Она читает /etc/inittab и активирует дополнительные сценарии, указанные в /etc/inittab.
- Дальнейшие действия зависят от дистрибутива. В Debian выполняется сценарий /etc/init.d/rcS, который передаёт управление в каталог /etc/rc*.d, указанный в /etc/inittab. Debian работает на уровне 2, поэтому выполняются все сценарии из каталога /etc/rc2.d.
- В Red Hat следующим выполняется сценарий /etc/rc.d/rc.sysinit, а затем сценарии из каталога, соответствующего уровню выполнения (обычно /etc/rc3.d или /etc/rc5.d).
В Slackware процедура запуска ближе к BSD: система использует один каталог /etc/rc.d, где находится сценарий init для каждого уровня выполнения. Впрочем, в ней также присутствуют аспекты SysV.
В Red Hat и Debian каталоги /etc/rc*.d содержат символические ссылки на сценарии в /etc/init.d. Создание ссылок предотвращает излишнее дублирование. Имена ссылок определяют способ запуска служб. Например:
$ ls -go S20cupsys
lrwxrwxrwx 1 16 Sep 9 17:51 S20cupsys -> ../init.d/cupsys
Префикс S20 означает, что служба cupsys должна запускаться с приоритетом 20. Чем ниже значение, тем выше приоритет. Запись K20cupsys указывает, что служба должна быть остановлена.
Комментарий
Уровни выполнения Linux делятся на несколько стандартных категорий. Вот их общепринятая схема:
- 0 — остановка;
- 1 — однопользовательский режим;
- 2-5 — многопользовательский режим;
- 6 — перезагрузка.
В Red Hat уровни выполнения отличаются тем, что 2 и 4 не используются. В Slackware уровень 4 является многопользовательским графическим режимом, а уровни 5 и 2 не используются.
Уровни 7-9 теоретически существуют, но на практике редко применяются. Чтобы узнать, что происходит на каждом уровне, просмотрите содержимое каталогов rc*.d.
См. также
ps(1), init(8), inittab(5), загрузочные сценарии /etc/init.d, каталоги /etc/rc*.d.