Часто встречающиеся проблемы и пути их устранения#

В разделе описываются общие подходы, которые помогают исправить некоторые из наиболее распространенных проблем при загрузке Linux.

Понимание процедуры загрузки#

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

Каким образом процедура загрузки происходит в SberLinux

  1. Выполнение POST: компьютер (также – машина, сервер) включен. Из системного ПО, которым может быть UEFI или классический BIOS, выполняется самотестирование при включении питания (POST) и аппаратное обеспечение, необходимое для запуска инициализации системы.

  2. Выбор загрузочного устройства: В загрузочной прошивке UEFI или в основной загрузочной записи находится загрузочное устройство.

  3. Загрузчик: На SberLinux загрузчиком является GRUB 2.

  4. Загрузка ядра: Загрузчик может представить пользователю меню загрузки или может быть настроен на автоматический запуск Linux по умолчанию. Для загрузки Linux ядро загружается вместе с initramfs. Initramfs содержит модули ядра для всего оборудования, которое требуется для загрузки, а также начальные сценарии, необходимые для перехода к следующему этапу загрузки. На SberLinux initramfs содержит полную операционную систему (которая может использоваться для устранения неполадок).

  5. Запуск /sbin/init: Как только ядро загружено в память, загружается первый из всех процессов, но все еще из initramfs. Это процесс /sbin/init, который связан с systemd. Демон udev также загружается для дальнейшей инициализации оборудования. Все это все еще происходит из образа initramfs.

  6. Обработка initrd.target: процесс systemd выполняет все модули из initrd.target, который подготавливает минимальную операционную среду, и корневая файловая система на диске монтируется в каталог /sysroot. Следующие шаги суммируют, как процедура загрузки происходит в Linux.

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

  8. Запуск цели по умолчанию (default target): Systemd ищет цель по умолчанию для выполнения и запускает все собственные модули. В этом процессе отображается экран входа в систему, и пользователь может проходить аутентификацию. Обратите внимание, что приглашение к входу в систему может быть запрошено до успешной загрузки всех файлов модуля systemd.

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

Фаза загрузки

Где настроено

Как исправить

POST

Аппаратное обеспечение (F2, Esc, F10, или другая кнопка)

Замена аппаратного обеспечения

Выбор загрузочного устройства

BIOS/UEFI конфигурация или загрузочное устройство

Замена аппаратного обеспечения или использование восстановления системы

Загрузка GRUB 2

grub2-install и редактирует в /etc/defaults/grub

Приглашение GRUB для загрузки и изменения в /etc/defaults/grub, после чего выполняется grub2-mkconfig

Загрузка ядра

Конфигурация GRUB и /etc/dracut.conf

Приглашение GRUB для загрузки и изменения в /etc/defaults/grub, после чего выполняется grub2-mkconfig

Запуск /sbin/init

Компиляция в initramfs

init = kernel аргумент загрузки, rd.break аргумент загрузки ядра

Обработка initrd.target

Компиляция в initramfs

Обычно ничего не требуется

Переключение на корневую файловую систему

/etc/fstab

/etc/fstab

Запуск цели по умолчанию

/etc/systemd/system/default.target

Запуск rescue.target как аргумент при загрузке ядра

Устранение неполадок#

Проверка журналов

Если системные журналы сохраняются при перезагрузках, можно использовать инструмент journalctl для проверки этих журналов.

По умолчанию системные журналы хранятся в каталоге /run/log/journal, что означает, что журналы удаляются при перезагрузке системы. Чтобы хранить журналы в каталоге /var/log/journal, который сохраняется при перезагрузках, установите для параметра Storage значение persistent в файле /etc/systemd/journaldd.conf.

[root@host ~]# vim /etc/systemd/journald.conf
..
[Journal]
Storage=persistent
...
[root@host ~]# systemctl restart systemd-journald.service

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

[root@host ~]# journalctl -b -1 -p err

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

Устранение проблемы с загрузкой systemd

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

Включение оболочки ранней отладки

Включив службу debug-shell с помощью systemctl enable debug-shell.service, система создает корневую оболочку на TTY9 (Ctrl + Alt + F9) в начале последовательности загрузки. Эта оболочка автоматически входит в систему с правами пользователя с административными полномочиями, чтобы администраторы могли отлаживать систему, пока операционная система еще загружается.

Примечание: Не забудьте отключить службу debug-shell.service по завершении отладки, поскольку она оставляет корневую оболочку, не прошедшую проверку подлинности, открытой для всех, у кого есть доступ к локальной консоли.

Использование аварийных и спасательных целей

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

Аварийная цель сохраняет корневую файловую систему подключенной только для чтения, в то время как аварийная цель ожидает завершения sysinit.target, чтобы инициализировать больше систем, таких как служба ведения журнала или файловые системы. Пользователь с административными полномочиями на этом этапе не может вносить изменения в /etc/fstab, пока диск не будет повторно смонтирован в состояние чтения записи mount -o remount,rw /

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

Выявление застрявших заданий

Во время запуска systemd запускает несколько заданий. Если некоторые из этих заданий не могут быть выполнены, они блокируют выполнение других заданий. Чтобы просмотреть текущий список заданий, администраторы могут использовать команду systemctl list-jobs. Все задания, перечисленные как выполняемые, должны быть завершены, прежде чем задания, перечисленные как ожидающие, смогут быть продолжены.

Передача аргументов в GRUB 2 ядру во время загрузки#

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

Когда сервер загружается, пользователь видит меню GRUB 2. В загрузочном меню введите e, чтобы войти в режим, в котором можно редактировать команды, или c, чтобы ввести полную командную строку GRUB.

