我在计算机上安装了 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
希望这意味着它不限于当前的内核,因为那有点无用。