NexxDigital - компьютеры и операционные системы

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

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

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

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 и поддерживающая систему зависимостей во время запуска. Она приносит некоторые улучшения в SysV, и как и другие системы инициализации Linux, совместима с ней, но вы должны иметь в виду, что OpenRC не заменяет полностью файл /sbin/init. Эта система инициализации используется в Gentoo и дистрибутивах BSD.

Кроме стандартных возможностей SysV, здесь поддерживается также:

  • Поддержка зависимостей служб;
  • Поддержка параллельного запуска служб;
  • Поддерживает настройку в одном отдельном файле;
  • Работает как демон;

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

3. Systemd

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

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

Вот ее основные особенности:

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

4. Upstart

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

Это гибридная система инициализации, она использует как SysV скрипты запуска, так и файлы служб Systemd. Вот ее самые заметные особенности:

  • Изначально разработанная для Ubuntu, но может использоваться и в других дистрибутивах;
  • Запуск и остановка служб на основе событий;
  • Генерация событий во время запуска и остановки служб;
  • События могут быть отправлены обычными процессами;
  • Связь с процессом инициализации через DBus;
  • Пользователи могут запускать и останавливать свои процессы;
  • Перезапуск служб, которые неожиданно завершились;
  • Автоматический перезапуск служб;

Большинство ее возможностей работают благодаря интеграции с системой инициализации Systemd.

5. Runinit

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

Здесь есть некоторые интересные особенности, которых нет в других системах инициализации:

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

Выводы

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

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

Многие пользователи компьютерной и мобильной техники достаточно часто сталкиваются с термином «инициализация». Что такое инициализация, в основном мало кто себе представляет. Поэтому стоит попытаться восполнить этот пробел в знаниях, приведя конкретные примеры.

Инициализация - что такое в общем понимании

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

Инициализация, как некий процесс определения заданных параметров или их значений, в равной степени может применяться и к программным, и к аппаратным компонентам компьютерной системы.

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

Основные направления инициализации

Среди основных или даже приоритетных направлений, которые подразумеваются инициализацией, в большинстве случаев выделяют следующие:

  • инициализация программ и приложений всех типов;
  • инициализация жестких дисков;
  • инициализация специальной подсистемы печати;
  • инициализация модемов на мобильных устройствах.

Конечно, это только основные типы, ведь, если хорошенько покопаться в дебрях компьютерных процессов, таких направлений можно выделить намного больше. Например, сюда же можно отнести определение начальных характеристик процессоров или оперативной памяти в первичной системе ввода/вывода BIOS, или даже подготовку операционной системы к запуску. Но ввиду сложности технического описания, которое, по большому счету, обычному пользователю не нужно, данный вопрос затрагиваться не будет.

Поэтому, особо не вдаваясь в технические особенности процессов, остановимся на каждом конкретном случае отдельно.

Каким образом происходит инициализация программы

Считается, что в вопросе инициализации приложений приоритетными процессами являются задание корректных начальных переменных или установка их значений равными нулю. Сюда относятся всевозможные переключатели, счетчики, адреса и т. д.

Например, для ассемблерных программ, представленных в большинстве случаев исполняемыми файлами форматов COM и EXE, процесс инициализации состоит из четырех основных этапов:

  • указание на то, какие именно сегментные регистры должны соответствовать определенным сегментам;
  • сохранение адреса регистра DS в стеке при старте исполнения программы;
  • запись в стек нулевого адреса;

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

Вопросы инициализации жестких дисков

С инициализацией винчестеров дело обстоит несколько проще. Некоторые источники утверждают, что суть процесса сводится к форматированию. Это не так.

Инициализация диска на начальной стадии, если использовать средства Windows-систем, производит определение нового раздела путем сопоставления атрибутов загрузочных записей (MBR или GPT).

Далее применяется процесс создания простого тома, указание действительного размера, присвоение литеры (чтобы система «увидела» диск), а только потом начинается форматирование с выбором соответствующей файловой системы (в большинстве случаев NTFS).

На этом этапе и завершается инициализация. Что такое инициализация в данном случае? Это комплекс мер по установке параметров винчестера, а не единичный процесс, как утверждают некоторые.

Подсистема печати

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

