我三次启动 Arch Linux、Gentoo Linux 和 NixOS。问题是这些操作系统,特别是它们的 GRUB2 引导加载程序版本,彼此之间不能很好地配合。如果我使用 NixOS 设置引导加载程序,那么 Gentoo 和 NixOS 条目可以正常引导,但 GRUB2 配置中的 Arch Linux 条目实际上引导 NixOS 而不是 Arch Linux。如果我从 Arch Linux 设置 GRUB2,则 NixOS 无法识别,但 Gentoo 可以(已安装 os-prober)。我的分区是这样的:
/dev/sda
- /dev/sda1 - my EFI partition
- /dev/sda2 - my Gentoo partition
- /dev/sda3 - my Arch Linux partition
- /dev/sda4 - my NixOS partition
- /dev/sda5 - my swap partition
/dev/sdb
- /dev/sdb1 - my data partition on which I store config files, documents, etc.
/dev/sda 有一个带有保护性 MBR(如果相关)的 GPT 分区表。
所以我的问题是,有没有办法让 Arch Linux 的 GRUB2 引导加载程序识别并为 NixOS 创建适当的引导条目?或者如果没有,有没有办法让 NixOS 的引导加载程序为 Arch Linux 创建适当的条目?这里是我的configuration.nix 文件并且这里是我的硬件配置.nix 文件。
需要明确的是,当我在其中一个系统上设置 GRUB2 来管理引导加载时,我确保只有该发行版的引导加载程序正在管理它。我从 EFI 分区中删除了其他发行版的引导加载程序文件。例如,当我使用 NixOS 管理引导加载时,我删除了 /boot/EFI/arch 文件夹(其中 EFI 挂载在 /boot 上),并将 Arch Linux 内核映像从 EFI 分区移至 Arch Linux 根分区的 /boot 中文件夹。
编辑:我已经设法让 NixOS几乎正确设置 GRUB2 来运行 Arch。我注意到在 Arch 的 /etc/fstab 中,它仍然在 /boot 上安装 /dev/sda1 ,但它不再是这样了,因为我已经将引导加载程序从 Arch 更改为 NixOS 了。
现在其配置文件的唯一问题是:
initrd /boot/intel-ucode.img
代替:
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
或者:
initrd /boot/intel-ucode.img /boot/initramfs-linux-fallback.img
取决于精确的输入。所以结果是,如果我启动 Arch,它就会陷入内核恐慌。那么如何添加适当的 /boot/initramfs-linux*.img 行而不需要每次都手动编辑该文件呢?
答案1
系统上有多个操作系统管理 GRUB 往往会导致它们在如何配置 GRUB 的问题上互相争斗,包括哪些引导条目在哪里。
最好只让一个系统管理 GRUB。在您的情况下,它将是 nixOS,因为它管理回滚链接的方式。