Как переключиться на оболочку initramfs после выполнения команды run-init

Вопрос или проблема

В 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 для дополнительного анализа, рассмотрите следующие подходы:

  1. Использование опции dry-run:

    • Запустите run-init с флагом -n (dry run), чтобы увидеть, какие действия были бы выполнены без фактического переключения. Это даст возможность оценить выполнение без разрушительных изменений.
    • Команда: run-init -n ${rootmnt} ${init}.
  2. Добавление отладочной информации:

    • Вставьте дополнительные отладочные сообщения в скрипт init перед вызовом exec run-init. Используйте команды echo для вывода текущего состояния переменных или шагов, которые вы проходите.
  3. Создание аварийной точки остановки:

    • Перед выполнением exec run-init вставьте команду для запуска интерактивной оболочки, например, sh или bash. Это позволит вам вручную вводить команды и исследовать состояние системы.
    • Пример: echo "Запуск аварийной оболочки..."; /bin/sh.
  4. Использование флага -c:

    • Переадресация стандартного ввода/вывода в конкретное устройство с помощью -c DEV может помочь удостовериться, что у вас всегда будет доступ к консоли.
  5. Отладка через системный журнал:

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

Заключение

Используя эти методы, вы можете эффективно добавить отладочные данные в процесс запуска вашей системы и вернуться в оболочку initramfs при необходимости. Это позволит выявить и решить возможные проблемы с загрузкой без значительных перерывов в работе. Помните, что каждая система уникальна, и конкретные шаги могут немного варьироваться в зависимости от ее особенностей и конфигураций.

Оцените материал
Добавить комментарий

Капча загружается...