Вопрос или проблема
Я знаю, что это довольно распространенная проблема, но я попробовал множество распространенных решений (перечисленных ниже) безуспешно.
Базовая настройка: я настраиваю двойную загрузку Fedora 31 / Ubuntu 18.04, каждый с отдельным зашифрованным разделом / и незашифрованным разделом /boot, а также с единым разделом /boot/efi, всего 5. Установил сначала Fedora, затем Ubuntu. Все прошло гладко, и я могу загружаться в любую из систем через меню загрузки efi. Я бы хотел заблокировать порядок загрузки efi и сделать выбор при старте в grub, но текущие параметры grub Ubuntu не распознали Fedora. Поэтому я загрузился в Fedora и попытался использовать grub2-install /dev/sda
, чтобы сбросить MBR на конфигурацию grub Fedora и добавить Ubuntu. Вместо этого я получил слишком распространенную ошибку grub2-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist. Please specify --target or --directory
.
- Я попробовал расширить команду до
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootfloader-id=grub2
, но это не изменило ситуацию. - Я также попробовал
dnf reinstall grub2-efi shim grub2-tools
- И установить
grub2-efi-modules
Несмотря на все это, в моем каталоге /usr/lib/grub
я нашел только arm64-efi
и i386-pc
, но нет x86_64-efi
. Я немного теряюсь с этими вопросами bootmgr (мой опыт ограничивается тем, что я пытаюсь решить эти проблемы, пока они не работают каждый раз при новой установке).
У кого-нибудь есть предположение, в чем проблема, или другое место для поиска ответов?
Сначала я выполнил “dnf provides”, чтобы найти нужный пакет:
dnf provides /usr/lib/grub/x86_64-efi
Затем я установил нужный пакет, используя его полное имя:
dnf install grub2-efi-x64-modules-1:2.06~rc1-2.fc33.noarch
Я смог добавить недостающие модули, установив пакет grub2-efi-x64-modules
на Fedora.
В моем случае после этого возникла другая ошибка, что “Переменные EFI не поддерживались на моей системе”. Я нашел другой пост на stackexchange и смог решить это, выйдя из окружения chroot и загрузив модуль efivarfs с помощью modprobe efivarfs
. Затем я снова вошел в смонтированный корень и смонтировал его через mount -t efivarfs efivarfs /sys/firmware/efi/efivars
.
На ubuntu (это создаст поддержку efi в /usr/lib/grub/x86_64-efi)
sudo apt install grub-efi
Может быть, попробуйте
grub2-install --target=arm64-efi --efi-directory=/boot/efi --bootloader-id=grub2
Я решил проблему, установив grub2-efi-modules и efibootmgr
Для систем deb
apt install grub-efi-amd64-bin
для систем rpm
dnf install grub2-efi-x64-modules
в моем случае это помогло
Если ваш сервер поддерживает как режим BIOS, так и UEFI, возможно, вы попытались установить grub-efi, когда он находился в режиме BIOS. В сомнении проверьте, доступен ли /sys/firmware/efi
на вашей системе. Если его нет, то, вероятно, ваш компьютер использует BIOS.
Я был на живом диске Ubuntu 20.04.1, когда столкнулся с этой проблемой. Я попробовал ответы CodeAlfa и A-la She, но они не сработали.
Совпадение, я установил Artix Linux, поэтому у меня еще был iso на диске. artix-base-runit-20201128-x86_64.iso
образ имел файл /usr/lib/grub/x86_64-efi/modinfo.sh
.
Я смонтировал rootfs.img (внутри образа Artix iso) и скопировал весь каталог:
mkdir /tmp/axi && mount artix-base-runit-20201128-x86_64.iso /tmp/axi
mkdir /tmp/rfs && mount /tmp/axi/LiveOS/rootfs.img /tmp/rfs
cp /tmp/rfs/usr/lib/grub/x86_64-efi /usr/lib/grub/x86_64-efi -r
Это решило проблему.
У меня возникла эта проблема после установки некоторых обновлений, которые, очевидно, не удались. Я попробовал много всего, и ничего не сработало. Наконец, я сделал так.
yum history list # найти ID, где все началось
yum history undo 147 # 147 был ID неудачного патча
Однако команда ‘undo’ не продолжалась (я не помню эту ошибку), поэтому я посмотрел детали 147
yum history info 147
Я заметил, что был установлен четыре элемента ядра, обновлены несколько пакетов и некоторые удалены. Я решил удалить четыре элемента ядра, а затем переустановить их.
yum remove kernel-5.14.0-503.16.1.el9_5.x86_64 kernel-core-5.14.0-503.16.1.el9_5.x86_64 kernel-modules-5.14.0-503.16.1.el9_5.x86_64 kernel-modules-core-5.14.0-503.16.1.el9_5.x86_64
yum install kernel-5.14.0-503.16.1.el9_5.x86_64 kernel-core-5.14.0-503.16.1.el9_5.x86_64 kernel-modules-5.14.0-503.16.1.el9_5.x86_64 kernel-modules-core-5.14.0-503.16.1.el9_5.x86_64
Это исправило мою проблему, и я смог загрузиться в последнюю версию ядра.
Ответ или решение
Ошибка grub2-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist
является распространенной проблемой среди пользователей, которые пытаются установить загрузчик GRUB на Linux системах, особенно при конфигурации двойной загрузки. В данном случае вы настраиваете систему с Fedora 31 и Ubuntu 18.04, каждая из которых имеет отдельные зашифрованные корневые разделы и один раздел для загрузки EFI. Несмотря на то что вы уже попробовали несколько стандартных решений, проблема не решилась, и вы остались с каталогом /usr/lib/grub
, в котором отсутствует необходимый подкаталог x86_64-efi
.
Общая информация
Причины данной ошибки чаще всего связаны с отсутствием соответствующих модулей GRUB, включая файл modinfo.sh
, необходимый для установки загрузчика в режиме EFI. Таким образом, отсутствие папки x86_64-efi
в каталоге /usr/lib/grub
указывает на то, что необходимые пакеты могут быть не установлены или были неправильно установлены.
Разбор популярных решений
-
Использование команды
grub2-install
: Вы пробовали использовать команду с дополнительными параметрами:grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub2
Это правильный подход, однако если модуль не установлен, это не приведет к успеху.
-
Переустановка пакетов GRUB: Вы также использовали следующие команды для переустановки:
dnf reinstall grub2-efi shim grub2-tools
и
dnf install grub2-efi-modules
Однако, если у вас отсутствуют необходимые файлы, это не поможет решить проблему.
-
Проверка наличия модуля
x86_64-efi
: Командаdnf provides /usr/lib/grub/x86_64-efi
была полезной, чтобы найти необходимый пакет. Установка пакета:dnf install grub2-efi-x64-modules
может устранить проблему с отсутствием модуля.
Дополнительные действия
Если после установки модуля GRUB ошибка сохраняется, рассмотрите следующие шаги:
-
Проверка режима загрузки: Убедитесь, что ваш сервер загружается в режиме UEFI. Это можно проверить командой:
ls /sys/firmware/efi
Если директория не существует, то ваша система работает в режиме BIOS, и вы должны установить GRUB для BIOS.
-
Загрузка
efivarfs
: Если вы получили ошибку с переменными EFI, убедитесь, что модульefivarfs
загружен:modprobe efivarfs
Затем смонтируйте его:
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
-
Содержимое образа: Вы можете использовать загрузочный ISO другой системы, как Artix Linux, чтобы скопировать недостающие модули. Например:
mkdir /tmp/axi && mount artix-base-runit-20201128-x86_64.iso /tmp/axi mkdir /tmp/rfs && mount /tmp/axi/LiveOS/rootfs.img /tmp/rfs cp /tmp/rfs/usr/lib/grub/x86_64-efi /usr/lib/grub/x86_64-efi -r
-
Восстановление предыдущих обновлений: Если проблема возникла после обновления, проверьте историю
dnf
илиyum
, чтобы найти и отменить проблемные обновления.
Заключение
Ошибка с отсутствием модуля modinfo.sh
может быть устранена путем установки необходимых пакетов и подтверждения режима загрузки. С помощью приведенных выше шагов вы сможете решить проблему и настроить загрузчик GRUB для вашей системы Fedora 31 и Ubuntu 18.04. Если проблемы сохраняются, стоит обратиться к сообществу пользователей или на специализированные форумы, где можно получить помощь от опытных администраторов.