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

madman

Резидент
225
266
2 Июл 2016
В операционной системе Linux и других системах семейства Unix после завершения загрузки ядра начинается инициализация linux системы, сервисов и других компонентов. За это отвечает процесс инициализации, он запускается ядром сразу после завершения загрузки, имеет PID 1 и будет выполняться пока будет работать система.

Процесс инициализации запускает все другие процессы, которые должны быть запущены, это родительский процесс для всего, что выполняется в системе. Другие процессы могут тоже создавать дочерние процессы, но если родительский процесс завершается, для его дочерних процессов родительским становится процесс инициализации.

За время развития операционных систем были созданы различные системы инициализации linux. В разных дистрибутивах использовались разные системы. В этой статье мы рассмотрим лучше системы инициализации, которые вы можете сейчас использовать. Мы начнем с более старых систем с меньшим функционалом, чтобы понять с чего все начиналось, затем подойдем к более новым, созданным в последнее время.

1. System V Init
System V или SysV - это довольно старая, но до сих пор еще популярная система инициализации Linux и Unix подобных операционных систем. Она была основой для создания многих других систем инициализации, а также первой коммерческой системой инициализации для разработанной для Unix в AT&T. Она была разработана еще в 1983 году.

Почти все дистрибутивы Linux изначально использовали SysV. Исключением была только Gentoo, в которой использовалась собственная система инициализации и Slackware, с инициализацией в стиле BSD.

Основные возможности SysV:
● Написание файлов запуска служб на bash;
● Последовательный запуск служб;
● Сортировка порядка запуска с помощью номеров в именах файлов;
● Команды для запуска, остановки и проверки состояния служб.
● Никакой параллельной загрузки, системы зависимостей, запуска по требованию и автоматического запуска здесь не было и в помине.

С момента ее разработки прошло много лет и из-за некоторых недостатков были разработаны другие системы для ее замены, они хоть и имели новые функции и были более эффективны, но они были по-прежнему совместимы с SysV.

2. OpenRC
OpenRC - это система инициализации Linux и Unix подобных операционных систем совместимая с Sys V Init и поддерживающая систему зависимостей во время запуска. Она приносит некоторые улучшения в Sys V и как и другие системы инициализации linux, совместима с ней, но вы должны иметь в виду, что OpenRC не заменяет полностью файл /sbin/init. Эта система инициализации используется в Gentoo и дистрибутивах BSD.

Кроме стандартных возможностей Sys V, здесь поддерживается также:
● Поддержка зависимостей служб;
● Поддержка параллельного запуска служб;
● Поддерживает настройку в одном отдельном файле;
● Работает как демон;
По сравнению с Sys V тут появилось много новых возможностей, но все еще не все те, что нужны для оптимальной работы системы.

3. Systemd
Systemd - это новая система инициализации linux. Она была введена по умолчанию в Fedora 15, а сейчас используется почти во всех популярных Linux дистрибутивах. Это не только инициализирующий процесс, поддерживающий огромное количество возможностей, а и набор инструментов для управления службами и этими возможностями из системы. Основная цель - иметь полный контроль над всеми процессами во время их запуска и на протяжении всего выполнения.

Systemd очень сильно отличается от всех существующих систем инициализации тем как она работает с сервисами, и даже конфигурационными файлами сервисов. Совместимости со скриптами SysV нет, их нужно преобразовать в linux systemd unit файлы.

Вот ее основные особенности:
● Понятный, простой и эффективный дизайн;
● Параллельная загрузка служб на основе зависимостей;
● Лучший APIv;
● Поддерживается завершение дополнительных процессов;
● Поддерживается собственный журнал с помощью journald;
● Поддерживается планирование заданий с помощью таймеров Systemd;
● Хранение журналов в бинарных файлах;
● Сохранение состояния сервисов linux systemd для возможного восстановления;
● Улучшенная интеграция с Gnome;
● Запуск сервисов по требованию;

4. Upstart
Upstart - это система инициализации на основе событий, разработанная в Canonical и призванная заменять SysV. Она может запускать системные службы, выполнять над ними различные задачи, инспектировать их во время выполнения, а также выполнять нужные действия в ответ на события в системе.

Это гибридная система инициализации, она использует как Sys V скрипты запуска, так и файлы служб systemd. Вот ее самые заметные особенности:
● Изначально разработанная для Ubuntu, но может использоваться и в других дистрибутивах;
● Запуск и остановка служб на основе событий;
● Генерация событий во время запуска и остановки служб;
● События могут быть отправлены обычными процессами;
● Связь с процессом инициализации через DBus;
● Пользователи могут запускать и останавливать свои процессы;
● Перезапуск служб, которые неожиданно завершились;
● Параллельная загрузка сервисов;
● Автоматический перезапуск служб;
Большинство ее возможностей работают благодаря интеграции с системой инициализации systemd.

5. Runinit
Runinit - это кроссплатформенная система инициализации, которая может работать в GNU Linux, Solaris, BSD и MacOS. Это отличная альтернатива для Sys V с поддержкой мониторинга состояния служб.

Здесь есть некоторые интересные особенности, которых нет в других системах инициализации:
● Полный контроль сервисов, каждый сервис привязывается к своему каталогу;
● Надежное средство журналирования и ротации логов;
● Быстрая система загрузки и выключения;
● Портативность;
● Легкое создание файлов конфигурации служб;
● Небольшое количество кода системы инициализации.​

Выводы:

Как я уже говорил,система инициализации запускает и управляет всеми другими процессами в системе Linux. SysV до недавнего времени была основной системой инициализации в большинстве дистрибутивов Linux, но из-за некоторых своих недостатков для нее было разработано несколько замен, в том числе systemd.

Какие системы инициализации linux используются в вашем дистрибутиве? В списке обозначены не все существующие системы, какую из них нужно добавить в список? Напишите в комментариях!
 

Похожие темы