Открыть сервис

System V Init

System V Init — это одна из стандартных систем инициализации (init) в Unix-подобных операционных системах, отвечающая за запуск и остановку системных служб, управление уровнями выполнения (runlevels) и последовательный запуск процессов при загрузке операционной системы. Разработана в рамках операционной системы UNIX System V, выпущенной компанией AT&T в 1983 году. System V Init является классической системой инициализации, которая долгое время использовалась в большинстве дистрибутивов Linux, а также в других Unix-системах, таких как Solaris, HP-UX и AIX. В настоящее время в Linux она постепенно вытесняется более современными системами, такими как systemd и Upstart, однако её концепции и архитектура сохраняют историческое и практическое значение.

История

Происхождение

Система инициализации System V Init была впервые представлена в 1983 году в операционной системе UNIX System V Release 3 (SVR3). Она пришла на смену более ранним системам инициализации, использовавшимся в более старых версиях UNIX, включая Version 7 UNIX. Основной целью разработки было создание унифицированного и гибкого механизма управления процессами, который бы позволял администраторам легко настраивать поведение системы при загрузке, выключении и переходе между различными режимами работы.

Развитие в Linux

В ранних дистрибутивах Linux (например, Slackware, Debian, Red Hat) System V Init была принята в качестве стандартной системы инициализации. Она обеспечивала простой и предсказуемый механизм запуска служб через скрипты, расположенные в каталогах /etc/rc.d/ или /etc/init.d/. В 1990-х и начале 2000-х годов System V Init была доминирующей системой инициализации в Linux, несмотря на появление альтернатив, таких как BSD Init.

Упадок и замена

С ростом сложности современных операционных систем и увеличением числа служб, требующих параллельного запуска и динамического управления, ограничения System V Init стали очевидны. Основные недостатки включали последовательный запуск скриптов (что замедляло загрузку), отсутствие зависимостей между службами, а также сложность обработки событий, таких как подключение нового оборудования. В середине 2000-х годов появились более современные системы инициализации: Upstart (разработанный компанией Ubuntu) и systemd (разработанный компанией Red Hat). К началу 2010-х годов systemd стал стандартом де-факто в большинстве дистрибутивов Linux, включая Fedora, Debian, Ubuntu и Arch Linux. Тем не менее, System V Init продолжает использоваться в некоторых дистрибутивах, таких как Devuan (форк Debian без systemd) и Slackware, а также в устаревших системах.

Архитектура и принципы работы

Процесс init

Первым процессом, запускаемым ядром операционной системы после загрузки, является процесс init (PID 1). В System V Init этот процесс выполняет следующие задачи:

  • Читает конфигурационный файл /etc/inittab, который определяет уровни выполнения (runlevels) и действия, которые должны быть выполнены при переходе между ними.
  • Запускает скрипты инициализации, необходимые для настройки системы (например, монтирование файловых систем, настройка сетевых интерфейсов).
  • Управляет запуском и остановкой служб в зависимости от текущего уровня выполнения.

Уровни выполнения (Runlevels)

Уровни выполнения — это предопределённые состояния системы, каждое из которых соответствует определённому набору запущенных служб. В System V Init обычно используется 7 уровней (от 0 до 6), хотя их количество может варьироваться в зависимости от реализации:

УровеньОписание
0Остановка системы (halt)
1Однопользовательский режим (single-user mode) — минимальная конфигурация для обслуживания
2Многопользовательский режим без сетевых служб (в некоторых дистрибутивах)
3Полный многопользовательский режим с сетевыми службами (текстовый режим)
4Обычно не используется (может быть настроен пользователем)
5Полный многопользовательский режим с графическим интерфейсом (X Window System)
6Перезагрузка системы (reboot)

Переход между уровнями выполняется командой telinit или init, которая отправляет сигнал процессу init для изменения текущего runlevel.

Скрипты инициализации

Скрипты инициализации (init scripts) — это исполняемые shell-скрипты, расположенные в каталоге /etc/init.d/ (или /etc/rc.d/init.d/). Каждый скрипт отвечает за запуск, остановку, перезапуск или проверку состояния одной службы. Скрипты принимают аргументы, такие как start, stop, restart, reload и status. Например, для запуска веб-сервера Apache может использоваться команда: `` /etc/init.d/apache2 start ``

