Поиск по сайту:

LFCS: Управление процессом запуска системы и службами (SysVinit, Systemd и Upstart). Часть 7.


Пару месяцев назад Linux Foundation объявил о сертификации LFCS (Сисадмин, сертифицированный Linux Foundation) — новой интересной программе, цель которой — позволить людям со всех концов света получить сертификат по выполнению базовых и промежуточных задач системного администрирования в системах Linux. Это включает в себя поддержку уже работающих систем и сервисов, а также непосредственный поиск и анализ проблем, а также возможность решать, когда сообщать о проблемах инженерным командам.

В следующем видео описывается краткое введение в программу сертификации Linux Foundation.

Этот пост является частью 7 серии из 10 руководств. Здесь, в этой части, мы объясним, как управлять процессом запуска системы Linux и службами, которые необходимы для сдачи сертификационного экзамена LFCS.

Управление процессом запуска Linux

Процесс загрузки системы Linux состоит из нескольких этапов, каждый из которых представлен отдельным компонентом. На следующей диаграмме кратко описан процесс загрузки и показаны все основные задействованные компоненты.

Когда вы нажимаете кнопку Питание на своем компьютере, микропрограмма, хранящаяся в микросхеме EEPROM на материнской плате, инициализирует POST ( Самотестирование при включении питания) для проверки состояния аппаратных ресурсов системы. По завершении POST микропрограмма ищет и загружает загрузчик 1-го этапа, расположенный в MBR или в EFI. раздел первого доступного диска и передает ему управление.

MBR-метод

MBR расположен в первом секторе диска, помеченного в настройках BIOS как загрузочный, и имеет размер 512 байт.

  1. Первые 446 байт: загрузчик содержит как исполняемый код, так и текст сообщения об ошибке.
  2. Следующие 64 байта: Таблица разделов содержит запись для каждого из четырех разделов (основного или расширенного). Помимо прочего, в каждой записи указывается статус (активен/не активен), размер и начальный/конечный сектора каждого раздела.
  3. Последние 2 байта: магическое число служит для проверки MBR.

Следующая команда выполняет резервное копирование MBR (в этом примере /dev/sda — это первый жесткий диск). Полученный файл mbr.bkp может пригодиться, если таблица разделов будет повреждена, например, что приведет к невозможности загрузки системы.

Конечно, чтобы использовать его позже, если возникнет необходимость, нам нужно будет сохранить его и хранить где-нибудь в другом месте (например, на USB). Этот файл поможет нам восстановить MBR и позволит нам продолжить работу, если и только если мы за это время не изменим структуру жесткого диска.

Резервное копирование MBR
dd if=/dev/sda of=mbr.bkp bs=512 count=1

Восстановление MBR
dd if=mbr.bkp of=/dev/sda bs=512 count=1

Метод EFI/UEFI

В системах, использующих метод EFI/UEFI, встроенное ПО UEFI считывает свои настройки, чтобы определить, какое приложение UEFI должно быть запущено и откуда (т. е. на каком диске и в каком разделе находится находится раздел EFI).

Затем загружается и запускается загрузчик 2-го этапа (он же менеджер загрузки). GRUB [GRand Unified Boot] — наиболее часто используемый менеджер загрузки в Linux. Одну из двух различных версий можно найти в большинстве систем, используемых сегодня.

  1. Устаревший файл конфигурации GRUB: /boot/grub/menu.lst (более старые дистрибутивы, не поддерживаемые прошивками EFI/UEFI).
  2. Файл конфигурации GRUB2: скорее всего, /etc/default/grub.

Хотя цели экзамена LFCS явно не требуют знаний о внутреннем устройстве GRUB, если вы смелы и можете позволить себе испортить свою систему (вы можете попробовать это сначала на виртуальной машине, на всякий случай) нужно запустить.

update-grub

От имени root после изменения конфигурации GRUB, чтобы применить изменения.

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

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

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

Запуск служб (SysVinit)

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

Традиционно этот процесс запуска выполнялся на основе соглашений, зародившихся в System V UNIX, при этом система передавала выполнение наборов сценариев, которые запускают и останавливают службы, когда машина входит в определенный уровень запуска (который, другими словами, , — это другой режим работы системы).

На каждом уровне выполнения отдельные службы могут быть настроены на запуск или завершение работы в случае их работы. Последние версии некоторых основных дистрибутивов отходят от стандарта System V в пользу довольно новой службы и системного менеджера под названием systemd (что означает системный демон), но обычно поддержка команд sysv в целях совместимости. Это означает, что вы можете запускать большинство известных инструментов инициализации sysv в дистрибутиве на основе systemd.

Читайте также: Почему «systemd» заменяет «init» в Linux

Помимо запуска системного процесса, init просматривает файл /etc/inittab, чтобы решить, какой уровень запуска необходимо ввести.

Runlevel

Описание

0

