Systemd — новая система инициализации от разработчиков Red Hat и Novell
30 апреля 2010 года
Леннарт Поттеринг (Lennart Poettering), создатель звукового сервера PulseAudio, работающий в компании Red Hat, при участии разработчиков из компаний Novell, IBM, Intel и Nokia, подготовил прототип принципиальной новой системы инициализации для Linux - systemd (Архивная копия от 6 мая 2010 на Wayback Machine), нацеленной на более интенсивную параллелизацию выполнения сервисов на этапе загрузки.
На первом этапе выполнения инициализации в systemd осуществляется анализ конфигурации и построение плана выполнения инициализации, в котором учитываются не только вызываемые из скриптов программы, но и открываемые файлы, создаваемые сетевые сокеты и обращения к устройствам. Иными словами, если системы инициализации подобные Upstart как правило оперируют зависимостью между сервисами (события вида запустить B, после выполнения A), то systemd отталкивается от готовности ресурсов, учитывается такие дополнительные сущности, как сокеты и готовность устройств. Например, если один сервис требует создания канала связи вторым сервисом, вместо последовательного запуска сервисов, вначале может быть организован канал (шина) для обмена данными между сервисами, а потом одновременно запущены оба сервиса.
После построения плана выбирается наиболее оптимальный вариант параллельного запуска сервисов и сокращается повторный вызов программ (например, awk в процессе инициализации запускается около 92 раза, grep - 77 раз) и повторное обращения к типовым ресурсам (например, чтение значения таймера или получение параметров сетевого интерфейса). Процессы вызываются только при необходимости, т.е. например, CUPS не будет запущен до того, как локально или удаленно не будет обращения к сервису печати. Кроме обслуживания процесса загрузки, systemd выполняет также такие функции как управление процессами в системе и обеспечение корректной работы системы с новым динамически подключаемыми устройствами.
Базовым элементом systemd являются "юниты", которые связаны между собой и имеют определенный тип. Каждый юнит может требовать для своей работы другие юниты, конфликтовать с юнитами, определять возможность запуска только после или до определенного юнита (директивы конфигурации Requires, Conflicts, Before, After, Wants). Например, устройство может зависеть от сервиса, который должен быть запущен сразу после доступности устройства. Из типов юнитов определены:
- Сервисы: стандартные демоны, которые могут быть запущены и остановлены. В роли сервисов также могут выступать классические SysV-скрипты инициализации.
- Сокеты: точки привязки к сетевым или файловым сокетам, позволяющие построить ассоциацию с определенным сервисом. Например, в через сокет-юнит может быть задан сетевой порт, при обращении к которому автоматически должен быть вызвать определенный сервис (аналог inetd).
- Устройства: элементы дерева устройств, которые могут обрабатываться с помощью udev.
- Точки монтирования: задают используемые файловые системы, которые встречаются в /etc/fstab;
- Точки автоматического монтирования (automount): определяет какую ФС смонтировать при обращении к заданной директории.
- Цели: логические юниты для логической группировки юнитов. Например, multi-user.target идентичен run-level 5, bluetooth.target приводит к инициализации подсистемы bluetooth.
- Снапшоты: логические юниты для запоминания и восстановления определенного состояния системы.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.