Каталоги rc.d

Для каждого уровня выполнения существует отдельный каталог, обычно называемый /etc/rc0.d/, /etc/rc1.d/, ..., /etc/rc6.d/. В этих каталогах находятся символические ссылки на скрипты из /etc/init.d/. Имена ссылок имеют определённый формат:

  • S<число><имя_службы> — ссылка для запуска службы (S от start). Число определяет порядок запуска (например, S01syslog, S20network).
  • K<число><имя_службы> — ссылка для остановки службы (K от kill). Число определяет порядок остановки (например, K90network).

При переходе на новый уровень выполнения init сначала выполняет все скрипты с префиксом K (в порядке возрастания числа), затем все скрипты с префиксом S (также в порядке возрастания числа). Это обеспечивает последовательный запуск и остановку служб.

Преимущества и недостатки

Преимущества

  • Простота: System V Init использует простые shell-скрипты, которые легко читать, писать и отлаживать.
  • Предсказуемость: Последовательный запуск служб упрощает диагностику проблем, так как порядок выполнения строго определён.
  • Совместимость: Многие устаревшие системы и программное обеспечение по-прежнему полагаются на System V Init.
  • Гибкость: Администратор может легко добавлять, удалять или изменять службы, редактируя скрипты и символические ссылки.

Недостатки

  • Последовательный запуск: Все службы запускаются одна за другой, что увеличивает время загрузки системы, особенно на многоядерных процессорах.
  • Отсутствие зависимостей: System V Init не управляет зависимостями между службами автоматически. Администратор должен вручную задавать порядок запуска через числа в именах ссылок.
  • Сложность обработки событий: Система не поддерживает динамическое управление службами в ответ на события, такие как подключение USB-устройств или изменение сетевой конфигурации.
  • Ограниченная параллелизация: В стандартной реализации нет механизма для параллельного запуска независимых служб.

Применение

В Linux

System V Init использовалась в большинстве дистрибутивов Linux до середины 2010-х годов. В настоящее время она сохраняется в следующих случаях:

  • Devuan: Дистрибутив, созданный как форк Debian, в котором systemd заменён на System V Init или OpenRC.
  • Slackware: Один из старейших дистрибутивов Linux, продолжающий использовать System V Init по умолчанию.
  • Встраиваемые системы: На устройствах с ограниченными ресурсами, где простота и минимализм важнее функциональности.
  • Устаревшие системы: Серверы и рабочие станции, работающие на старых версиях дистрибутивов (например, RHEL 5, Debian 6).

В других Unix-системах

System V Init также используется в операционных системах, основанных на UNIX System V, таких как:

  • Solaris (до версии 10, где была заменена на SMF — Service Management Facility).
  • HP-UX.
  • AIX (частично, с использованием собственных механизмов).

Интересные факты

  • Процесс init с PID 1 является «родителем» всех процессов в системе. Если init завершается, ядро вызывает панику (kernel panic).
  • В некоторых реализациях System V Init используется файл /etc/inittab, который может содержать записи для переопределения действий по умолчанию, например, для запуска getty на терминалах.
  • Команда telinit позволяет администратору изменять уровень выполнения без перезагрузки системы. Например, telinit 3 переводит систему в многопользовательский текстовый режим.

Критика

Основная критика System V Init связана с её неспособностью эффективно справляться с современными требованиями к загрузке, такими как параллелизм, управление зависимостями и обработка динамических событий. Разработчики systemd и Upstart указывали на то, что System V Init устарела и не соответствует принципам модульности и производительности. Однако сторонники System V Init подчёркивают её простоту, прозрачность и лёгкость в настройке, что делает её предпочтительной для систем, где важна стабильность и минимализм.

Источники

  • UNIX System V Release 3.2 Programmer’s Guide, AT&T, 1986.
  • «Linux System Administration» by Tom Adelstein and Bill Lubanovic, O'Reilly Media, 2007.
  • Документация дистрибутива Devuan: «Init System Comparison».
  • Статья «Init» в Википедии (английская версия).
  • Руководство по администрированию Red Hat Enterprise Linux 5: «SysV Init».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →