1

Я пытаюсь сделать свою собственную Multiboot-USB-флешку с пользовательской конфигурацией GRUB2. Я в основном следовал инструкциям из https://wiki.archlinux.org/index.php/Multiboot_USB_drive, чтобы установить GRUB2 на USB-накопитель в режиме EFI:

  • Флешка формата, имеющая один раздел EFI (100 МБ) и раздел EXT4
  • смонтировать разделы в каком-то месте
  • Выполнение grub-install --target=x86_64-efi --recheck --removable --efi-directory=/EFI_MOUNTPOINT --boot-directory=/DATA_MOUNTPOINT/boot

Итак, у меня есть EFI-раздел, включающий grub.cfg

search.fs_uuid <uuid> root hdX,gptY 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

и загрузочный раздел с одной папкой /boot /grub, содержащей

  • шрифты (папка)
  • локаль (папка)
  • x86_64-efi (папка)
  • grubenv (файл)

Это работает настолько, насколько я могу записать свой собственный файл grub.cfg в /boot /grub, содержащий несколько пунктов меню, и я могу загружаться с этих записей. Но я не могу загрузить любые модули. Если я введу в командной строке, например, набрав

insmod ntfs

абсолютно ничего не делает. Нет сообщений об ошибках или чего-то подобного, модуль просто не загружается (проверяется с помощью lsmod). Я также пробовал абсолютную адресацию, как

insmod (hdX,gptY)/boot/grub/x86_64-efi/ntfs.mod

с тем же результатом. Путь правильный, потому что, например, я могу вывести .mod-файл на стандартный вывод.

Что я на самом деле могу сделать, это удалить модули. Например

rmmod btrfs
rmmod btrfs

выводит сообщение об ошибке только во второй строке, поэтому модуль btrfs удаляется, что подтверждается выводом lsmod. Но печатать (когда btrfs уже удален)

insmod btrfs (or absolute addressing like above)
rmmod btrfs

приводит к сообщению об ошибке в строке 2, поэтому первая строка, очевидно, не имела никакого эффекта.

У вас есть идеи, что происходит не так? Я даже пытался скопировать папку с модами в EFI-раздел, но это не помогло ...

заранее спасибо

2 ответа2

1

Я пробовал несколько разных вариантов "мультизагрузочной USB". Мне нравится этот, потому что он динамический, все, что вам нужно сделать, это добавить ваши файлы ISO, и он найдет новый файл ISO и добавит его в меню. Нет настройки меню GRUB. У меня были проблемы с Linux Mint Debian Edition 3, но он работает с этим. Вы всегда можете посмотреть на его сценарии, чтобы увидеть, как он работает.

Удачи.

вот сайт:

https://github.com/mpolitzer/grub-iso-multiboot

0

Хорошо, я только что узнал, что это вызвано Secure Boot. Согласно https://forums.opensuse.org/showthread.php/531587-is-GRUB-deliberately-broken-in-openSUSE

Если включена безопасная загрузка, то grub2-efi внутренне отключает "insmod", чтобы предотвратить нарушения безопасной загрузки. И "grub2" был загружен из "grub.efi" в ваш раздел EFI, который уже предварительно загрузил обычно необходимые модули. Кроме того, "linux" не разрешен, если включена безопасная загрузка - нужно использовать "linuxefi" (который проверяет подписи).

И grub-install --help дает

--no-uefi-secure-boot: не устанавливать образ, который можно использовать с безопасной загрузкой UEFI, даже если система в данный момент запускается с его использованием. Эта опция доступна только на EFI.

Таким образом, если ваша текущая машина была запущена с безопасной загрузкой, grub-install установит эту версию GRUB, и вы не сможете вставить какие-либо модули. Как ни странно, в моем случае GRUB был загружен модуль "linux", но не модуль "linuxefi". В любом случае, вот моя обновленная настройка:

  • Форматировать флешку, имеющую один раздел EFI (100 МБ) и раздел EXT4 (как раздел данных для всего, что не связано с GRUB)
  • Смонтировать раздел EFI
  • Выполнить grub-install --target=x86_64-efi --recheck --removable --no-uefi-secure-boot --efi-directory=/EFI_MOUNTPOINT --boot-directory=/EFI_MOUNTPOINT/boot

Я не могу отключить безопасную загрузку на своем компьютере, но отмечаю .efi-файлы как безопасные. Используя эту настройку (и маркировку /EFI /BOOT /BOOTX64.EFI как безопасный в компьютерах (EFI) работал на меня, и GRUB теперь полностью функционален. Использование --boot-directory=/DATA_MOUNTPOINT/boot как в моей первоначальной установке, привело к сбою GRUB и переходу в режим восстановления .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .