Вопрос или проблема
В initramfs последняя команда в скрипте init
:
exec run-init ${drop_caps} "${rootmnt}" "${init}" "$@" <"${rootmnt}/dev/console" >"${rootmnt}/dev/console" 2>&1
Согласно использованию, run-init освободит initramfs и переключится на другой корневой fs
Usage: run-init [-d CAP,CAP...] [-n] [-c CONSOLE_DEV] NEW_ROOT NEW_INIT [ARGS]
Освободите initramfs и переключитесь на другую корневую fs:
chroot к NEW_ROOT, удалите все в /, переместите NEW_ROOT в /,
выполните NEW_INIT. PID должен быть 1. NEW_ROOT должен быть точкой монтирования.
-c DEV Повторное открытие стандартного ввода-вывода на DEV после переключения
-d CAPS Сброс возможностей
-n Пробный запуск
Но я хочу проверить больше отладочной информации во время выполнения этой команды, как я могу это сделать? Могу ли я вернуться в оболочку initramfs или войти в другую оболочку во время выполнения?
Ответ или решение
Для ИТ-эксперта, понимающего, как работает загрузка системы на уровне initramfs, вопрос о том, как переключиться на оболочку initramfs после выполнения команды run-init
, заслуживает особого внимания. Давайте подробно рассмотрим, как это можно сделать, чтобы получить дополнительную информацию для отладки.
Понимание run-init
и его функций
run-init
выполняет важную задачу — освобождает initramfs
и переключает файловую систему на корневую (root), указанную в параметре NEW_ROOT
. Когда этот процесс запускается, пользователю труднее вмешиваться в процесс или возвращаться к оболочке initramfs, так как система уже переходит к следующему этапу загрузки.
Способы отладки и переключения на initramfs
Если вам необходимо собирать отладочную информацию или вернуться в оболочку initramfs для дополнительного анализа, рассмотрите следующие подходы:
-
Использование опции dry-run:
- Запустите
run-init
с флагом-n
(dry run), чтобы увидеть, какие действия были бы выполнены без фактического переключения. Это даст возможность оценить выполнение без разрушительных изменений. - Команда:
run-init -n ${rootmnt} ${init}
.
- Запустите
-
Добавление отладочной информации:
- Вставьте дополнительные отладочные сообщения в скрипт
init
перед вызовомexec run-init
. Используйте командыecho
для вывода текущего состояния переменных или шагов, которые вы проходите.
- Вставьте дополнительные отладочные сообщения в скрипт
-
Создание аварийной точки остановки:
- Перед выполнением
exec run-init
вставьте команду для запуска интерактивной оболочки, например,sh
илиbash
. Это позволит вам вручную вводить команды и исследовать состояние системы. - Пример:
echo "Запуск аварийной оболочки..."; /bin/sh
.
- Перед выполнением
-
Использование флага
-c
:- Переадресация стандартного ввода/вывода в конкретное устройство с помощью
-c DEV
может помочь удостовериться, что у вас всегда будет доступ к консоли.
- Переадресация стандартного ввода/вывода в конкретное устройство с помощью
-
Отладка через системный журнал:
- Убедитесь, что все отладочные сообщения перенаправляются в системный журнал или файловую систему, к которой у вас есть доступ после загрузки.
Заключение
Используя эти методы, вы можете эффективно добавить отладочные данные в процесс запуска вашей системы и вернуться в оболочку initramfs при необходимости. Это позволит выявить и решить возможные проблемы с загрузкой без значительных перерывов в работе. Помните, что каждая система уникальна, и конкретные шаги могут немного варьироваться в зависимости от ее особенностей и конфигураций.