Linux 内核 GRUB/boot 问题?

Linux 内核 GRUB/boot 问题?

我正在使用一个仅与较旧的 Linux 内核版本兼容的特定软件包。通过以下命令安装旧版本后

$ sudo apt-get install linux-image-3.19.0-49-generic \
    linux-headers-3.19.0-49 linux-headers-3.19.0-49-generic

我重新启动,但无法打开 GRUB GUI 屏幕。在网上查了一下,我发现了这个:

我没有使用数字来 pick GRUB_DEFAULT,而是使用了以下建议:

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 3.19.0-49-generic"

请注意,我在编辑之前创建了备份/etc/default/grub。启动时,这次机器使用正确的内核启动,但它进入了看起来像终端的地方,但没有键盘响应。看到这一点,我决定恢复到原始内核,但它没有在 GRUB GUI 上列出(它现在由于某种原因可以工作,或者只是可能没有足够快地按下密钥)。

相反,我在 GUI 上只有 Ubuntu 和高级选项。因此我能够进入 grub 提示符,即:

grub>

我觉得这应该是一个非常直接的修复,要么让旧内核正确启动,要么启动原始内核。要么有效。

然而,我对 GRUB 命令行的经验或知识绝对为零。任何帮助将不胜感激。

答案1

就我个人而言,在开始编辑 grub.cfg 文件之前,我会尝试先从 GRUB 命令行启动它。从 CLI 启动后,您就会知道要在文件中放入哪些正确设置;-)

在 GRUB 命令行中,首先键入insmod ext2以安装 ext2 文件系统模块。然后,键入ls,这将显示您有哪些可用分区以及 GRUB 对这些分区使用的名称(与 Linux 不同)。

获得该信息后,请输入:

root=<insert GRUB path to /boot partition>
linux <insert path to relevant vmlinuz file> root=<insert Linux path to root partition> ro <insert any other kernel boot parameters you want>
initrd <insert path to initrd file>
boot

它应该使用该内核启动。例如,在我的笔记本电脑上,我会输入:

root=(ahci0,gpt2)
linux /vmlinuz-4.13.1 root=/dev/sda4 ro
initrd /initrd.img-4.13.1
boot

然后,如果您想将其添加到 GRUB 启动菜单中,只需将这些命令添加到 grub.cfg 文件中即可。

(请注意,我假设您正在使用 initrd,因为您正在使用 Ubuntu)

相关内容