CentOS 7 зависает на экране grub после обновления ядра

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

Я пытался обновить ядро с помощью YUM, и когда я запустил

[root@AFIBAMBOO bin]# grub2-mkconfig -o /boot/grub2/grub.cfg
Не указан путь или устройство. 
Использование: grub2-probe [OPTION...] [OPTION]... [PATH|DEVICE] 
Попробуйте 'grub2-probe --help' или 'grub2-probe --usage' для получения дополнительной информации.
Не указан путь или устройство. Использование: grub2-probe [OPTION...] [OPTION]... [PATH|DEVICE] 
Попробуйте 'grub2-probe --help' или 'grub2-probe --usage' для получения дополнительной информации. 
Не указан путь или устройство. Использование: grub2-probe [OPTION...] [OPTION]... [PATH|DEVICE] 
Попробуйте 'grub2-probe --help' или 'grub2-probe --usage' для получения дополнительной информации.

Кстати

Проблема была решена в AskUbuntu S&E и там вводится grub2-probe, поскольку grub.cfg после обновления ядра стал неработоспособным.

Проверьте ваш grub.cfg на наличие потерянных отступов и повторите grub2-mkconfig.


Подробное описание обновления ядра через yum:

CentOS распространяет ядро через RPM-пакеты и хранит их в собственном репозитории.

Когда вы работаете с репозиторием, вы устанавливаете/удаляете/переустанавливаете … RPM-пакеты.

RPM-пакеты, в которых хранится ядро, имеют postinst и posttrans секции, которые выполняют все необходимые шаги для адаптации нового ядра в CentOS. Эти шаги включают в себя несколько важных вещей, таких как генерация initramfs, установка новых записей в загрузчик …

Посмотрим на секции postinstall в 3.10.0-957.el7.x86_64.rpm:

postinst:

/usr/sbin/new-kernel-pkg --package kernel --install 3.10.0-957.el7.x86_64 || exit $?

posttrans:

if [ -x /usr/sbin/weak-modules ]
then
    /usr/sbin/weak-modules --add-kernel 3.10.0-957.el7.x86_64 || exit $?
fi
/usr/sbin/new-kernel-pkg --package kernel --mkinitrd --dracut --depmod --update 3.10.0-957.el7.x86_64
rc=$?
if [ $rc != 0 ]; then
    /usr/sbin/new-kernel-pkg --remove 3.10.0-957.el7.x86_64
    ERROR_MSG="ERROR: installing kernel-3.10.0-957.el7.x86_64: no space left for creating initramfs. Clean up /boot partition and re-run '/usr/sbin/new-kernel-pkg --package kernel --mkinitrd --dracut --depmod --install 3.10.0-957.el7.x86_64'"
    if [ -e /usr/bin/logger ]; then
        /usr/bin/logger -p syslog.warn "$ERROR_MSG"
    elif [ -e /usr/bin/cat ]; then
        /usr/bin/cat "$ERROR_MSG" > /dev/kmsg
    fi
    echo "$ERROR_MSG"
    exit $rc
fi
/usr/sbin/new-kernel-pkg --package kernel --rpmposttrans 3.10.0-957.el7.x86_64 || exit $?

Эти скрипты postinstall используют скрипт new-kernel-pkg, который является частью проекта grubby. man 8 new-kernel-prkg пишет:

Описание

new-kernel-pkg — это инструмент, используемый в упаковке для автоматизации
установки нового ядра, включая создание образа начальной ram файловой системы,
обновление конфигурации загрузчика и другие связанные задачи

Скрипт new-kernel-pkg вызывает grubby (это программа внутри проекта grubby) для обновления конфигурации загрузчика. Из man 8 grubby:

Описание

grubby — это инструмент командной строки для обновления и отображения информации
о конфигурационных файлах для загрузчиков grub, lilo, elilo (ia64), yaboot
(powerpc) и zipl (s390). Он в первую очередь предназначен для использования в скриптах,
которые устанавливают новые ядра и нуждаются в информации о текущей загрузочной среде.

