我在 上安装了 Gentoo Linux /dev/sda2
,作为/dev/sda1
引导分区(安装 GRUB 文件的地方)。/dev/sda
有一个MBR分区表。/dev/sdb1
是一个数据分区(我在其中存储需要备份的文件,有点像主分区),也是/dev/sdb2
我安装 Arch Linux 的地方。/dev/sdb
有一个 GPT 分区表。 Gentoo 可以从 GRUB 正常启动,我是从 Gentoo 安装的。拱门不是。/boot/grub/grub.cfg
是https://paste.pound-python.org/show/2TXi8NeWbhoaWsifKeMM/。这是该文件的 Arch Linux 部分:
menuentry 'Arch Linux (on /dev/sdb2)' --class gnu-linux --class gnu --class os $menuentry_i
d_option 'osprober-gnulinux-/boot/vmlinuz-linux--1db96616-a88a-42a6-9283-a57016bba4c9' {
insmod part_gpt
insmod ext2
set root='hd1,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2 1db96616-a88a-42a6-9283-a57016bba4c9
else
search --no-floppy --fs-uuid --set=root 1db96616-a88a-42a6-9283-a57016bba4c9
fi
linux /boot/vmlinuz-linux root=UUID=1db96616-a88a-42a6-9283-a57016bba4c9 rw quiet
initrd /boot/initramfs-linux.img
}
但是当我尝试启动它时,出现 hd1,gpt2 不存在的错误。这样您就可以看到我提到的分区存在于此处,这就是ls /dev/sd*
返回的内容:
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdb2
如果您需要更多信息来帮助解决此问题,请告诉我如何为您获取。
我尝试过重新安装 GRUB,grub-install --target=x86_64-efi --efi-directory=/boot /dev/sda
然后重新运行grub-mkconfig -o /boot/grub/grub.cfg
.但这个问题仍然存在。
编辑:现在这只是令人困惑......我刚刚使用 gdisk 将 /dev/sda 上的 MBR 转换为 GPT,现在gdisk -l /dev/sda
返回:
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 1953525168 sectors, 931.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 8AD72DC5-C104-4524-8C18-52759DC6C784
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2957 sectors (1.4 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 264191 128.0 MiB EF00 EFI System
2 264192 1953524191 931.4 GiB 8300 Linux filesystem
我重新安装了 GRUB(在 GPT 更改后需要它,否则我无法启动硬盘)grub-install --target=x86_64-efi --efi-directory=/boot /dev/sda
,然后重新生成我的 GRUB 配置文件,最后重新启动并尝试启动 Arch Linux,但再次失败并出现相同的错误。谷歌搜索建议我不同的分区表可能是问题所在,但似乎更改分区表不起作用。我的新 GRUB cfg 文件是这里。
EDIT2:我现在已经删除了 /dev/sdb1 并将其替换为 ESP 分区,然后在我的 Arch Linux 分区运行上安装了 GRUB grub-install --target=x86_64-efi --efi-directory=/boot /dev/sdb && grub-mkconfig -o /boot/grub/grub.cfg
。我仍然无法启动 Arch Linux。我按下了 Esc 并检查了启动选项,虽然我的实时 USB 显示了启动菜单,我的 Gentoo 安装也显示了启动菜单,但我的 Arch Linux 安装却没有显示。我还更新了 Gentoo 的 GRUB 安装及其配置,但仍然无法使用 Gentoo 启动 Arch(错误与以前完全相同)。
答案1
在你的 Gentoo 系统中你应该有这个文件/etc/grub.d/40_custom
。您可以向此文件添加一个菜单条目以引用 Arch 的 grub.cfg。像这样的东西:
menuentry 'Arch Linux' {
set root='hdX,msdosX'
configfile /boot/grub/grub.cfg
}
该root
条目需要指向包含 Arch 的分区/boot
。然后,运行grub-mkconfig -o /boot/grub/grub.cfg
重新生成Gentoo的grub.cfg。
答案2
我意识到这是一个老问题,但仍然值得一个最新的答案
磁盘布局
让我确保我的说法正确:
/dev/sda1
对应于/boot
您遵循的 Gentoo 手册建议单独分区/dev/sda2
包含你的 Gentoo 安装的根目录,即/
/dev/sdb1
是操作系统之间的可共享分区/dev/sdb2
你的 Arch 安装是哪个不包含一个单独的/boot
分区
EFI分区
既然你没有提到安装Windows,我们可以忽略这个警告。如果未来的读者使用 Windows,请阅读警告
- 除了 Windows 之外,UEFI 规范非常适合跨多个磁盘的多个 ESP 分区
- 每个操作系统都应将其
.efi
文件安装在单独的目录中,即/boot/EFI/arch/bootx64.efi
- 虽然 UEFI 不在乎,但从个人经验来看,我建议使用一个且仅一个 EFI 分区,除非使用像这样的真正的启动管理器酶标仪
GRUB
- 选择您想要管理的 GRUB 副本(保存此选择供以后使用)。
- 使用救援磁盘或操作系统安装磁盘来安装新操作系统(在您的情况下为 Arch)
- 列出所有磁盘使用
gptdisk
- 为您的 arch
/boot
目录创建一个挂载点,用于挂载 Gentoo /boot (如果这只是 grub 更新,请跳过此步骤) 实际上,Gentoo 和 Arch 现在将共享相同的引导目录。 - 根据步骤 3 的输出,挂载现有的 EFI 分区:
mount -t vfat /dev/sda1/EFI /boot/EFI
- 使用选项将 Arch 的 Grub 安装程序指向您在步骤 5 中安装的目录
--efi-directory
,即grub-install --target=x86_64-efi --efi-directory=/boot/EFI
第 6 步应该完成,您将获得以下设置:
/boot/EFI/gentoo/
/boot/EFI/arch/
每个目录应包含每个操作系统的 EFI 存根加载程序
引导到您在 #1 中选择的操作系统,然后运行适当的命令来更新 GRUB(您希望os-prober
运行该命令,这会将新操作系统添加到菜单中。您可以选择更新两个 GRUB,但这相当多余