教你如何让 Ubuntu 记住正确的内核启动

技术问题

教你如何让 Ubuntu 记住正确的内核启动

2025-03-11 09:32


教你如何让 Ubuntu 记住正确的内核启动

                                            




最近遇到一个棘手的问题:服务器重启后无法正常启动,排查后发现是默认加载的内核有问题。手动选择某个内核可以进入系统,但每次重启后,系统仍然尝试使用故障内核,导致无法自动进入正确的环境。

网上很多方法建议直接修改 /etc/default/grub,但如果操作失误,可能会让系统无法启动。因此,我找到了一个更安全、更简单的方法,让 Ubuntu 自动记住上次成功启动的内核,避免每次都要手动选择。

 

1. 先确认当前系统使用的内核

在更改默认内核之前,先确认当前正在运行的内核版本:

uname -r

示例输出:

5.15.0-43-generic

这表明系统当前使用的是 5.15.0-43-generic 内核。

 

2. 查看所有已安装的内核

Ubuntu 可能安装了多个内核版本,我们可以通过以下命令查看所有可用的内核:

dpkg --get-selections | grep linux-image

示例输出:

linux-image-5.13.0-30-generic   deinstall

linux-image-5.13.0-52-generic   deinstall

linux-image-5.15.0-41-generic   install

linux-image-5.15.0-43-generic   install

linux-image-generic-hwe-20.04   install

分析输出:

标记 install 的是当前系统可用的内核。

标记 deinstall 的表示这些内核已经被卸载或不再使用。

 

3. 让系统自动记住当前启动的内核

通常,我们可以手动修改 /etc/default/grub 来指定默认内核,但如果配置错误,可能会导致系统无法启动。因此,我们采用更安全的方法——让 GRUB 记住上次成功启动的内核,并在下次自动使用它。

3.1 编辑 GRUB 配置

打开 GRUB 配置文件:

sudo nano /etc/default/grub

在文件中添加以下两行:

GRUB_SAVEDEFAULT=trueGRUB_DEFAULT=saved

参数解析:

GRUB_SAVEDEFAULT=true:每次成功启动后,系统都会自动保存当前启动的内核。

GRUB_DEFAULT=saved:让 GRUB 记住上次启动的内核,而不是始终选择默认的 0(第一个内核)。

 

4. 更新 GRUB 并重启

修改完 GRUB 配置后,运行以下命令更新 GRUB 使更改生效:

sudo update-grub

然后重启服务器:

sudo reboot

 

5. 在 GRUB 界面手动选择正确的内核

当系统启动时:

按住 Shift(BIOS 机型)或 ESC(UEFI 机型)进入 GRUB 菜单。

选择 “Advanced options for Ubuntu”。

选择 可以正常启动的内核,然后按 Enter 进入系统。

这次成功启动的内核会被 GRUB 记住,并在下次重启时自动使用,无需每次手动选择。

 

6. 验证默认启动的内核是否生效

启动后,检查当前运行的内核:

uname -r

如果返回的版本是你刚才选择的内核,就说明设置成功了。

 

7. 清理不需要的旧内核(可选)

如果系统中安装了多个旧内核,可以清理掉不再使用的版本,释放磁盘空间。

查看所有已安装的内核:

dpkg --list | grep linux-image

 

卸载旧内核(示例删除 5.13.0-30):

sudo apt remove --purge linux-image-5.13.0-30-generic

 

清理无用的依赖文件:

sudo apt autoremove

 

更新 GRUB 配置:

sudo update-grub

 

8. 如果修改 GRUB 配置导致系统无法启动怎么办?

如果 /etc/default/grub 配置错误,导致系统无法启动,可以使用以下方法恢复:

8.1 进入 GRUB 恢复模式

重新启动系统,在启动时按住 Shift(BIOS 机型)或 ESC(UEFI 机型) 进入 GRUB 菜单。

选择 “Advanced options for Ubuntu”,然后选择一个可用的旧内核进入系统。

8.2 还原 GRUB 配置

进入系统后,打开终端:

sudo nano /etc/default/grub

将 GRUB_DEFAULT=saved 改回默认值:

GRUB_DEFAULT=0

然后更新 GRUB 并重启:

sudo update-grub

sudo reboot


標簽:
  • 教你如何让 Ubuntu 记住正确的内核启动