Red Hat System Administration II 8.2

Глава 10. Управление процессом загрузки

Аннотация

Цель Управление процессом загрузки для контроля предлагаемых служб, диагностики и устранения проблем
Задачи
  • Описание процесса загрузки Red Hat Enterprise Linux, установка цели по умолчанию, используемой при загрузке, и загрузка системы в нестандартную цель.

  • Вход в систему и изменение пароля root, если текущий пароль root потерян

  • Самостоятельное исправление конфигурации файловой системы или устранение проблем, мешающих процессу загрузки

Разделы
  • Выбор цели загрузки (и упражнение)

  • Сброс пароля root (и упражнение)

  • Устранение проблем с файловой системой при загрузке (и упражнение)

Лабораторная работа

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

Выбор цели загрузки

Задачи

После завершения этого раздела вы сможете:

  • описать процесс загрузки Red Hat Enterprise Linux;

  • задать цель по умолчанию, используемую при загрузке;

  • загрузить систему в нестандартную цель.

Процесс загрузки Red Hat Enterprise Linux 8

Современные компьютерные системы ― это сложное сочетание оборудования и программного обеспечения. Начиная с неопределенного состояния при отключенном источнике питания и заканчивая работающей системой с запросом входа, требуется слаженная совместная работа оборудования и программного обеспечения. Ниже приведен общий обзор задач, которые выполняются в физической системе x86_64, загружающей Red Hat Enterprise Linux 8. Для виртуальных машин x86_64 список практически такой же, но гипервизор выполняет некоторые действия, связанные с оборудованием, в программном обеспечении.

  • Машина включена. Встроенное ПО системы (современный UEFI или классический BIOS) запускает самотестирование (POST) и начинает инициализировать часть оборудования.

    Настройка осуществляется на экранах конфигурации BIOS или UEFI, доступ к которым возможен нажатием определенных клавиш, например F2, на раннем этапе процесса загрузки.

  • Встроенное ПО системы ищет загрузочное устройство, настроенное в UEFI, либо ищет основную загрузочную запись (Master Boot Record, MBR) на всех дисках в порядке, заданном BIOS.

    Настройка осуществляется на экранах конфигурации BIOS или UEFI, доступ к которым возможен нажатием определенных клавиш, например F2, на раннем этапе процесса загрузки.

  • Встроенное ПО системы считывает загрузчик с диска, а затем передает ему контроль над системой. В системе Red Hat Enterprise Linux 8 используется загрузчик GRand Unified Bootloader версии 2 (GRUB2).

    Настройка осуществляется с помощью команды grub2-install, которая устанавливает GRUB2 в качестве загрузчика на диске.

  • GRUB2 загружает свою конфигурацию из файла /boot/grub2/grub.cfg и отображает меню, в котором можно выбрать загружаемое ядро.

    Настройка осуществляется с использованием каталога /etc/grub.d/, файла /etc/default/grub и команды grub2-mkconfig для создания файла /boot/grub2/grub.cfg.

  • После выбора ядра или истечения времени ожидания загрузчик загружает ядро и initramfs с диска и размещает их в памяти. initramfs ― это архив, содержащий модули ядра для всего оборудования, необходимого при загрузке, сценарии инициализации и другие данные. В Red Hat Enterprise Linux 8 initramfs содержит всю необходимую систему.

    Настройка осуществляется с использованием каталога /etc/dracut.conf.d/, файла dracut и команды lsinitrd для просмотра файла initramfs.

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

    Настройка осуществляется с использованием каталога /etc/grub.d/, файла /etc/default/grub и команды grub2-mkconfig для создания файла /boot/grub2/grub.cfg.

  • Ядро инициализирует все оборудование, для которого оно может найти драйвер в initramfs, а затем выполняет /sbin/init из initramfs как процесс с PID 1. В Red Hat Enterprise Linux 8 /sbin/init — это ссылка на systemd.

    Настройка осуществляется с помощью параметра командной строки ядра init=.

  • Экземпляр systemd из initramfs инициализирует все юниты для цели initrd.target. Сюда входит монтирование корневой файловой системы на диске в каталог /sysroot.

    Настройка осуществляется с помощью файла /etc/fstab.

  • Ядро переключается с корневой файловой системы initramfs на корневую файловую систему /sysroot. Затем systemd запускается повторно, используя копию systemd, установленную на диске.

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

    Настройка осуществляется с помощью /etc/systemd/system/default.target и /etc/systemd/system/.

Перезагрузка и выключение

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

systemctl poweroff останавливает все работающие службы, размонтирует все файловые системы (или перемонтирует их в режиме «только чтение», если они не могут быть размонтированы), а затем выключает систему.

