Найти в Дзене
Игорь Сотников

Загрузка Linux. Init в стиле Systemd

Init в стиле Systemd – более современная система инициализации операционной системы Linux.
Необходимым элементом работы системы systemd , являются Unit. Unit- это модуль которыми оперирует systemd:
.service – службы
.mount – точки монтирования

Init в стиле Systemd – более современная система инициализации операционной системы Linux.

Необходимым элементом работы системы systemd , являются Unit. Unit- это модуль которыми оперирует systemd:

.service – службы

.mount – точки монтирования

.device – устройства

.socket – сокеты

Если при работе в консоли мы не указывает расширение юнита, то в принципе system может догадаться в каком случае, что используется. В операционной системе существуют 2 папки в которых хранятся Unit:

/usr/lib/systemd – директория с Units по умолчанию, в которой создаются units при установке какого либо программного обеспечения.

/etc/systemd – директория с управляемыми Units. Тут лежат те Unit которыми может управлять админ, добавлять , редактировать.

Посмотрим, что находится в данных директориях переходим в /usr/lib/system

Нам интересны 2 директории system и user.

-2

Содержимое папки system выглядит вот так. В данной директории лежат все необходимые Units для системы в директории user для пользователя. Картинка будет примерно аналогичная.

Директория /etc/systemd .

-3

Тут точно также есть две папки system и user, а также конфигурационные фалы. Данные конфигурационные файлы и отвечают за настройку systemd. Это те файлы которые пришли на замену /etc/inittab , предыдущей версии инициализации операционной системы. Файлы юнитов в директориях system и user мы можем редактировать для каких-то своих целей и даже писать targets.

Далее мы можем посмотреть запущенные Units. Для этого мы можем выполнить systemctl команду, она отвечает за все действия с systemd. Для примера команда systemctl list-units нам выведет все запущенные Units, сокеты ,устройства ,точки монтирования.

-4

Можно посмотреть юниты, которые не стартанули systemd –failed.

А также мы можем управлять юнитами systemctl status|start|stop|restart crond .

Так же Systemd работает с Target (целями).

-5

Есть target которые работают так же как runlevel в классической процедуре инициализации, они не пронумерованы в отличии от runlevel у них есть конкретные имена. В табличке можно посмотреть какие target соотносятся с какими runlevel. Их этих target может быть несколько, потому что target бывают не только загрузочные. Данная система использования target обратно совместимая с системой инициализации. Для переключения мы можем использовать команду telinit. Сами по себе target есть некая группировка юнитов, последовательность вызова юнитов. Это может быть target последовательного вызова нескольких служб и ниже стоящий target.

Текущий уровень мы можем посмотреть командой runlevel. По умолчанию это будет 3. Далее мы можем написать systemctl list-units --type=target

-6

И можно увидеть, что находимся на 3-м уровне также т.к target соответствует. Так же мы можем переключатся между runlevel командой telinit. Например, для перехода в однопользовательский режим telinit 1. А так же мы можем использовать через синтаксис systemctl isolate reboot.target .

Для того чтобы поставить какой-то загрузочный target по умолчанию, необходимо отредактировать загрузчик, вставить параметры ядра, которые будут запускаться. Или сделать проще командой systemctl set-default –f multi-user.target (использование например 3 runlevel по умолчанию).

Одной из особенностей system является интересная система журналирования journald. Демон журналов. Эта система уникальна тем, что собирает информацию из разных источников событий и привязывает их к конкретным юнитам и сервисам. Благодаря этому мы можем всю диагностическую информацию просматривать в одном месте. Соответственно находить неисправности и их устранять.

Работает следующим образом:

Journalctl –f - показывает события по мере их возникновения.

Journalctl –n 10 – вывод последних 10 событий