SysVinit
SysVinit — это одна из первых систем инициализации (init) для операционных систем семейства Unix, включая Linux, которая управляет запуском и остановкой системных служб и процессов во время загрузки и выключения компьютера. Разработанная в рамках проекта System V (AT&T Unix System V), SysVinit стала стандартом де-факто для многих дистрибутивов Linux в 1990-х — начале 2000-х годов, прежде чем была в значительной степени вытеснена более современными системами, такими как systemd и Upstart.
История
Происхождение
SysVinit берёт своё начало в коммерческой версии Unix — System V, выпущенной компанией AT&T в 1983 году. В этой операционной системе был реализован механизм инициализации, основанный на последовательном выполнении скриптов, организованных по уровням выполнения (runlevels). Эта модель была перенесена в Linux в начале 1990-х годов, когда разработчики дистрибутивов, такие как Патрик Фолькердинг (Slackware) и Ян Мёрдок (Debian), адаптировали её для свободной операционной системы.
Распространение и стандартизация
В течение 1990-х и начала 2000-х годов SysVinit стал основным способом управления загрузкой в большинстве дистрибутивов Linux, включая Red Hat, Debian, SUSE, Mandriva и Gentoo. Его популярность объяснялась простотой, предсказуемостью и совместимостью с традиционными Unix-системами. Однако с ростом сложности современных компьютеров (многоядерные процессоры, динамическое подключение оборудования, зависимость служб друг от друга) SysVinit начал проявлять недостатки.
Упадок и замена
К середине 2000-х годов сообщество Linux-разработчиков начало искать альтернативы. В 2006 году компания Ubuntu представила Upstart, а в 2010 году Леннарт Пёттеринг и Кей Сиверс начали разработку systemd. К 2015 году большинство крупных дистрибутивов (Fedora, Debian, Ubuntu, openSUSE, Arch Linux) перешли на systemd, оставив SysVinit в основном в нишевых или минималистичных системах, таких как Devuan (форк Debian без systemd) и некоторые встраиваемые системы.
Архитектура и принцип работы
Уровни выполнения (Runlevels)
Основой SysVinit является концепция уровней выполнения — числовых или символьных состояний системы, каждое из которых определяет, какие службы должны быть запущены. В стандартной реализации Linux используется 7 уровней (0–6):
- 0 — остановка системы (halt).
- 1 — однопользовательский режим (single-user mode, часто используется для восстановления).
- 2 — многопользовательский режим без сетевой поддержки (в некоторых дистрибутивах, например Debian, это стандартный режим).
- 3 — многопользовательский режим с сетью (текстовый режим, без графического интерфейса).
- 4 — не используется (зарезервирован для пользовательских целей).
- 5 — многопользовательский режим с графическим интерфейсом (X11).
- 6 — перезагрузка (reboot).
Переход между уровнями инициируется командой init или telinit, после чего SysVinit запускает или останавливает соответствующие скрипты.
Скрипты инициализации
В SysVinit каждая служба представлена скриптом, расположенным в каталоге /etc/init.d/. Эти скрипты обычно являются оболочками (shell-скриптами), которые принимают аргументы start, stop, restart, status и т.д. Для управления порядком запуска используются символические ссылки в каталогах /etc/rc?.d/ (где ? — номер уровня выполнения). Например, для уровня 3 ссылки находятся в /etc/rc3.d/.
Ссылки имеют формат S<число><имя_службы> (для запуска) или K<число><имя_службы> (для остановки). Число определяет порядок выполнения: чем меньше число, тем раньше запускается служба. Например, S01syslog запускает системный логгер первым, а S99apache2 — веб-сервер Apache последним.
Последовательный запуск
SysVinit выполняет скрипты последовательно, один за другим, в порядке возрастания чисел. Это означает, что каждая служба ждёт завершения предыдущей, что делает процесс загрузки предсказуемым, но медленным, особенно на современном оборудовании с большим количеством служб.
Классификация и варианты
Стандартный SysVinit
Оригинальная реализация, используемая в большинстве дистрибутивов до перехода на systemd. Включает в себя:
/sbin/init— основной процесс (PID 1)./etc/inittab— конфигурационный файл, определяющий уровни выполнения и действия при загрузке.- Утилиты
init,telinit,runlevel,shutdown,reboot,halt.
OpenRC
OpenRC — это альтернативная система инициализации, разработанная для Gentoo Linux, но также используемая в Alpine Linux, Devuan и других дистрибутивах. Она совместима со скриптами SysVinit, но добавляет параллельный запуск служб, управление зависимостями и более гибкую конфигурацию. OpenRC не является прямой заменой SysVinit, а скорее надстройкой над ним.
SysVinit в современных системах
Некоторые дистрибутивы, такие как Devuan и AntiX, продолжают использовать SysVinit как основную систему инициализации. В Arch Linux и Gentoo SysVinit доступен как опциональная альтернатива systemd. В таких системах часто используется патч версии SysVinit, поддерживаемый сообществом.
Применение
Преимущества
- Простота и прозрачность: Скрипты легко читать и редактировать, нет сложных конфигурационных файлов.
- Совместимость: Работает на любом оборудовании, включая очень старое или минималистичное.
- Предсказуемость: Последовательный запуск гарантирует, что службы стартуют в строго определённом порядке.
- Минимализм: Не требует больших ресурсов (память, процессор), что важно для встраиваемых систем.
Недостатки
- Медленная загрузка: Последовательный запуск не использует преимущества многоядерных процессоров.
- Отсутствие управления зависимостями: Администратор должен вручную задавать порядок ссылками, что может приводить к ошибкам.
- Сложность при динамическом оборудовании: Не умеет автоматически обрабатывать горячее подключение устройств (USB, сетевые карты).
- Ограниченные возможности: Нет мониторинга служб, автоматического перезапуска при сбоях, параллельной активации сокетов.
Интересные факты
- В некоторых дистрибутивах (например, Slackware) используется собственная реализация SysVinit, которая отличается от стандартной BSD-стилем инициализации.
- Команда
init(PID 1) является единственным процессом, который не может быть завершён сигналом SIGKILL; это сделано для предотвращения аварийного завершения системы. - В 2014 году в сообществе Debian произошла раскол из-за перехода на systemd, что привело к созданию форка Devuan, использующего SysVinit или OpenRC.
- В некоторых встраиваемых системах на базе BusyBox SysVinit используется в упрощённом виде, без поддержки уровней выполнения.
Критика
SysVinit подвергался критике за устаревшую архитектуру, не соответствующую требованиям современных операционных систем. Основные претензии:
- Неэффективность: Последовательный запуск увеличивает время загрузки на многоядерных системах.
- Отсутствие параллелизма: Невозможность запускать независимые службы одновременно.
- Ручное управление зависимостями: Администратор должен вручную задавать порядок, что приводит к ошибкам при обновлении или добавлении новых служб.
- Сложность отладки: При сбое загрузки трудно определить, какая служба вызвала проблему, так как нет детального логирования.
Эти недостатки стали основными причинами перехода на systemd, который предлагает параллельный запуск, автоматическое управление зависимостями, мониторинг служб и интеграцию с другими компонентами Linux.
Источники
- Немет, Э., Снайдер, Г., Хейн, Т. (2017). Unix и Linux: руководство системного администратора. 5-е издание. — Вильямс.
- Love, R. (2013). Linux System Programming. 2nd Edition. — O'Reilly Media.
- Документация проекта SysVinit (http://savannah.nongnu.org/projects/sysvinit).
- Архив дистрибутива Devuan (https://devuan.org).
- Статья «Init» в Arch Wiki (https://wiki.archlinux.org/title/Init).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →