我安装了多个系统;首先,按时间顺序,是 Windows 10,然后是 Kubuntu 20.04,然后是 Fedora 34 KDE,然后是 KaOS。Fedora 单独安装在第二个驱动器上,具有单独的 EFI,但与 KaOS 共享。
配置如下:
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 739327 737280 360M EFI System
/dev/nvme0n1p2 739328 1001471 262144 128M Microsoft reserved
/dev/nvme0n1p3 1001472 457750527 456749056 217,8G Microsoft basic data
/dev/nvme0n1p4 457750528 459757567 2007040 980M Windows recovery environment
/dev/nvme0n1p5 459757568 500107263 40349696 19,2G Microsoft basic data
/dev/nvme0n1p6 500107264 644737022 144629759 69G Linux filesystem
/dev/nvme0n1p7 644737023 976773134 332036112 158,3G Linux filesystem
Device Start End Sectors Size Type
/dev/sda1 2048 1230847 1228800 600M EFI System
/dev/sda2 251660288 1258293247 1006632960 480G Linux filesystem
/dev/sda3 1258293248 1875384319 617091072 294,3G Microsoft basic data
/dev/sda4 1230848 3327999 2097152 1G Linux filesystem
/dev/sda5 3328000 251660287 248332288 118,4G Linux filesystem
/dev/nvme0n1p1
/dev/nvme0n1p2
是 Windows(安装在上5
)和 Ubuntu(安装在 上nvme0n1p6
) 的 EFI 分区,是 Fedora(和)和 KaOS()/dev/sda1
的 EFI/dev/sda4
5
/dev/nvme0n1p7
这个奇怪的选择与以下事实有关:过去除了 Kubuntu 之外还安装了其他 Linux,使用与 Windows 相同的 EFI,导致 Windows 启动损坏;通过重新安装 Kubuntu 解决了这个问题,将 Windows 添加到了它的启动菜单中;我想避免对 Windows 的这种干扰,因此我在单独的驱动器上安装了 Fedora,它有自己的 EFI,然后,当我在与 Windows 相同的驱动器上安装了 KaOS 时,我选择使用另一个驱动器中的 EFI,并与 Fedora 共享。
安装 KaOS 后其启动菜单(由 运行systems-boot
,而不是grub
)没有显示其他系统。
Fedora 和 Ubuntu 的启动菜单隐藏在固件 UEFI 界面中。Fedora 包含所有系统。kUbuntu 的启动菜单包括 Fedora 之外的所有内容。
我曾尝试使用启动修复将 Fedora 的启动菜单设为默认菜单,因为它是最完整的(通过在 上安装 grub sda1
),但没有“首先启动” Fedora 的选项:因此,我选择了 Kubuntu。结果Kubuntu 的启动菜单成为默认,仅缺少 Fedora。
鉴于 Kubuntu grub 现已控制,我想使用它并将 Fedora 添加到其中。更新 grub 没有帮助。
EDIT-1,根据@oldfred的评论:
EDIT-2,在@oldfred回答之后:
我查看了 Kubuntu grub.cfg 文件,发现 Kubuntu 启动列表是boot/grub/grub.cfg
通过在文件中添加菜单项来确定的。
查看我能找到的 Fedora 自己的 grub.cfg 文件:那里缺少 Fedora 条目,只列出了其余系统。在 Fedora 上的 Grub Customizer 中也只看到这些条目:其自己的启动列表中的 Fedora 条目似乎由其/loader/entries/
1 GB 根 ext4 分区 (sda4) 中的单独文件决定。将这些条目复制到 Kubuntu 的 /boot/efi/loader/entries/ 上没有任何效果。
由于 Kubuntu 的条目中没有 Fedora 自己的模型boot/grub/grub.cfg
,我复制并修改了那里为 KaOS 找到的行 — 通过添加 Fedora 的规范,即 UUID。我不确定格式是否正确,该文件中的 KaOS 格式正是如此,仅调整了发行版名称和 UUID:
menuentry 'Fedora 34 KDE' --class Fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-4834b108-13c9-406c-8a7b-a9c53440283c' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 F4F4-1172
else
search --no-floppy --fs-uuid --set=root F4F4-1172
fi
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=UUID=4834b108-13c9-406c-8a7b-a9c53440283c rw quiet
echo 'Loading initial ramdisk ...'
initrd /initramfs-linux.img
}
这样,Fedora 名称当然就添加到了启动列表中,但是不起作用:
使用分区的 UUID bfrs
( sda5
) 我收到消息:
mount: new/-root: unknown filesystem type ‘btrfs’
为了以防万一,我尝试使用“根” Fedora 分区 () 的 UUID sda4
,然后收到以下消息:
Error: root device mounted successfully but sbin/init does not exist
我认为,正确的做法是添加sda5
分区的 UUID;它是 Fedora 上上述所有三个文件中指定的 UUID。/loader/entries/
看起来 grub 无法识别 btrfs。
我已经安装了使用 Apper 能找到的所有“btrfs”相关文件,大约 30 个包,但还是发生了同样的情况。
編輯-3
从进一步的评论中我明白我不能编辑boot/grub/grub.cfg
,而是编辑文件etc/grub.d/40_custom
并复制其他文件的部分。但我不明白我应该使用哪些文件。除了ext4
-中的文件外,我在 Fedora 自己的分区上找不到与其自己的启动和启动列表中的自己的条目相关的内容/loader/entries
。那么我应该从其中一个中复制吗?
/media/root/651b659a-8fc5-46d6-b291-22b3b523ebaf/loader/entries/a037a4898b9540bfbc52f3f377b2ff4d-5.13.19-200.fc34.x86_64.conf
它是从(即从 Fedora 的 1GB ex4 分区 sda4)复制而来的内容吗:
title Fedora (5.13.19-200.fc34.x86_64) 34 (KDE Plasma)
version 5.13.19-200.fc34.x86_64
linux /vmlinuz-5.13.19-200.fc34.x86_64
initrd /initramfs-5.13.19-200.fc34.x86_64.img
options root=UUID=4834b108-13c9-406c-8a7b-a9c53440283c ro rootflags=subvol=root rhgb quiet
grub_users $grub_users
grub_arg --unrestricted
grub_class kernel
boot/grub/grub.cfg
或者它类似于上面 EDIT-2 下发布的Kubununtu 文件中的 KaOS 条目?
答案1
我曾经安装过 Fedora,但之前它使用 btrfs。但是我在 Ubuntu 中的 grub 条目链式加载或配置文件到 UEFI 启动条目。我将这些添加到 Ubuntu 的 grub 中的 40_custom。UUID 是唯一的,您需要更改为安装的 UUID。要直接启动到 grub
menuentry "Fedora UEFI" {
search --file --no-floppy --set=root F496-1330
chainloader (${root})/efi/fedora/grub.cfg
}
您通常只需将 grub 的启动节从一个安装复制到另一个安装即可。这就是 os-prober 所做的。您可能需要额外的驱动程序 (btrfs) 或 grub2 的 .mod 文件(如 btrfs.mod)才能使其识别不同的格式或配置。如果使用 rEFInd,您必须将 grub 节转换为 refind.conf。配置文件是指向另一个 grub 文件或具有 grub 类型启动节的文件的链接。
menuentry "Fedora UEFI" {
search.fs_uuid a9bd9a65-bc8c-41b1-95b1-2dceb66b2652 root hd1,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
}
使用 40_custom 和自定义菜单
https://help.ubuntu.com/community/Grub2/CustomMenus
配置文件:
https://www.gnu.org/software/grub/manual/grub/grub.html#Multi_002dboot-manual-config
https://ubuntuforums.org/showthread.php?t=2076205&page=54&p=13788092#post13788092