Остановите систему. Уровень выполнения 0 — это особое переходное состояние, используемое для быстрого завершения работы системы.

1

Этот уровень выполнения, также известный как s или S, иногда называют режимом обслуживания. Какие службы (если таковые имеются) запускаются на этом уровне выполнения, зависит от дистрибутива. Обычно он используется для низкоуровневого обслуживания системы, которое может быть нарушено при нормальной работе системы.

2

Многопользовательский. В системах Debian и производных это уровень запуска по умолчанию, который включает, если возможно, графический вход в систему. В системах на базе Red-Hat это многопользовательский режим без сети.

3

В системах на базе Red-Hat это многопользовательский режим по умолчанию, в котором работает все, кроме графической среды. Этот уровень запуска, а также уровни 4 и 5 обычно не используются в системах на базе Debian.

4

Обычно не используется по умолчанию и поэтому доступен для настройки.

5

В системах на базе Red-Hat полный многопользовательский режим с входом в графический интерфейс. Этот уровень выполнения аналогичен уровню 3, но с доступным входом в графический интерфейс.

6

Перезагрузите систему.

Чтобы переключиться между уровнями выполнения, мы можем просто изменить уровень выполнения с помощью команды init: init N (где N — один из уровней запуска, перечисленных выше). Обратите внимание, что это не рекомендуемый способ перевода работающей системы на другой уровень запуска, поскольку он не выдает предупреждений существующим вошедшим в систему пользователям (что приводит к потере работы и аварийному завершению процессов).

Вместо этого для перезапуска системы следует использовать команду shutdown (которая сначала отправляет предупреждающее сообщение всем вошедшим в систему пользователям и блокирует любые дальнейшие входы в систему; затем она сигнализирует init о переключении уровней запуска); однако уровень запуска по умолчанию (тот, с которым будет загружаться система) необходимо сначала отредактировать в файле /etc/inittab.

По этой причине выполните следующие действия, чтобы правильно переключаться между уровнями выполнения. От имени пользователя root найдите следующую строку в /etc/inittab.

id:2:initdefault:

и измените номер 2 для желаемого уровня выполнения с помощью предпочитаемого вами текстового редактора, например vim (описано в разделе «Как использовать редактор vi/vim в Linux — часть 2 этой серии»).

Далее запустите от имени root.

shutdown -r now

Эта команда last перезапустит систему, заставив ее запуститься на указанном уровне выполнения при следующей загрузке, и запустит сценарии, расположенные в /etc/rc[runlevel].d каталог, чтобы решить, какие службы следует запускать, а какие нет. Например, для уровня запуска 2 в следующей системе.

Управление службами с помощью chkconfig

Чтобы включить или отключить системные службы при загрузке, мы будем использовать команду chkconfig в CentOS/openSUSE и sysv-rc-conf в Debian и его производных. Этот инструмент также может показать нам, каково предварительно настроенное состояние службы для определенного уровня запуска.

Читайте также: как остановить и отключить нежелательные службы в Linux

Перечисление конфигурации уровня выполнения для службы.

chkconfig --list [service name]
chkconfig --list postfix
chkconfig --list mysqld

На изображении выше мы видим, что postfix настроен на запуск, когда система переходит на уровни выполнения от 2 до 5, тогда как mysqld будет работать по умолчанию на уровнях выполнения с 2 по 4. Теперь предположим, что это не ожидаемое поведение.

Например, нам нужно включить mysqld для уровня выполнения 5 и отключить postfix для уровней выполнения 4 и 5. Вот что мы будем делать в каждом случае (запустить следующие команды от имени пользователя root).

Включение службы для определенного уровня запуска
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
Отключение службы для определенных уровней запуска
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

Теперь мы выполним аналогичные задачи в системе на базе Debian, используя sysv-rc-conf.

Управляйте службами с помощью sysv-rc-conf

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

1. Давайте воспользуемся следующей командой, чтобы увидеть, на каких уровнях запуска настроен mdadm.

ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

2. Мы будем использовать sysv-rc-conf, чтобы предотвратить запуск mdadm на всех уровнях выполнения, кроме 2. Просто установите или снимите флажок (с помощью клавиши пробела) по желанию (вы можете перемещаться вверх, вниз, влево и вправо с помощью клавиш со стрелками).

sysv-rc-conf

Затем нажмите q, чтобы выйти.

3. Мы перезапустим систему и снова запустим команду из ШАГА 1.

ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

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

А что насчет systemd?

systemd — еще один менеджер служб и систем, который используется в нескольких основных дистрибутивах Linux. Его цель – обеспечить возможность параллельной обработки большего количества данных во время запуска системы (в отличие от sysvinit, который всегда имеет тенденцию работать медленнее, поскольку запускает процессы по одному, проверяет, зависит ли один от другого, и ожидает завершения процесса). демоны для запуска, чтобы можно было запустить больше служб), а также для динамического управления ресурсами работающей системы.