Фрагмент вызова grubby из скрипта new-kernel-pkg:

ARGS="--grub2 -c $grub2Config --add-kernel=$kernelImage $INITRD \
                --copy-default --title \"$title\$debugtitle\" \
                ${mbkernel:+--add-multiboot=\"$mbkernel\"} \
                ${mbargs:+--mbargs=\"$mbargs\"} \
                --args=\"root=$rootdevice $kernargs \$debugargs\" \
                --remove-kernel=\"TITLE=$title\$debugtitle\""
        rungrubby ${ARGS} $makedefault

Если вам нужно узнать более конкретную информацию о том, как строится конфигурация загрузчика, вы можете запустить new-kernel-pkg (указав необходимую версию ядра и параметры) в режиме подробного вывода (-v option).


Таким образом, нет необходимости вручную вызывать grub2-mkconfig после обновления ядра.

Ответ или решение

CentOS 7 застрял на GRUB-промпте после обновления ядра: Решение проблемы

Обновление ядра в CentOS 7 — это задача, с которой сталкиваются многие администраторы. К сожалению, иногда при этом возникают трудности, такие как застревание на GRUB-промпте. Давайте рассмотрим эту проблему более детально и предложим возможные решения.

Причины проблемы

При обновлении ядра через пакетный менеджер YUM, как правило, используются RPM-пакеты, которые содержат необходимые скрипты для корректного обновления. Скрипты postinst и posttrans выполняют важные задачи, включая создание образа initramfs и обновление конфигурации загрузчика. Однако если во время обновления возникают ошибки, это может привести к некорректной конфигурации GRUB и, в конечном итоге, к застреванию системы на GRUB-промпте.

Как указывается в вашем запросе, ошибка, связанная с grub2-mkconfig, которая не может корректно обработать зависимости на ваших дисках, может указывать на отсутствие нужного пути или устройства. Это может быть результатом:

  1. Неправильной конфигурации файлов GRUB: При обновлении могут потеряться важные данные настройка GRUB, такие как идентификаторы разделов или пути к ядрам.
  2. Проблемы с размером раздела /boot: Если раздел /boot переполнен, новые файлы, такие как initramfs, не смогут создаться.
  3. Сбой в файловой системе: Если на уровне файловой системы существуют ошибки, система может не распознать необходимые файлы.

Шаги для решения проблемы

1. Проверка раздела /boot

Первым делом проверьте размер раздела /boot. Если он переполнен, удалите старые ядра:

yum --installonly remove kernel-<версия>
2. Исправление конфигурации GRUB

Если вы видите сообщение о том, что grub2-probe не может определить путь или устройство, это может говорить о том, что grub.cfg был неправильно сгенерирован. Попробуйте вручную пересоздать его:

grub2-mkconfig -o /boot/grub2/grub.cfg

Перед этим убедитесь, что установлен правильный драйвер и существует доступ к нужным устройствам. Также можете использовать команду lsblk для проверки таблицы разметки и дисковых устройств.

3. Восстановление GRUB

Если ни одно из вышеперечисленных действий не помогло, возможно, стоит восстановить загрузчик GRUB:

  1. Загрузитесь с установочного носителя CentOS.
  2. В терминале выберите "Troubleshooting" > "Rescue a CentOS system".
  3. После загрузки выполните следующие команды:
mount /dev/mapper/centos-root /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot   # (Учтите, что sda1 должен быть заменен на ваш раздел /boot)
chroot /mnt/sysimage
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
4. Проверка файловой системы

Если проблема не решилась, попробуйте проверить файловую систему на наличие ошибок:

fsck -f /dev/sda1  # Замените sda1 на ваш нужный раздел

Заключение

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

Запомните, что правильное обновление и поддержка систем — это залог надежности и безопасности вашего сервера.

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

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