Системы инициализации Linux

Системы инициализации (набор скриптов, которые выполняются при загрузке системы): init, systemd.

Системы инициализации Linux

Системы инициализации Linux: System V, BSD, systemd, Upstart.

Система инициализации Linux — это набор скриптов, выполняющихся при старте системы. Скрипты написаны на языке shell-script классического Boure Shell (Оболочка sh Bourne shell). Исторически сложилось так, что существует две системы инициализации:

  • System V
  • BSD

Они отличаются друг от друга организацией стартовых скриптов: как они называются, в каких директориях располагаются, последовательность вызова и т.д.

Последовательность действий при старте компьютера:

BIOS -> загрузчик -> ядро -> init

При запуске PC совместимого компьютера происходит следующая последовательность действий:

  1. выполняется BIOS компьютера;
  2. запускается загрузчик операционной системы – LILO, Введение Grub2 или любой другой;
  3. загружается ядро Linux.

Ядро стартует и кроме основных действий подключает корневую файловую систему в режиме только для чтения, а так же запускает самую первую программу в системе - init. То есть, в результате мы имеем:

  • подключённую в режиме только для чтения корневую файловую систему;
  • работающую программу init

Дальнейшие действия, которые будут выполняться при старте системы, во многом зависят от конфигурации программы init.

До этого момента ещё не важно какая система инициализации используется. Не зависимо от неё во всех Linux сначала запускается init. А вот какая система инициализации будет использоваться в дальнейшем зависит от того как сконфигурирован init.

init (initialization)

Сценарии инициализации системы "SysV init scripts" (/etc/init.d) отвечает за запуск системы (сервисов) и выключение сервисов и самой ОС. Этот стандарт берет свое начало от операционной системы AT&T UNIX System V, выпущенной в в 1989 г.

init - самая первая запускаемая программа в ОС Linux (PID 1). Файл inittab является конфигурационным файлом программы init.

Ниже, список программ (скриптов), которые предоставляют интерфейс для управления запускаемыми службами.

  • Уровни нинциализации:
    /etc/rc0.d | уровень исполнения 0 | выполняет скрипт при выключении системы
    /etc/rc1.d | уровень исполнения 1 | однопользовательский режим (single user mode) аналогичен Safe Mode в Windows.
    /etc/rc2.d | уровень исполнения 2 | многопользовательский режим (multiuser mode)
    /etc/rc3.d | уровень исполнения 3 | зарезервированно
    /etc/rc4.d | уровень исполнения 4 | зарезервированно
    /etc/rc5.d | уровень исполнения 5 | зарезервированно
    /etc/rc6.d | уровень исполнения 6 | выполнение при при перезагрузке
  • При запуске компьютера независимо от того какой уровень выполнения текущий - запускаются в обязательном порядке все символические ссылки из каталога
    /etc/rcS.d

systemd (system daemon)

Systemd (system daemon) — система инициализации, пришедшая на смену init (initialization). Система инициализации — набор скриптов, которые выполняются при загрузке системы.

В systemd есть понятие units (единицы), каждый units может взаимодействовать друг с другом.

Виды units:

  • service — запускает, останавливает или перезагружает демоны, также можно запускать SysV-сценарии.
  • socket — конфигурационный файл сокета, который связанный с определенным сервисом (service)
  • device — конфигурационный файл содержащий правило udev для обработки дерева устройств.
  • mount — монтирования файловой системы. Также можно получить информацию о файловой системы из файла /etc/fstab.
  • automount — автоматическое монтирование файловой системы.
  • target — логическая группировка единиц, ссылается на другие единицы. Например, bluetooth.target — запускает службы, при активации Bluetooth-устройства.
  • snapshot — создание ссылок на другие единицы, восстанавливает список ранее запущенных служб.
  • timer — подобие сron, активация единиц по таймеру.
  • swap — управление файлами подкачки.
  • path — активация других служб на основе inotify

Основные команды systemd

  • Список запущенны юнитов
    systemctl
    systemctl -t service -a
  • Просмотреть состояние программы
    systemctl status openvpn
  • Убрать сервис из автозагрузки в Ubuntu-16.04:
    $ sudo systemctl disable SERVICE
  • Добавить сервис в автозагрузку в Ubuntu-16.04:
    $ sudo systemctl enable SERVICE