Ubuntu显示No operation system found
1.当前问题:
更新后,选择新内核(6.8.0-79)启动时显示“no operation system found”,而旧内核(6.8.0-78)可以正常工作。
2.原因:
新内核的引导文件缺失或损坏。当更新安装新内核(6.8.0-79)时,这个过程主要做了三件事:
- 将新内核的镜像文件(
vmlinuz-6.8.0-79-generic
)放入/boot
分区。 - 为新内核生成对应的初始内存盘镜像(
initrd.img-6.8.0-79-generic
),这个文件包含了启动初期所需的驱动和模块。 - 更新 GRUB 引导加载程序的配置文件,将新内核添加到启动菜单中。
错误 “no operation system found” 通常意味着 GRUB 找到了菜单项,但菜单项所指向的实际文件(特别是 initrd.img
)不存在或者损坏了。可能的原因包括:
- initrd 镜像未成功生成或已损坏:这是最常见的原因。在更新内核时,
update-initramfs
命令可能因某种原因(如磁盘空间不足、软件包依赖问题、突然断电等)执行失败,导致initrd.img-6.8.0-79-generic
这个关键文件没有正确创建。 - GRUB 配置错误:虽然概率较低,但 GRUB 的配置文件 (
grub.cfg
) 可能被错误地更新,指向了错误的内核文件路径。 - /boot 分区空间不足:如果
/boot
是一个独立的分区并且空间已满,新内核的文件可能无法完全写入,导致文件不完整。
3.解决方案:
下列方法的前提:可以使用旧内核(6.8.0-78)正常进入系统
步骤 1:使用旧内核启动系统
首先,在 GRUB 菜单的“advanced options”中,选择 Ubuntu, with Linux 6.8.0-78-generic
正常进入系统。
步骤 2:重新生成新内核的引导文件
打开终端(Ctrl+Alt+T),执行以下命令来手动为问题内核(6.8.0-79)重新生成 initrd
镜像(这里需要把问题内核的版本替换为实际情况中的版本)
sudo update-initramfs -c -k 6.8.0-79-generic
-c
代表创建新的 initramfs。-k
指定要操作的内核版本。
然后,更新 GRUB 配置:
sudo update-grub
步骤 3:检查并清理 /boot 分区
如果/boot 分区空间使用接近100%,需要清理一些旧的、不再使用的内核文件来释放空间。
检查 /boot
分区的空间使用情况:
df -h /boot
使用以下命令安全地移除旧内核(系统会自动保留当前正在使用的内核和最新内核):
sudo apt autoremove --purge
完成后,再次运行 sudo update-grub
。
步骤 4:重启验证
完成上述操作后,重启电脑:
sudo reboot
在重启后的 GRUB 菜单中,再次尝试选择最新的 Ubuntu, with Linux 6.8.0-79-generic
选项,应该就能正常进入系统了。
4.如果问题依旧?
如果按照上述步骤操作后,新内核仍然无法启动,那么很可能是新内核本身与硬件存在兼容性问题。在这种情况下,就继续使用旧内核拉倒吧。静静等待下一次内核更新。
当然了如果你比较厉害,你可以彻底移除问题内核并重新安装:
sudo apt remove --purge linux-image-6.8.0-79-generic
sudo apt install linux-image-generic
sudo update-grub
5.拓展知识:
ubuntu系统启动过程中,进入advanced option中显示四个内核选项,分别是什么意思?
以我的情况为例:
Ubuntu, with Linux 6.8.0-79-generic
这是使用 6.8.0-79 这个最新版本内核的正常启动模式。您图片中这个选项前面有星号*
,表示它是当前默认选中的启动项。系统会使用这个内核正常加载所有服务和图形界面。Ubuntu, with Linux 6.8.0-79-generic (recovery mode)
这是上面 6.8.0-79 新内核的恢复模式。启动后不会进入图形桌面,而是会进入一个特殊的恢复菜单,用于解决系统问题。Ubuntu, with Linux 6.8.0-78-generic
这是使用旧版本 6.8.0-78 内核的正常启动模式。如果最新的 79 号内核因为某种原因(如驱动程序不兼容、系统更新后出错)导致无法启动或运行不稳定,您可以选择这个选项,使用旧版内核正常启动系统。这通常能解决由于新内核引起的问题。Ubuntu, with Linux 6.8.0-78-generic (recovery mode)
这是旧版本 6.8.0-78 内核的恢复模式。用途与第二个选项相同,只是它基于旧版内核。
为什么会有多个内核?
Ubuntu 在通过软件更新管理器安装新的内核更新时,通常会保留旧版本的内核。这是一种安全措施。当更新到新内核后,如果发现系统有硬件不兼容、无法启动、程序崩溃等问题,可以在启动时选择进入“advanced option”,然后使用旧版本的内核正常启动系统,从而绕过问题。