После передачи e в загрузочное меню GRUB появится интерфейс. В этом интерфейсе прокрутите вниз, чтобы найти раздел, начинающийся с linux16 /vmlinuz, за которым следует множество аргументов. Это строка, которая сообщает GRUB, как запустить ядро.

После ввода параметров загрузки, которые необходимо использовать, нажмите Ctrl + X, чтобы запустить ядро с этими параметрами. Обратите внимание, что эти параметры используются только один раз и не являются постоянными. Чтобы сделать их постоянными, измените содержимое файла конфигурации /etc/default/grub и используйте grub2-mkconfig -o /boot/grub2/grub.cfg, чтобы применить изменение.

Когда возникли проблемы, существует несколько вариантов, которые можно ввести в приглашении загрузки GRUB:

  • rd.break останавливает процедуру загрузки, пока она еще находится в стадии initramfs. Эта опция полезна, если отсутствует пароль пользователя с административными полномочиями.

  • init=/bin/sh или init=/bin/bash указывает, что оболочка должна быть запущена сразу после загрузки ядра и initrd. Это полезный вариант, но не лучший, потому что в некоторых случаях потеряете консольный доступ или пропустите другие функции.

  • systemd.unit=emergency.target входит в минимальный режим, когда загружается минимальное количество системных модулей. Требуется пароль пользователя с правами администратора. Чтобы увидеть, что загружено только очень ограниченное количество модулей, можно ввести команду systemctl list-units.

  • systemd.unit=rescue.target запускает еще несколько системных модулей, чтобы привести в более полный рабочий режим. Требуется пароль пользователя с административными полномочиями. Чтобы увидеть, что загружено только очень ограниченное количество модулей, можно ввести команду systemctl list-units.

Запуск целей(targets) устранения неполадок в Linux

  1. Перезагрузите SberLinux. Когда отобразиться меню GRUB, нажмите e.

  2. Найдите строку, которая начинается на linux16 /vmlinuz. В конце строки введите systemd.unit=rescue.target и удалите rhgb quit.

  3. Нажмите сочетание клавиш Ctrl+X, чтобы начать загрузку с этими параметрами. Введите пароль пользователя с административными полномочиями.

  4. Введите systemctl list-units. Откроются все модули, которые загружены в данный момент и загружена базовая системная среда.

  5. Введите systemctl show-environment. Откроются переменные окружения в режиме rescue.target.

  6. Перезагрузите систему (reboot).

  7. Когда отобразится меню GRUB, нажмите e. Найдите строку, которая начинается на linux16 /vmlinuz. В конце строки введите systemd.unit=emergency.target и удалите rhgb quit.

  8. Снова введите пароль пользователя с административными полномочиями. Система загрузилась в режиме emergency.target.

  9. Введите systemctl list-units. Загрузится минимум из модулей.

Переустановка GRUB 2#

Код загрузчика не исчезает просто так, но иногда может случиться, что загрузочный код GRUB 2 поврежден. Переустановите GRUB 2. Введите grub2-install и имя устройства, на которое необходимо его установить.

Если сервер не загружается, нужно запустить систему восстановления и восстановить доступ к серверу из системы восстановления. После монтирования файловых систем сервера в /mnt/sysimage и использования chroot /mnt/sysimage, создайте смонтированный образ системы корневым образом: запустите grub2-install, чтобы установить GRUB 2 на желаемое установочное устройство.

Исправление Initramfs#

initramfs может быть поврежден. Если есть подозрения, что проблема с initramfs, создайте его заново. Чтобы воссоздать его, используя все настройки по умолчанию, запустите команду dracut --force. (Без --force команда откажется перезаписать существующие initramfs). При запуске команды dracut можно использовать файл конфигурации /etc/dracut.conf, чтобы указать, что именно записывается в initramfs. В этом файле конфигурации можно увидеть такие параметры, как lvmconf = no, которые можно использовать для включения или выключения определенных функций. Используйте эти параметры, чтобы убедиться, что существуют все необходимые функции в initramfs.

Восстановление после проблем с файловой системой#

Если неправильно настроено монтирование файловой системы, процедура загрузки может закончиться сообщением Give root password for maintenance. Это сообщение генерируется командой fsck, которая пытается проверить целостность файла системы в /etc/fstab при загрузке. Если fsck терпит неудачу, требуется вмешательство вручную.

Если упомянуто устройство, которого нет, или в UUID для монтирования устройства, есть ошибка, например, systemd ожидает, вернется ли устройство само по себе и выдается сообщение Give root password for maintenance.

Введите пароль пользователя с административными полномочиями.

Введите journalctl -xb, как предлагается, чтобы увидеть, записываются ли в журнал соответствующие сообщения, содержащие информацию, что не так. Если проблема ориентирована на файловую систему, введите mount -o remount, rw /, чтобы убедиться, что корневая файловая система смонтирована только для чтения, проанализировать, что не так в файле /etc/fstab, и исправить это.

Если появится подобный текст (как на рисунке ниже), то значит, есть проблема с /etc/fstab:

Проблема с /etc/fstab

Удаление файлов неудачной установки FreeIPA#

Решение ошибок, возникших при установке сервера или клиента FreeIPA, описаны в разделах «Работа с управлением учетными записями пользователей» –> «FreeIPA» –> «Сервер FreeIPA» –> «Удаление файлов конфигурации неудачной установки сервера FreeIPA» и «Работа с управлением учетными записями пользователей» –> «FreeIPA» –> «Клиент FreeIPA» –> «Проверка и отладка клиента FreeIPA».