Эти параметры и используются для установок подсистемы печати. Таким образом, приведенный в начальное состояние принтер будет работать корректно и без сбоев.

Инициализация на мобильных устройствах

Что касается мобильной техники, здесь зачастую используется так называемая строка инициализации, в которой прописываются значения параметров модемов при настройке подключения к интернету через мобильного оператора.

Как правило, вводимое значение всегда имеет один и тот же вид - AT+CGDCONT=1,"IP","Название оператора или его интернет-ресурс". Но это касается только тех случаев, когда предполагается производить выход в интернет на компьютере через модем подключаемого мобильного устройства.

Ошибки инициализации и методы их устранения

Наконец, стоит отметить, что во всех приведенных примерах может возникнуть ошибка инициализации. Что делать в такой ситуации? В случае с жесткими дисками или устройствами для съемных носителей самым простым выходом станет проверка подключений к материнской плате.

В программах наиболее распространенным является сбой с кодом 0x0175dcbb (как, например, в игре Sims 3). В основном проблема касается конфликтов драйверов устройств, их отсутствия или некорректной установки, неработоспособности планок оперативной памяти и т. д. Иногда проблема может состоять в платформе.NET Framework, для которой нужно установить обновление. Возможно, сбой связан с повреждениями носителя, например, с которого запускается игра. В общем, мало ли что может приключиться. Но решение данной проблемы должно производиться на основе оценки самой ситуации и вызвавших сбой причин.

При создании программных продуктов необходимо уметь чётко и качественно оперировать всей необходимой терминологий. Вот, например, взять такое слово, как инициализация. Это что такое, вы знаете? Сомневаюсь, иначе бы вы не читали эту статью. Поэтому давайте рассмотрим, что подразумевают под этим термином, какие бывают виды, а также разберём несколько проблем, которые могут возникнуть при использовании электроники.

Инициализация - это что такое?

Так называют процессы создания, активации, подготовки к работе и определение необходимых параметров, чтобы приложение могло качественно и без ошибок работать. Это обязательный шаг по приведению любого устройства или программы в состояние, когда оно может использоваться. Само действие инициализации может направляться извне относительно объекта влияния. В большинстве случаев подразумевается исключительно настройка необходимых параметров, а также правил работы, по которым будет функционировать программа.

Примеры

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

  1. Под инициализацией магнитного диска винчестера понимают его форматирование. Также может быть сюда отнесена и запись управляющей информацией (меток томов, описателей дорожек и подобные манипуляции).
  2. Под инициализацией программы понимают задание необходимых переменных или установку в нулевое значение программных переменных (счётчиков, адресов, переключателей, указателей) перед тем, как само приложение будет выполнено. Всё устанавливается согласно тому, что делается для этого типа ПО или содержится в виде указаний в самом файле.
  3. Инициализация для вывода на принтер данных подсистемы печати. Это определение, которое подразумевает следующее: на каком устройстве необходимо перенести данные на бумагу и провести учёт всех необходимостей. Так, следует определить формат печати, расширение, использовать ли цвет (если он есть) и другие параметры. Сначала на устройство подаётся управляющий сигнал и проводится сканирование его возможностей, чтобы произвести первоначальную настройку принтера и предложить пользователю вариант, который может быть осуществлён имеющейся техникой.

А вот теперь давайте рассмотрим случай на практике запуска приложения. Допустим, существует ошибка инициализации при запуске игры. В качестве базы было выбрано Симс 3 - довольно популярное приложение, в котором требуется управлять человеком, создавая ему обеспеченную жизнь.

Из-за чего возникает в Sims-3

Самый распространённый вариант проблемы - это 0×0175dcbb. Этот номер используется для обозначения именно неполадок с инициализацией приложения. Она может возникнуть из-за того, что базовая игра конфликтует с дополнениями, модами и драйверами видеокарты, которые были установлены на компьютере. Причём вы не застрахованы даже при покупке лицензионной игры - если проблема есть, лицензия не приведёт к её автоматическому решению.

Что же делать, если ошибка 0×0175dcbb уже есть?

