grub2-install Ошибка: modinfo.sh отсутствует – Попробованные общие решения

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

Я знаю, что это довольно распространенная проблема, но я попробовал множество распространенных решений (перечисленных ниже) безуспешно.

Базовая настройка: я настраиваю двойную загрузку 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.

Несмотря на все это, в моем каталоге /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 указывает на то, что необходимые пакеты могут быть не установлены или были неправильно установлены.

Разбор популярных решений

  1. Использование команды grub2-install: Вы пробовали использовать команду с дополнительными параметрами:

    grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub2

    Это правильный подход, однако если модуль не установлен, это не приведет к успеху.

  2. Переустановка пакетов GRUB: Вы также использовали следующие команды для переустановки:

    dnf reinstall grub2-efi shim grub2-tools

    и

    dnf install grub2-efi-modules

    Однако, если у вас отсутствуют необходимые файлы, это не поможет решить проблему.

  3. Проверка наличия модуля x86_64-efi: Команда dnf provides /usr/lib/grub/x86_64-efi была полезной, чтобы найти необходимый пакет. Установка пакета:

    dnf install grub2-efi-x64-modules

    может устранить проблему с отсутствием модуля.

Дополнительные действия

Если после установки модуля GRUB ошибка сохраняется, рассмотрите следующие шаги:

  1. Проверка режима загрузки: Убедитесь, что ваш сервер загружается в режиме UEFI. Это можно проверить командой:

    ls /sys/firmware/efi

    Если директория не существует, то ваша система работает в режиме BIOS, и вы должны установить GRUB для BIOS.

  2. Загрузка efivarfs: Если вы получили ошибку с переменными EFI, убедитесь, что модуль efivarfs загружен:

    modprobe efivarfs

    Затем смонтируйте его:

    mount -t efivarfs efivarfs /sys/firmware/efi/efivars
  3. Содержимое образа: Вы можете использовать загрузочный 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
  4. Восстановление предыдущих обновлений: Если проблема возникла после обновления, проверьте историю dnf или yum, чтобы найти и отменить проблемные обновления.

Заключение

Ошибка с отсутствием модуля modinfo.sh может быть устранена путем установки необходимых пакетов и подтверждения режима загрузки. С помощью приведенных выше шагов вы сможете решить проблему и настроить загрузчик GRUB для вашей системы Fedora 31 и Ubuntu 18.04. Если проблемы сохраняются, стоит обратиться к сообществу пользователей или на специализированные форумы, где можно получить помощь от опытных администраторов.

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

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