Вопрос или проблема
Я пытался обновить ядро с помощью 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
, которая не может корректно обработать зависимости на ваших дисках, может указывать на отсутствие нужного пути или устройства. Это может быть результатом:
- Неправильной конфигурации файлов GRUB: При обновлении могут потеряться важные данные настройка GRUB, такие как идентификаторы разделов или пути к ядрам.
- Проблемы с размером раздела /boot: Если раздел /boot переполнен, новые файлы, такие как initramfs, не смогут создаться.
- Сбой в файловой системе: Если на уровне файловой системы существуют ошибки, система может не распознать необходимые файлы.
Шаги для решения проблемы
1. Проверка раздела /boot
Первым делом проверьте размер раздела /boot
. Если он переполнен, удалите старые ядра:
yum --installonly remove kernel-<версия>
2. Исправление конфигурации GRUB
Если вы видите сообщение о том, что grub2-probe
не может определить путь или устройство, это может говорить о том, что grub.cfg
был неправильно сгенерирован. Попробуйте вручную пересоздать его:
grub2-mkconfig -o /boot/grub2/grub.cfg
Перед этим убедитесь, что установлен правильный драйвер и существует доступ к нужным устройствам. Также можете использовать команду lsblk
для проверки таблицы разметки и дисковых устройств.
3. Восстановление GRUB
Если ни одно из вышеперечисленных действий не помогло, возможно, стоит восстановить загрузчик GRUB:
- Загрузитесь с установочного носителя CentOS.
- В терминале выберите "Troubleshooting" > "Rescue a CentOS system".
- После загрузки выполните следующие команды:
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 на ваш нужный раздел
Заключение
Если вы продолжаете сталкиваться с проблемами после выполнения всех вышеперечисленных шагов, возможно, стоит рассмотреть возможность восстановления системы из резервной копии или даже переустановки. Также лучше проконсультироваться с сообществом или специализированными форумами, чтобы получить рекомендации от пользователей, которые столкнулись с аналогичными ситуациями.
Запомните, что правильное обновление и поддержка систем — это залог надежности и безопасности вашего сервера.