Итак, ошибка возникла. Сейчас разберёмся, как мы можем её убрать. Хотя рассматривать будем игру, но многие знания, написанные далее, могут пригодиться и при работе с серьёзными приложениями. Помните, что самая старая проблема - это архаические программные компоненты. В первую очередь нас интересуют драйвера видеокарт. Их можно скачать на сайтах производителей, что мы собственно и сделали. Также нелишним будет установить или обновить до последней версии NET Framework - желательно делать это с ресурса разработчика, коим является Microsoft.

А теперь отметим самые популярные причины неполадки: дополнительные моды, которые были написаны сторонними разработчиками. В таких случаях, увы, придётся удалить само расширение. Если есть информация, из-за которой делать это вы не хотите, то можно просто переименовать папку Mods. При появлении ошибки после установки необходимо удалить с помощью деинсталлятора саму программу и переустановить её ещё раз. Если это всё не помогло (а такое бывает часто), то можно сделать заключение, что повреждён диск, где находится сама игра. И единственное благоразумное решение - обменять его (или скачать с торрента пиратскую версию).

Заключение

Что устанавливать на свой компьютер, решать только вам. Но впредь, прежде чем добавлять в стабильно работающий продукт контент, разработанный сторонними людьми, необходимо хорошо подумать и проявить значительную внимательность к качеству скачанных дополнений. Потому что может быть ошибка инициализации обновления, а возможность отката обычно не предусматривается. И тогда придётся удалять всю программу и устанавливать её заново. Если уж решено было так сделать, то необходимо позаботится о сохранности наработанных данных. Их копию нужно разместить где-то в безопасном и укромном месте, например, на рабочем столе или флеш-накопителе. Вот и всё, нами была детально рассмотрена инициализация. Это что такое, вы наверняка поняли. Ведь мы разобрали не только текстовую составляющую, но и рассмотрели несколько конкретных примеров.

По определению «инициализация» - это подготовка программы или аппаратного устройства к работе. Эта подготовка заключается в задании начальных данных параметрам системы. Для программы инициализацией является задание значений переменным программы.

Инициализация массива данных

Инициализация массива имеет ряд подводных камней. Во-первых, в разных программных средах заполнение данных массива начинается либо с нулевого элемента A, либо с первого A, где A - название массива.

Для инициализации массива обычно используется «пошаговый» цикл for (foreach). Заполнение массива происходит постепенно, по одному элементу во время каждого «пробега» цикла. В цикле for создается локальная переменная цикла - для контроля числа проходов.

Начальное значение переменной цикла должно совпадать с первым элементом массива: A или A. Конечное - с числом элементов массива.

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

Ошибки инициализации

При инициализации система получает данные со всех значимых устройств, процессов или операторов. Запуск операционной системы является инициализацией данных, ведь операционная система получает отклик всех частей компьютера, включая оперативную память, жесткий диск и клавиатуру. В случае, если один из важных блоков отсутствует, ОС не сможет пройти инициализацию. Серьезной ошибкой инициализации является и известный «синий экран смерти».

Строка инициализации

Для управления инициализацией новички часто используют простые обращения (например, X = 5) или ручной выбор. Однако регулярную инициализацию нужно и можно автоматизировать.

Предположим, что имеется пользователь компьютера, подключенный к двум интернет-провайдерам. Скорость соединения меняется, поэтому пользователь постоянно переключается вручную. Это неудобно и отнимает много времени. Вместо этого он может задать строку инициализации в командной строке:

AT+CDGCONT = 1, IP, internet.mts.ru + AT+CDGCONT = 2, IP, internet.beeline.ru.

Теперь строка инициализации является для компьютера управляющим процессом. Если интернет МТС становится быстрее, чем «Билайн», то используется соединение МТС - в противном случае МТС меняется на соединение «Билайна».

После завершения загрузки ядра, обеспечением которой мы занимались в прошлом update , наступает время инициализации системы. Она начинается запуском процесса init, что осуществляется исполнением одноименного файла /sbin/init . Рассмотрим его штатные задачи.

Первой из таких задач, как по времени исполнения, так и по значению, является проверка целостности наличных файловых систем. Для начала каждая из них проверяется на наличие бита "чистого размонтирования" (clean byte), который автоматически устанавливается в ходе правильного завершения предыдущего сеанса работы. Если такой бит обнаруживается на каждой файловой системе — все хорошо, дело движется дальше. Если нет — запускается принудительная проверка некорректно размонтированной файловой системы.

