Grub2 添加新的 Linux 发行版

Grub2 添加新的 Linux 发行版

我在计算机上安装了 Arch Linux,但还在另一个分区 ( /dev/sda5) 上安装了 Slackware。

我想通过文件从 Arch Linux 安装中配置 Grub2 /etc/grub.d/40_custom,以在启动时将 Slackware 添加到菜单列表中。

我在网上搜索了很长一段时间,但没有找到关于我是否也需要在 Slackware 中安装 Grub 以及配置文件中具体写入什么内容的答案。

阅读 grub 的完整文档太长了。

我尝试了以下操作,但在加载 Slackware 期间,我遇到了一个内核恐慌事件,提示类似“无法找到块”:

menuentry "Slackware 14.0" {
        set root='hd0,msdos5'
        echo 'Loading Linux Slackware 14.0 ...'
        linux /boot/vmlinuz root=UUID=xxxXXxx-xx-XXX... ro acpi=off
}

答案1

在我的 Ubuntu 系统上,运行即可grub-mkconfig查找具有新安装的分区。您可以运行(无需手动更改):

grub-mkconfig | diff - /boot/grub/grub.cfg

看看 Arch Linux 是否也能做到这一点。如果是,请运行:

grub-mkconfig -o /boot/grub/grub.cfg

答案2

您看到该错误是因为您有root=UUID=...,但没有 initrd 行。内核没有内置支持root=UUID=....它必须由 initrd 处理。

  • 所以你可以只添加一个 initrd 行。通常,您应该在安装过程中生成一个 initrd。

否则我认为问题出在你的(Slackware)linux 安装上,你需要拯救它。操作系统安装介质通常包括非常方便的救援系统。我强烈建议您在安装操作系统时获取这样的救援系统,并保留它。 (如果您对如何使用救援系统还没有信心,请检查您是否仍然可以访问互联网)。

  • 或者您可以尝试不使用 UUID。相反,直接指定根文件系统的设备节点,例如root=/dev/sda1.您可以在完成引导/救援系统后将 UUID 放回原处。

在您的评论中,您提出了一个有趣的循环依赖。如果该进程需要引导完全相同的内核,如何生成 initrd?但我认为这个要求没有任何意义。 (考虑安装程序、内核升级等)这应该很可能来自匹配的救援系统,或者当从较新的救援系统 chroot 到安装时......

你一定在想mkinitrd_command_generator.sh。我在其他地方看到了为特定内核调用它的示例。

/usr/share/mkinitrd/mkinitrd_command_generator.sh /boot/vmlinuz-generic-2.6.37.6

希望这意味着它不限于当前的内核,因为那有点无用。

相关内容