Таким образом, службы запускаются тогда, когда это необходимо (во избежание потребления системных ресурсов), а не запускаются без веской причины во время загрузки.

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

systemctl

Столбец LOAD показывает, было ли правильно загружено определение модуля (см. столбец UNIT, в котором показана служба или что-либо, поддерживаемое systemd), а столбец ACTIVE< Столбцы и SUB показывают текущий статус такого объекта.

Отображение информации о текущем статусе услуги

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

systemctl status [unit]

Например, на изображении выше media-samba.mount находится в состоянии сбоя. Давайте работать.

systemctl status media-samba.mount

Мы видим, что media-samba.mount не удалось, поскольку процесс монтирования на хосте dev1 не смог найти общий сетевой ресурс по адресу //192.168.0.10/gacanepa<. /б>.

Запуск или остановка служб

Как только сетевой ресурс //192.168.0.10/gacanepa станет доступным, давайте попробуем запустить, затем остановить и, наконец, перезапустить устройство media-samba.mount. После выполнения каждого действия давайте запустим systemctl status media-samba.mount, чтобы проверить его статус.

systemctl start media-samba.mount
systemctl status media-samba.mount
systemctl stop media-samba.mount
systemctl restart media-samba.mount
systemctl status media-samba.mount

Включение или отключение запуска службы во время загрузки

В systemd вы можете включить или отключить службу при ее загрузке.

systemctl enable [service] 		# enable a service 
systemctl disable [service] 		# prevent a service from starting at boot

Процесс включения или отключения автоматического запуска службы при загрузке заключается в добавлении или удалении символических ссылок в каталоге /etc/systemd/system/multi-user.target.wants.

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

systemctl is-enabled [service]

Например,

systemctl is-enabled postfix.service

Кроме того, вы можете перезагрузить или выключить систему с помощью .

systemctl reboot
systemctl shutdown

Выскочка

Upstart — это основанная на событиях замена демона /sbin/init, которая возникла из-за необходимости запускать службы только тогда, когда они необходимы (а также контролировать их во время их работы). работают) и обрабатывают события по мере их возникновения, превосходя тем самым классическую систему sysvinit, основанную на зависимостях.

Первоначально он был разработан для дистрибутива Ubuntu, но используется в Red Hat Enterprise Linux 6.0. Хотя предполагалось, что он будет подходящим для развертывания во всех дистрибутивах Linux в качестве замены sysvinit, со временем его затмил systemd. 14 февраля 2014 года Марк Шаттлворт (основатель Canonical Ltd.) объявил, что в будущих выпусках Ubuntu будет использоваться systemd в качестве демона инициализации по умолчанию.

Поскольку сценарий запуска системы SysV широко распространен в течение долгого времени, большое количество пакетов программного обеспечения включает сценарии запуска SysV. Для поддержки таких пакетов Upstart предоставляет режим совместимости: он запускает сценарии запуска SysV в обычных местах (/etc/rc.d/rc?.d, /etc/init.d/ rc?.d, /etc/rc?.d или подобное место). Таким образом, если мы установим пакет, который еще не включает скрипт настройки Upstart, он все равно должен запуститься обычным способом.

Более того, если мы установили такие утилиты, как chkconfig, вы сможете использовать их для управления службами на основе SysV так же, как мы это делали бы в системах на основе sysvinit.

Сценарии Upstart также поддерживают запуск и остановку служб на основе более широкого набора действий, чем сценарии запуска SysV; например, Upstart может запускать службу при каждом подключении определенного аппаратного устройства.

Система, использующая Upstart и ее собственные сценарии, заменяет исключительно файл /etc/inittab и каталоги сценариев запуска SysV, специфичные для уровня выполнения, на .conf сценарии в каталоге /etc/init.

Эти сценарии *.conf (также известные как определения заданий) обычно состоят из следующего:

    1. Описание процесса.
    2. Уровни запуска, на которых должен запускаться процесс, или события, которые должны его запускать.
    3. Уровни выполнения, на которых процесс должен быть остановлен, или события, которые должны его остановить.
    4. Параметры.
    5. Команда для запуска процесса.

Например,

My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email >"
Stanzas

#
Stanzas define when and how a process is started and stopped
See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
When to start the service
start on runlevel [2345]
When to stop the service
stop on runlevel [016]
Automatically restart process in case of crash
respawn
Specify working directory
chdir /home/dave/myfiles
Specify the process/command (add arguments if needed) to run
exec bash backup.sh arg1 arg2

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

initctl reload-configuration

Затем начните свою работу, введя следующую команду.

sudo start yourjobname

Где yourjobname — это имя задания, которое было добавлено ранее с помощью сценария yourjobname.conf.

Более полное и подробное справочное руководство по Upstart доступно на веб-сайте проекта в меню «Кулинарная книга».

Краткое содержание

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

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