В данной статье рассматривается сравнение систем инициализации Linux: SysVinit и systemd. Освещаются основные аспекты и роли этих систем, история появления и функциональность. Приводится анализ различий в модульности, управлении зависимостями и влиянии на современные дистрибутивы Linux.
Ключевые слова : гипервизоры, компьютерная безопасность, система инициализации, linux, systemd, sysvnit, unix.
Система инициализации является критически важным компонентом, который определяет, как операционная система (ОС) запускается и загружается. Эта система служит первым уровнем, который вступает в действие сразу после запуска ядра Linux [1], выполняя роль связующего звена между ядром ОС и высокоуровневыми приложениями.
О системах инициализации
Система инициализации выполняет несколько ключевых задач:
— Запуск процессов: она инициирует и управляет различными процессами, необходимыми для работы системы и пользовательских приложений: управление сетевыми соединениями, системными логами, планировщиком задач и другими критически важными сервисами.
— Управление зависимостями: система инициализации управляет порядком и условиями запуска служб, обеспечивая правильное разрешение всех необходимых зависимостей и запуск сервисов в нужном порядке.
— Контроль за процессами: после начальной загрузки система инициализации продолжает контролировать работающие процессы, перезапуская службы в случае их сбоя или остановки для обеспечения стабильности и надёжности системы.
Система инициализации играет важную роль в процессе выключения и перезагрузки системы, корректно останавливая службы и процессы для безопасного завершения работы системы. Процесс загрузки ОС на базе ядра Linux представлен на рисунке 1.
Рис. 1. Процесс загрузки дистрибутива на базе ядра Linux
В данной статье основное внимание уделяется двум важным и широко используемым системам инициализации в дистрибутивах на базе ядра Linux : SysVinit и Systemd [2–3]. Стоит отметить, что Unix -подобные ОС, использующие рассматриваемые системы инициализации, широко применяются системными администраторами, сетевыми администраторами и специалистами информационной безопасности.
Система инициализации SysVinit
SysVinit — система, лежащая в основе разработки Unix -подобных систем, долгие годы оставалась стандартом для многих дистрибутивов Linux . Её простота и предсказуемость сделали данную систему популярным выбором на протяжении многих лет. Однако, со временем, SysVinit был заменён новой системой инициализации — Systemd . Эта система была разработана Леннартом Поттерингом и Каем Зиверсом, а с середины 2010-х годов проект развивается силами Поттеринга и других сотрудников Red Hat. Systemd предложила расширенные возможности и иное управление системными процессами в Linux .
SysVinit , сокращение от « System V Init» , является традиционной системой инициализации для Unix -подобных ОС. История SysVinit берёт начало в ранних версиях Unix , где она стал стандартом для запуска и остановки системных служб и процессов. SysVinit работает последовательно, выполняя shell -скрипты инициализации, расположенные, как правило, в директории /etc/init.d , в соответствии с порядковыми номерами. Данная модель предлагает простую и понятную структуру, где каждый скрипт отвечает за определённый сервис или задачу.
Основные особенности SysVinit :
последовательное выполнение скриптов, что обеспечивает лёгкость в понимании и отладке;
простота управления сервисами через символические ссылки и скрипты;
минимальные зависимости от стороннего программного обеспечения, что делает её правильным выбором систем с ограниченными ресурсами.
SysVinit долгое время служила надёжным фундаментом для многих дистрибутивов Linux , однако, с развитием технологий и растущими требованиями к эффективности управления системными процессами при использовании SysVinit проявляются некоторые ограничения.
Система инициализации Systemd
Система инициализации Systemd , появившаяся в 2010 году, была разработаны как более современная альтернатива SysVinit . Данная система предлагает загрузку системы за счёт параллельного запуска сервисов и активного управления зависимостями между ними. Systemd содержит ряд компонентов для управления системой и службами ( systemctl , Systemd - analyze ), что делает её более просто системой инициализации.
Специалисты отмечают ряд ключевых особенности Systemd :
параллельный запуск сервисов, значительно ускоряющий процесс загрузки;
сложная система управления зависимостями сервисов (когда исполнение одного сервиса зависит от другого), позволяющая более гибко настраивать службы;
встроенные инструменты для журналирования и управления системными ресурсами.
Systemd быстро стала стандартом для большинства основных дистрибутивов Linux . С 2011 года Fedora стал первым крупным дистрибутивом, использующим systemd по-умолчанию. В том же году дистрибутив OpenSUSE также стал использовать systemd по-умолчанию. А с 2015 года такие дистрибутивы, как Ubuntu и Debian , перешли на данную систему инициализации, как стандартную.
Сравнительный анализ Systemd и SysVinit
При сравнении Systemd и SysVinit обнаруживаются ключевые различия, оказывающие влияние на функциональность, производительность и управление системой. Основные отличия представлены в таблице 1.
Таблица 1
Сравнение систем инициализации
Тип |
SysVinit |
Systemd |
Архитектура и функциональность |
Использует традиционный линейный подход к инициализации системы, что обеспечивает простоту. Может замедлять загрузку в сложных системах, но подходит для систем с меньшим количеством зависимостей сервисов друг от друга |
Использует параллельный запуск сервисов, что ускоряет время загрузки в системах с множеством взаимосвязанных сервисов |
Производительность и управление |
В некоторых случаях может обеспечивать более быструю загрузку (на 29 % быстрее в проведенных измерениях, показанных далее в работе). Требует меньше системных ресурсов из-за своей простоты, что важно для систем с ограниченными ресурсами |
Обычно предполагается, что обеспечивает более быструю загрузку за счёт параллельного запуска сервисов, в некоторых случаях может быть менее эффективным по сравнению с SysVinit. Превосходит SysVinit в управлении службами и ресурсами, предлагая продвинутые инструменты для мониторинга и управления |
В таблице 2 приведены различия в управлении процессами и сервисами.
Таблица 2
Различия управления процессами и сервисами
Тип |
SysVinit |
Systemd |
Инструмент управления |
shell -скрипты инициализации |
unit -файлы |
Управление процессами |
Основано на shell -скриптах, запускаемых вручную |
Используются unit-файлы для управления процессами, поддерживает зависимости между службами (одна служба может зависеть от другой) |
Управление фоновыми процессами |
Управляются shell -скриптами |
Управление происходит с помощью unit -файлов |
Логирование |
Требуется внешняя фоновая служба |
Используется внутренняя фоновая служба journald |
Перезапуск служб |
Нет встроенного механизма для автоматического перезапуска служб |
Поддерживается автоматический перезапуск служб при сбоях |
Сравнение по времени загрузки и потреблении оперативной памяти
Сравнения, демонстрирующие различия систем инициализации во времени загрузки и потреблении оперативной памяти, проводилось между дистрибутивами Debian 12.4 «Bookworm» (с Systemd ) [4] и DevuanDaedalus 5.0 (с SysVinit ) [5]. Данный выбор был сделан потому, что Devuan является ответвлением от Debian , основной особенностью которого является возможность выбора системы инициализации. Сравнение производилось в гипервизоре 2-го типа VMWareWorkstation 17 [6–7]. В качестве настроек были выбраны 4 потока и 4 гигабайта оперативной памяти. Пример работы SysVinit приведен на рисунке 2.
Рис. 2. Пример работы SysVinit
Пример работы Systemd приведен на рисунке 3.
Рис. 3. Пример работы Systemd
В таблице 3 представлены измерения времени загрузки рассматриваемых систем инициализации.
Таблица 3
Время загрузки системы (дистрибутива) с различными системами инициализации
Сист.инициализации \Итерация |
1 |
2 |
3 |
4 |
5 |
6 |
Среднее время, с |
SysVinit |
14.30 |
12.70 |
12.55 |
12.40 |
12.61 |
13.06 |
12.93 |
Systemd |
19.63 |
18.06 |
17.88 |
17.51 |
18.10 |
18.33 |
18.25 |
Информация, представленная в таблице 3, позволяет сделать вывод, что дистрибутив с системой инициализации SysVinit в среднем загружается на 29 % быстрее, чем система с system при указанных настройка.
В таблице 4 представлены измерения количества потребляемой оперативной памяти рассматриваемых систем инициализации.
Таблица 4
Количество потребляемой оперативной памяти
Сист.инициализации \Итерация |
1 |
2 |
3 |
4 |
5 |
6 |
Среднее количество, кБ |
SysVinit |
2000 |
1904 |
1960 |
1944 |
1996 |
1968 |
1962 |
Systemd |
12336 |
12340 |
12152 |
12212 |
12292 |
12156 |
12248 |
Из таблицы можно сделать вывод, что система инициализации SysVinit в среднем потребляет на 84 % меньше оперативной памяти, чем Systemd .
Проблемы Systemd
Система инициализации Systemd , предлагая ряд улучшений в управлении системными процессами, столкнулась с критикой и рядом значимых проблем, включая ошибки и вопросы безопасности [8].
В таблице 5 приведены основные проблемы, связанные с вышеупомянутой системой инициализации.
Таблица 5
Проблемы Systemd
Тип |
Проблема |
Описание |
Сбои в работе |
Отключение Datadog |
Обновление привело к отключению службы Datadog , повлекший убытки на сумму 5 миллионов долларов США [9] |
Сбой в работе Azure |
Выпуск версии Systemd 237–3ubuntu10.54 привел к нарушениям в DNS -запросах и сетевом подключении [10] |
|
Уязвимости |
Уязвимость в system-networkd |
CVE -2018–15688 [11] |
Уязвимость в system- journald |
CVE -2018–16864, CVE -2018–16865, CVE -2018–16866 [12] |
|
Технические недочеты |
Хранение логов в бинарном формате |
Компонент journald хранит логи в бинарном виде |
Зависимость программного обеспечения от Systemd |
Ограничение на изменение системных компонентов |
Некоторые приложения и службы разрабатываются c зависимостью от Systemd , что приводит к невозможности замены отдельных компонентов системы. Например: графическое окружение Gnome зависит от компонента systemd - logind , использующийся для управления сеансами |
Также одним из ключевых моментов дискуссии вокруг Systemd является её соответствие классическим принципам разработки программного обеспечения, присущим Unix [13], которые выделяют важность модульности, простоты и концепцию «одна программа — одна задача». С появлением данной системы инициализации возникли вопросы относительно важности данных принципов. Systemd представляет более комплексное решение, идущее в противоречии с традиционным подходом к разработке. Подобное объединение множества функций в один инструментарий приводит к увеличению сложности программного обеспечения.
Заключение
Проведя исследование, можно сделать вывод, что использование дистрибутивов с SysVinit подойдет для встраиваемых систем, когда важно использовать легковесную систему с компонентами, не потребляющими большого количества ресурсов.
Systemd благодаря утилите управления systemctl , входящей в стандартный пакет установки, подойдет для начинающих специалистов и энтузиастов, который хотят освоить системное администрирование, из-за простого и централизованного управления процессами и службами.
Литература:
- The Linux Kernel Archives. [Электронный ресурс]. — Режим доступа: https://www.kernel.org/ (Дата обращения: 19.01.2024).
- SysVinit Project. [Электронный ресурс]. — Режим доступа: https://savannah.nongnu.org/projects/sysvinit/ (Дата обращения: 19.01.2024).
- System and Service Manager (systemd). [Электронный ресурс]. — Режим доступа: https://systemd.io/ (Дата обращения: 19.01.2024).
- Debian News. [Электронный ресурс]. — Режим доступа: https://www.debian.org/News/2023/20231210 (Дата обращения: 20.01.2024).
- Devuan GNU+Linux. [Электронный ресурс]. — Режим доступа: https://www.devuan.org/os/announce/daedalus-release-announce-2023–08–14 (Дата обращения: 20.01.2024).
- Николаев А. М., Савицкий Д. Д. Анализ и сравнение популярных гипервизоров // Молодой ученый. 2023. № 24 (471). С. 23–26. ISSN: 2072–0297; eISSN: 2077–8295.
- VMWare. Understanding Virtualization. [Электронный ресурс]. — Режим доступа: https://www.vmware.com/topics/glossary/content/virtualization (Дата обращения: 20.01.2024).
- No Systemd. [Электронный ресурс]. — Режим доступа: https://nosystemd.org/ (Дата обращения: 21.01.2024).
- Inside Datadog’s $5M Outage (Real-World Engineering Challenges #9). The Pragmatic Engineer. [Электронный ресурс]. — Режим доступа: https://newsletter.pragmaticengineer.com/p/inside-the-datadog-outage (Дата обращения: 21.01.2024).
- systemd-udevd: Run net_setup_link on 'change' uevents to prevent DNS outages on Azure. Ubuntu. [Электронный ресурс]. — Режим доступа: https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1988119 (Дата обращения: 21.01.2024).
- CVE-2018–15688. [Электронный ресурс]. — Режим доступа: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018–15688 (Дата обращения: 21.01.2024).
- System Down: A systemd-journald exploit. [Электронный ресурс]. — Режим доступа: https://www.openwall.com/lists/oss-security/2019/01/09/3 (Дата обращения: 21.01.2024).
- Керниган Б., Пайк Р. UNIX. Программное окружение: Пер. с англ. — Санкт-Петербург: Символ-Плюс, 2003. — 416 с., ил. ISBN 5–93286–029–4.