背景和问题
我想在之前只安装了 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/efi
gentoo 端复制安装启动分区时发生了这种情况。我很确定那不是正确的做法...
我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 和图像路径有效)