jig*_*jer 5 dual-boot boot-loader grub2 uefi
术语:ESP = 我的 FAT32 EFI 分区。
我想要:
/
)上链式加载另一个 GRUB 引导加载程序。我目前在我的分区上有几个没有安装 GRUB 的发行版。每个都完全安装在自己的 ext4 上/
。我希望他们都有自己的辅助引导程序。我试过的:
迄今为止:
grub-install
和
grub-mkconfig
。测试的启动工程。这意味着我的/boot/grub
文件夹是空的,我的 ESP 不需要在启动期间/之后安装。/boot/efi/
and 中安装第二个 grub /boot/grub/
,但 EFI 部分不会安装,grub-install
抱怨目标不是 EFI 分区。但是因为我已经安装了主 GRUB,所以我的辅助 GRUB 在 ext4 rootfs 上应该没有关系吧?Grub 可以读取 ext4。我也试过这个--force
选项。所以看来我需要找到某种方法来说服安装程序可以grubx64.efi
在/boot/EFI
......
如果有人对我如何安装主 GRUB 感到好奇,那只是grub-install
对我的 ESP使用正确选项的问题。
Emm*_*osa 13
还有另一种方法:您可以创建一个菜单项,告诉 GRUB 加载另一个辅助 grub.cfg,例如来自另一个 Linux 发行版的 grub.cfg。
例如,我从 Gentoo Linux 开始,从中我将 GRUB2 安装到 MBR(机器对于 EFI 来说太旧了)。
然后我安装了 NixOS,我将其配置为在它自己的/boot(与 Gentoo 的/boot分开)中生成 grub.cfg,但没有安装 GRUB。
澄清grub-install
一下,是从 Gentoo 执行的,而不是从 NixOS 执行的。
接下来,为了能够启动 NixOS,我将它添加到Gentoo 的/etc/grub.d/40_custom中:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'NixOS' --class gnu-linux --class gnu --class os $menuentry_id_option 'nixos-0aca58bc-8fdb-4a07-aa2f-56406bcf19b7' {
set root='hd0,msdos4'
configfile /nixos/root/boot/grub/grub.cfg
}
Run Code Online (Sandbox Code Playgroud)
关键是configfile /nixos/root/boot/grub/grub.cfg
线。它告诉 GRUB 加载另一个 grub.cfg。然后我grub-mkconfig
从 Gentoo运行以应用更改。
现在,当我启动并选择NixOS 时,整个 GRUB 界面都会刷新以反映 NixOS grub.cfg,我可以从中启动操作系统。与链式加载不同,此配置使用 GRUB 的单一安装;它只是使用第二个配置。
我已经找到了如何.efi
在我/
的每个. 从主配置引用辅助 GRUB 链加载器很简单:
menuentry "GRUB chainloader" {
#Load grub on partition 7 of a gpt formatted drive.
#It will reference its own modules and config.
chainloader (hd0,gpt7)/path/to/bootloader/on/myOS/core.efi
}
Run Code Online (Sandbox Code Playgroud)
为了创建这个辅助.efi
我使用,grub-mkimage
因为grub-install
没有让我写入非 FAT 文件系统。语法非常挑剔,如果您使用错误的路径,它不会出错,因此请仔细检查参数:
grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi '--prefix=(hd0,gpt7)/boot/grub' ext2 part_gpt
Run Code Online (Sandbox Code Playgroud)
我尝试忽略 GPT 或 ext2 文件系统模块,但这不起作用,这两个模块是我系统的绝对最低要求(ext2 适用于 ext2/3/4)。
前缀目录是辅助引导加载程序查找其模块文件夹和配置文件的地方。因此,我/boot/grub/
为每个包含x86_64-efi/
文件夹的操作系统手动创建了一个(复制自/usr/lib/grub)
,grub.cfg
我可以在grub-mkconfig
禁用操作系统探测的情况下进行修改(或仅手动编辑它)。
我最初在没有 GRUB 的情况下安装了每个操作系统。这种方法允许我使用第一个操作系统或带有 GRUB 的 LiveCD 在所有操作系统上安装辅助 GRUB 引导加载程序。我可以独立更改每个操作系统的启动配置,没有污染风险,因为从未安装 ESP。
归档时间: |
|
查看次数: |
18812 次 |
最近记录: |