Следует отметить, что сам по себе "бит чистого размонтирования" отнюдь не гарантирует сохранности файловой системы и, особенно, ее данных. Он лишь показывает, что файловая система была корректно размонтирована в предыдущем сеансе. В этом случае процесс init делает не лишенное резона допущение, что с метаданными и данными ее все в порядке, и переходит к выполнению следующей задачи. Впрочем, при общепринятом ныне использовании журналируемых файловых систем бит "чистого размонтирования" присутствует всегда.

А следующая задача процесса init — это вызов и отработка сценариев инициализации, или стартовых скриптов, собранных в каталоге /etc и его подкаталогах. Это обычные сценарии оболочки, рассчитанные на исполнение стандартным шеллом (в Linux — /bin/bash). Они включают в себя последовательности команд, призванные монтировать файловые системы, активизировать область своппинга, устанавливать системные часы, запускать те или иные службы и демоны, включая сетевые соединения.

Команды, образующие стартовые сценарии, получают свои опции, их значения и аргументы из специальных файлов конфигурации, также имеющих своим местопребыванием /etc и его подкаталоги. Конфигурационные файлы (или по простому конфиги) представляют собой либо простые базы данных опций и аргументов команд, либо списки имен переменных, (соответствующих опциям команд, используемых в скриптах) с присвоенными им значениями. Конфиги от скриптов легко отличимы при просмотре каталога /etc отсутствием у первых бита исполнения.

Например, обязательная процедура на стадии отработки сценариев инициализации — монтирование (и перемонтирование) необходимых файловых систем в режиме чтения/записи — ведь, как мы помним из предыдущей главы, при загрузке ядра несущая его корневая файловая система монтируется в режиме "только для чтения". Это выполняется прямой директивой

# /sbin/mount -a предписывающей смонтировать все файловые системы, и входящей в состав одного из стартовых сценариев. В какой именно — зависит от системы, и со временем мы разберёмся, где она находится в нашем случае). А вот что понимается под словом "все" (имя опции -a — от all ) — то есть список аргументов (устройств и точек монтирования), а также опций, с которыми должна быть смонтирована та или иная файловая система, — и составляет содержание конфигурационного файла /etc/fstab .

Это — очень простая база данных, каждая запись которой соответствует подлежащей монтированию файловой системе, а поля, разделителем которых являются символы пробела (пробелов) или табуляции, следующие:

  • имя файла устройства, несущего файловую систему;
  • точка монтирования - каталог в файловой иерархии;
  • тип файловой системы;
  • опции монтирования (часто имеет значение default).
Содержимое первых двух полей каждой записи передается команде mount из стартового сценария в качестве первого и второго ее аргументов, остальных двух - как опции, обязательные (тип файловой системы) и необязательные (все прочие).

Последовательное разделение стартовых сценариев и их конфигурационных файлов - один из краеугольных принципов общесистемного конфигурирования. В сущности, пользователю при нормальном ходе настройки практически нет необходимости ни знакомиться с содержимым скриптов (хотя это и не вредно), ни, тем паче, менять в них что-либо (последнее допустимо только в том случае, если этот самый пользователь точно знает, что делает, иначе систему легко довести до неработоспособного состояния). А вот вносить изменения в значения параметров конфигурационных файлов — не только можно, но и нужно, причём, как мы скоро увидим, разными способами. Разумеется, такое разрешение не избавляет пользователя от понимания смысла своих действий.

Наконец, третья непременная задача процесса init — обеспечение регистрации пользователя в системе, каковая также может осуществляться различными способами: в текстовой консоли или через графические менеджеры сеансов.

Описанная последовательность инициализации происходит при бессбойном ее протекании — если ни на одной из стадий не происходит ошибок. Самые серьезные последствия будут иметь ошибки при монтировании файловых систем, обычный источник которых — неправильное описание в файле /etc/fstab (то есть элементарные опечатки) или отсутствие поддержки ядром (или его модулем) типа файловой системы, несущей корень файлового древа. В последнем случае ядро впадет в панику (т.н. Kernel panic) и продолжение загрузки окажется невозможным.

