使用一个磁盘、EFI 双启动 ubuntu 和 gentoo

使用一个磁盘、EFI 双启动 ubuntu 和 gentoo

背景和问题

我想在之前只安装了 ubuntu 的笔记本电脑上试用 gentoo。需要说明的是,ubuntu 安装程序为我配置了整个磁盘。之后,我为 gentoo 做了一个分区。安装 gentoo 的大部分工作都完成了,但我还在设置启动过程。

以下任何一种结果都可以:

  • 使用 ubuntu 作为管理 grub 的操作系统,但也给我启动 gentoo 的选项。
  • 重置所有内容并让 gentoo 成为管理 grub 的操作系统(防止 ubuntu 以某种方式覆盖 gentoo 配置)
  • 让他们以某种方式和平共处

现在我面临的直接问题是,我无法让 gentoo 安装出现在 ubuntu 管理的 grub 中,也无法让 gentoo 替换 ubuntu grub 安装。

磁盘布局

lsblk

nvme0n1     259:0    0 931.5G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0 195.3G  0 part /
├─nvme0n1p3 259:3    0 195.3G  0 part 
└─nvme0n1p4 259:4    0 540.4G  0 part 

或者fdisk -l ...

Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: MKNSSDHL1TB-D8                          
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 081...96C951

Device             Start        End    Sectors   Size Type
/dev/nvme0n1p1      2048    1050623    1048576   512M EFI System
/dev/nvme0n1p2   1050624  410650623  409600000 195.3G Linux filesystem
/dev/nvme0n1p3 410650624  820250623  409600000 195.3G Linux filesystem
...
  • /dev/nvme0n1p1是 EFI 分区并像/boot/efi在 ubuntu 上一样安装(为什么?)
  • /dev/nvme0n1p2是 ubuntu 安装所在的位置
  • /dev/nvme0n1p3是安装 gentoo 的地方

内容/boot

gentoo 安装手册指定在 上挂载 EFI 分区/boot。我照做了,结果就是我的/boot当前包含的内容(从 ubuntu 安装中可以看到)

├── config-5.15.0-50-generic
├── efi
│   ├── config-5.15.69-gentoo
│   ├── config-5.15.69-gentoo.old
│   ├── EFI
│   │   ├── BOOT
│   │   │   ├── BOOTX64.EFI
│   │   │   ├── fbx64.efi
│   │   │   └── mmx64.efi
│   │   ├── EFI
│   │   │   └── gentoo
│   │   │       └── grubx64.efi 
│   │   ├── gentoo
│   │   │   └── grubx64.efi
│   │   └── ubuntu
│   │       ├── BOOTX64.CSV
│   │       ├── grub.cfg
│   │       ├── grubx64.efi
│   │       ├── mmx64.efi
│   │       └── shimx64.efi
│   ├── grub
│   │   ├── fonts
│   │   │   └── unicode.pf2
│   │   ├── grub.cfg
│   │   ├── grubenv
│   │   ├── locale
│   │   │   ├── ast.mo
...
│   │   │   └── zh_TW.mo
│   │   ├── themes
│   │   │   └── starfield
│   │   │       ├── blob_w.png
...
│   │   │       └── theme.txt
│   │   └── x86_64-efi
│   │       ├── acpi.mod
...
│   │       └── zstd.mod
│   ├── initramfs-5.15.69-gentoo.img
│   ├── System.map-5.15.69-gentoo
│   ├── System.map-5.15.69-gentoo.old
│   ├── vmlinuz-5.15.69-gentoo
│   └── vmlinuz-5.15.69-gentoo.old
├── grub
│   ├── fonts
│   │   └── unicode.pf2
│   ├── gfxblacklist.txt
│   ├── grub.cfg
│   ├── grubenv
│   ├── locale
│   │   ├── en_AU.mo
│   │   ├── en_CA.mo
│   │   ├── en_GB.mo
│   │   └── [email protected]
│   ├── unicode.pf2
│   └── x86_64-efi
│       ├── acpi.mod
...
│       └── zstd.mod
├── initrd.img -> initrd.img-5.15.0-50-generic
├── initrd.img-5.15.0-47-generic
├── initrd.img-5.15.0-48-generic
├── initrd.img-5.15.0-50-generic
├── initrd.img.old -> initrd.img-5.15.0-48-generic
├── memtest86+.bin
├── memtest86+.elf
├── memtest86+_multiboot.bin
├── System.map-5.15.0-47-generic
├── System.map-5.15.0-48-generic
├── System.map-5.15.0-50-generic
├── vmlinuz -> vmlinuz-5.15.0-50-generic
├── vmlinuz-5.15.0-47-generic
├── vmlinuz-5.15.0-48-generic
├── vmlinuz-5.15.0-50-generic
└── vmlinuz.old -> vmlinuz-5.15.0-48-generic

17 directories, 674 files

我认为/boot/efi/EFI/EFI/gentoo当我尝试在/boot/efigentoo 端复制安装启动分区时发生了这种情况。我很确定那不是正确的做法...

os-prober在两个操作系统上都安装并禁用了。当我在两边运行 grub-update 和 grub-install 命令时,它们都报告看到了另一个操作系统,因此两个操作系统都知道对方的存在。所有命令都报告成功,没有失败,没有警告。我被难住了。

我就是无法让 gentoo 出现在启动时显示的实际 grub 菜单上。

编辑:输出update-grub

Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-50-generic
Found initrd image: /boot/initrd.img-5.15.0-50-generic
Found linux image: /boot/vmlinuz-5.15.0-48-generic
Found initrd image: /boot/initrd.img-5.15.0-48-generic
Found linux image: /boot/vmlinuz-5.15.0-47-generic
Found initrd image: /boot/initrd.img-5.15.0-47-generic
Memtest86+ needs a 16-bit boot, that is not available on EFI, exiting
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Gentoo Linux on /dev/nvme0n1p3
Adding boot menu entry for UEFI Firmware Settings ...
done

编辑:os-prober 部分/boot/grub/grub.cfg

显然 os-prober 并不能令人信服地让 grub 相信我需要启动另一个操作系统。

### BEGIN /etc/grub.d/30_os-prober ###

### END /etc/grub.d/30_os-prober ###

答案1

我也有过同样的经历问题具有 Arch 和 Ubuntu 双启动。Grub 仅在 Ubuntu 中配置。我没有在 Arch 上安装 grub。

运行起来的问题update-grub是,Ubuntu认为其他操作系统添加的内核是自己的内核,所以将它们设置为启动到Ubuntu。

对我来说,解决方案是仅为 Ubuntu 内核和映像设置启动分区,并在其自己的分区中设置 Arch Linux 的内核和映像。

在此之后,我让他们两人在自己的环境中创建自己的内核和图像。

最后,grub-customizer我手动添加了 Arch Linux 选项。(复制 Ubuntu 选项并更改分区 UUID 和图像路径有效)

相关内容