systemctl reboot останавливает все работающие службы, размонтирует все файловые системы и перезагружает систему.

Вы также можете использовать более короткую версию этих команд ― poweroff и reboot. Это символьные ссылки на их systemctl-эквиваленты.

Примечание

Остановить систему также можно с помощью команд systemctl halt и halt, но, в отличие от poweroff, эти команды не выключают систему, а просто сводят все процессы на уровень, с которого можно безопасно выключить систему вручную.

Выбор цели systemd

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

Таблица 10.1. Часто используемые цели

Цель Назначение
graphical.target Система будет запущена в многопользовательском режиме, вход возможен через графический экран или текстовую консоль.
multi-user.target Система будет запущена в многопользовательском режиме, вход возможен только через текстовую консоль.
rescue.target Приглашение sulogin; базовая настройка и запуск системы выполнены.
emergency.target Приглашение sulogin; переключение initramfs выполнено; корневая система смонтирована в / в режиме «только чтение».

Цель может быть частью другой цели. Например, graphical.target включает multi-user.target, которая, в свою очередь, зависит от basic.target и других целей. Просмотреть эти зависимости можно с помощью следующей команды:

[user@host ~]$ systemctl list-dependencies graphical.target | grep target
graphical.target
* └─multi-user.target
*   ├─basic.target
*   │ ├─paths.target
*   │ ├─slices.target
*   │ ├─sockets.target
*   │ ├─sysinit.target
*   │ │ ├─cryptsetup.target
*   │ │ ├─local-fs.target
*   │ │ └─swap.target
...output omitted...

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

[user@host ~]$ systemctl list-units --type=target --all
  UNIT                      LOAD      ACTIVE   SUB    DESCRIPTION
  ---------------------------------------------------------------------------
  basic.target              loaded    active   active Basic System
  cryptsetup.target         loaded    active   active Local Encrypted Volumes
  emergency.target          loaded    inactive dead   Emergency Mode
  getty-pre.target          loaded    inactive dead   Login Prompts (Pre)
  getty.target              loaded    active   active Login Prompts
  graphical.target          loaded    inactive dead   Graphical Interface
...output omitted...

Выбор цели в среде выполнения

В работающей системе администратор может переключиться на другую цель с помощью команды systemctl isolate.

[root@host ~]# systemctl isolate multi-user.target

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

Не все цели можно изолировать. Можно изолировать только те цели, в файлах юнитах которых задана переменная AllowIsolate=yes. Например, можно изолировать цель graphical, но не цель cryptsetup.

[user@host ~]$ systemctl cat graphical.target
# /usr/lib/systemd/system/graphical.target
...output omitted...
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
[user@host ~]$ systemctl cat cryptsetup.target
# /usr/lib/systemd/system/cryptsetup.target
...output omitted...
[Unit]
Description=Local Encrypted Volumes
Documentation=man:systemd.special(7)

Установка цели по умолчанию (default)

Когда система запускается, systemd активирует цель default.target. Обычно цель по умолчанию в /etc/systemd/system/ — это символьная ссылка на graphical.target или multi-user.target. Вместо редактирования этой символьной ссылки вручную можно использовать команду systemctl с двумя подкомандами для управления ссылкой: get-default и set-default.

[root@host ~]# systemctl get-default
multi-user.target
[root@host ~]# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target.
[root@host ~]# systemctl get-default
graphical.target

Выбор другой цели во время загрузки

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

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

systemd.unit=rescue.target

Такое изменение конфигурации влияет только на одну загрузку и удобно для устранения проблем в процессе загрузки.

Чтобы выбрать другую цель, выполните следующие шаги.

  1. Загрузите или перезагрузите систему.

  2. Прервите обратный отсчет загрузчика, нажав любую клавишу, кроме Enter (ее нажатие приведет к обычной загрузке).

  3. Установите курсор на запись ядра, которое требуется загрузить.

  4. Нажмите e для редактирования текущей записи.

  5. Установите курсор на строку, начинающуюся с linux. Это командная строка ядра.

  6. Добавьте systemd.unit=target.target. Пример: systemd.unit=emergency.target.

  7. Нажмите Ctrl+x, чтобы выполнить загрузку с учетом изменений.

Ссылки

info grub2 (руководство по GNU GRUB)

Man-страницы bootup(7), dracut.bootup(7), lsinitrd(1), systemd.target(5), systemd.special(7), sulogin(8) и systemctl(1)

Дополнительные сведения см. в главе Managing services with systemd руководства Configuring basic system settings: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_basic_system_settings/#managing-services-with-systemd