Ошибки при отработке скриптов инициализации обычно приводят к тому, что сервис, при выполнении сценария запуска которого произошёл сбой, просто не будет доступным после загрузки системы.

Наконец, ошибки при подготовке к регистрации пользователя также достаточно неприятны, и, как правило, приводят к невозможности начала нормальной работы.

Впрочем, оснований для паники нет ни в одном из указанных случаев — даже при впадении в панику ядра. Все возможные при инициализации системы ошибки исправимы тем или иным способом. Ибо легкий флирт, в том числе и с операционной системой, подобно насморку, переносится на ногах, и постельный режим необходим лишь в тяжелых случаях. В одних ситуациях достаточно завершить процесс загрузки и чуть изменить настройки, в других - загрузиться в однопользовательском режиме, в третьих придется грузиться с rescue-носителя (например, LiveCD). А вот хирургического вмешательства, сиречь полной переустановки системы, скорее всего, не потребуется никогда.

Оборотная сторона инициализации системы - это ее останов или рестарт, различий между этими процессами практически нет. И отвечает за него команда shutdown , которая может быть дана от лица суперпользователя или члена группы operator . С опцией -h она вызывает останов машины, с опцией -r - ее перезагрузку. И еще команде этой требуется аргумент - время, когда останов или рестарт должны произойти. Впрочем, есть способ и мгновенного останова или рестарта:

# shutdown -h now или # shutdown -r now соответственно. Именно последняя команда отрабатывается при перезагрузке машины с клавиатуры посредством "Салюта из трёх пальцев", по выражению Патрика Фолькердинга.

Кроме того, существуют также команды halt и reboot того же назначения. Однако самостоятельной роли они не играют, просто вызывая команду shutdown с опцией останова и перезагрузки, соответственно.

Останов системы происходит в порядке, обратном ее инициализации. Сначала делается попытка корректного завершения всех запущенных приложений, а при невозможности таковой — их принудительное завершение. Затем стопорятся все стартовые сервисы и демоны. Наконец, содержимое дисковых кэшей записывается на диск, и размонтируются файловые системы. После этого обычно появляется сообщение о возможности безопасного отключения питания машины или оно отключается автоматически. При рестарте все происходит точно также, но после останова системы автоматически начинается перезагрузка машины. Весь процесс останова и (или) рестарта определяется сценариями, подобными сценариям инициализации.

На протяжении многих лет одним из первых правил техники безопасности был запрет останавливать простым отключением питания. И действительно, до недавнего времени это было чревато разными неприятностями.

Однако в современном ядре Linux реализована поддержка управления питанием стандарта ACPI (Advanced Configuration and Power Interface). Она делает допустим останов системы простым отключением питания машины — на нажатие кнопки Power на корпусе компьютера (но ни в коем случае не на переключение тумблера блока питания или выдёргивание силового кабеля) система реагирует точно так же, как и на команду shutdown -h now . В частности, в Zenwalk"е эта процедура выполняется абсолютно безболезненно. Разумеется, на мало-мальски современном "железе".

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

Вызов определённого runlevel , то есть такой взаимосвязанной группы сценариев, осуществляется при инициализации системы программой /sbin/init. А сами эти группы описаны в главном её конфигурационном файле — /etc/inittab , описывающем весь ход процесса init — от проверки файловых систем до подготовки к регистрации.

Теоретически процесс init предусматривает вызов семи runlevels — от нулевого до шестого, хотя, кажется, ни в одном дистрибутиве они не задействуются все. За тремя из них зафиксированы группы сценариев определенного назначения:

  • 0 - halt, то есть останов системы;
  • 1 - single user mode, сиречь однопользовательский режим;
Использование остальных отдано на откуп создателям дистрибутивов. В чём мы сейчас и убедимся на примере нашего героя, дистрибутива Zenwalk. Для чего внимательно рассмотрим устройство его файла /etc/inittab .

В нем после всякого рода копирайтов для начала перечисляются все runlevels и поясняется их значение для дистрибутива Slackware, поскольку в Zenwalk"е, его прямом потомке, они отличаются лишь в деталях. Так что вот на этих деталях мы и заострим внимание:

  • 0 = останов системы;
  • 1 = однопользовательский режим;
  • 2 = не используется, но сконфигурирован аналогично runlevel 3;
  • 3 = многопользовательский текстовый режим;
  • 4 = многопользовательский графический режим с авторизацией через менеджер сессий GDM;
  • 5 = не используется, но сконфигурирован аналогично runlevel 3;
