我正在尝试使用自定义 GRUB2 配置制作自己的 Multiboot-USB 棒。我基本上遵循了https://wiki.archlinux.org/index.php/Multiboot_USB_drive以 EFI 模式在 USB 驱动器上安装 GRUB2:
- 格式化存储棒,具有一个 EFI 分区(100MB)和一个 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 文件 cat 到标准输出。
我实际上能做的是删除模块。例如
rmmod btrfs
rmmod btrfs
导致第二行出现错误消息,因此模块 btrfs 被删除,lsmod 输出证实了这一点。但输入(当 btrfs 已被删除时)
insmod btrfs (or absolute addressing like above)
rmmod btrfs
导致第 2 行出现错误消息,因此第一行显然没有效果。
你知道哪里出了问题吗?我甚至尝试将 mod 文件夹复制到 EFI 分区,但没有成功……
提前致谢
答案1
我尝试了几种不同的“多启动 USB”选项。我喜欢这个,因为它是动态的,你只需添加 ISO 文件,它就会找到新的 ISO 文件并将其添加到菜单中。无需配置 GRUB 菜单。我在使用 Linux Mint Debian Edition 3 时遇到了麻烦,但这个却可以正常工作。你可以随时查看他的脚本来了解它的工作原理。
祝你好运。
网站如下:
答案2
好的,我刚刚发现这是由安全启动引起的。根据https://forums.opensuse.org/showthread.php/531587-is-GRUB-deliberately-broken-in-openSUSE
如果启用了安全启动,则 grub2-efi 会在内部禁用“insmod”,以防止违反安全启动。并且“grub2”已从 EFI 分区中的“grub.efi”加载,该分区已预加载通常需要的模块。此外,如果启用了安全启动,则不允许使用“linux”——必须使用“linuxefi”(检查签名)。
grub-install --help 的结果
--no-uefi-secure-boot:不安装可用于 UEFI 安全启动的映像,即使系统当前已使用它启动。此选项仅在 EFI 上可用。
因此,如果您当前的计算机是用安全启动启动的,那么 grub-install 会安装该版本的 GRUB,并且您无法插入任何模块。奇怪的是,在我的情况下,GRUB 加载了模块“linux”,但没有加载模块“linuxefi”。无论如何,这是我更新后的设置:
- 格式化记忆棒,有一个 EFI 分区(100MB)和一个 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 中将 /EFI/BOOT/BOOTX64.EFI 标记为安全)对我来说很有效,GRUB 现在完全可以正常工作。--boot-directory=/DATA_MOUNTPOINT/boot
在我的原始设置中使用类似设置会导致 GRUB 崩溃并进入救援模式。
考虑到如今安全启动有多么普遍,我发现整个 GRUB2 手册中没有提到这种行为,这很烦人。
答案3
您可以使用超级 UEFI 安全启动盘这是专门为这种情况设计的。它包含经过修改的引导加载程序,不仅可以在安全启动模式下加载模块,还可以劫持文件验证功能来加载任意不受信任的 EFI 文件。