Все эти строки закрыты комментариями, то есть приводятся только для справки. А теперь начинаются строки, собственно и определяющие конфигурацию. Формат любой из строк в /etc/inittab следующий:

идентификатор:runlevel:действие:запускаемый процесс

Не во всех строках значения присвоены каждому полю.

Для начала определяется runlevels по умолчанию. В Zenwalk"е, в отличие от Slackware, "умолчальным" уровнем по умолчанию является 4-й, что описывается такой строкой:

Id:4:initdefault: Если необходимо перейти на загрузку в текстовом режиме (это может случиться при сбоях графической системы), её следует заменить строкой id:3:initdefault: Далее следует серия строк, описывающих, какие сценарии должны запускаться при каждом из задействованных runlevels и некоторых других событиях, как то:

  • старте системы (выполняется в любом случае, независимо от runlevel по умолчанию);
  • загрузке в однопользовательском режиме или переходе в него из любого многопользовательского;
  • загрузке в любом из многопользовательских режимов;
  • "комбинации из трёх пальцев" (Three Finger Salute, по выражению Патрика Фолькрдинга);
  • обычном останове системы;
  • обычной программной перезагрузке;
  • аварийном отключении питания;
  • восстановлении питания после сбоя.
Сами по себе сценарии эти мы рассмотрим в одной из последующих глав, посвящённых собственно настройке системы, тем более, что здесь менять, скорее всего, ничего не придётся.

А пока, слову скажу, что переход с одного runlevels на другой осуществляется командой

# /sbin/init # где # — требуемый runlevel. Например: # /sbin/init 0 вызовет останов системы, аналогично команде # shutdown -h now команда # /sbin/init 6 её перезагрузку, как при команде # shutdown -r now а команда # /sbin/init 1 переход в однопользовательский режим — ситуация, к которой на практике иногда приходится прибегать. Впрочем, это не какая-то особенность Zenwalk"а, а общее свойство всех Linux-систем.

c1:1235:respawn:/sbin/agetty 38400 tty1 linux c2:12345:respawn:/sbin/agetty 38400 tty2 linux c3:12345:respawn:/sbin/agetty 38400 tty3 linux c4:12345:respawn:/sbin/agetty 38400 tty4 linux c5:12345:respawn:/sbin/agetty 38400 tty5 linux c6:12345:respawn:/sbin/agetty 38400 tty6 linux

Таковых по умолчанию как бы шесть. Почему "как бы" — сейчас увидим: в поле runlevels всех строк перечислены все доступные пользователям уровни, и лишь в первой из них пропущен runlevel 4. А ведь именно он является умолчальным в Zenwalk"е. Это вызвано тем, что первый виртуальный терминал зарезервирован для запуска X-сервера и менеджера сессий. Так что в обычной жизни пользователю доступны только 5 виртуальных терминалов.

Впрочем, поскольку Zenwalk ориентирован на работу в графическом режиме, этого вполне достаточно. Более того, число виртуальных терминалов можно и сократить: для этого достаточно закрыть комментариями соответствующие строки.

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

Еще обратим внимание на поле действия: значение respawn, что означает автоматический перезапуск процесса в случае его завершения. То есть: по завершении сеанса пользователя на любой консоли тут же появляется приглашение в авторизации.

Последняя строка определяет сценарий при запуске графического режима:

X1:45:respawn:/etc/rc.d/rc.4 Можно видеть, что он приурочен к уровням 4 и 5, и также влечёт "самовосстановление" по завершении сеанса.

На этом рассмотрение инициализации системы можно считать законченным. Если чего упустил — буду признателен на указание пробелов. Добавлю только, что этот вопрос подробно освещён в статье Владмира Попова Init et cetera или О стилях загрузки Linux . Дата её смущать не должна — ничего принципиально нового в дистрибутивах, не использующих upstart или initng, не изменилось.



Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
NexxDigital - компьютеры и операционные системы