当前位置: 首页 > news >正文

Ubuntu 24.04 内核 Kernel Panic 问题排查与解决流程(第二次出现该问题后,永久性解决)

问题描述

系统更新后重启,出现以下错误:

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

系统无法正常启动。


问题原因分析

错误含义

内核在启动过程中无法找到并挂载根文件系统unknown-block(0,0)表示内核完全不知道根文件系统在哪个块设备上。

启动流程

BIOS/UEFI → GRUB引导 → 加载内核(vmlinuz) + initramfs → 挂载根文件系统 → 启动系统

initramfs是一个临时的迷你文件系统,包含:

  • 磁盘驱动模块(如 NVMe、SATA、virtio 等)
  • 文件系统驱动模块(如 ext4、btrfs)
  • 挂载根分区所需的脚本和工具

根本原因

系统更新过程中initramfs 生成被中断

  1. Ubuntu 推送了内核更新
  2. 更新过程中需要运行update-initramfs为新内核生成对应的 initramfs
  3. 该过程因某种原因中断(提前重启、断电、dpkg 配置脚本出错等)
  4. 新内核的vmlinuz文件已安装,但对应的initrd.img没有生成
  5. GRUB 默认启动最新内核 → 没有 initramfs → Kernel Panic

紧急修复方法

当遇到 Kernel Panic 无法启动时:

  1. 开机后,选择“Advanced options for Ubuntu”
  2. 选择带有(recovery mode)字样的选项(建议选版本号较旧的那个),按回车
  3. 选择network(Enable networking)
  4. 选择dpkg(Repair broken packages)
  5. 系统会开始扫描,如果提示Do you want to continue?,输入Y并回车
  6. 完成后系统重启即可恢复

原理:通过旧内核进入 recovery mode,运行dpkg --configure -a完成被中断的包配置,重新生成缺失的 initramfs。


系统排查流程

第一步:收集系统信息

# 查看系统版本lsb_release-a# 查看当前运行的内核uname-r# 查看已安装的内核和对应的 initramfs 是否齐全ls/boot/vmlinuz-* /boot/initrd.img-*# 查看是否有未完成的包配置sudodpkg--audit

检查要点

  • 每个vmlinuz-*都应该有对应的initrd.img-*
  • dpkg --audit输出应为空(无残留问题)

第二步:检查自动更新配置

# 查看自动更新服务是否在运行systemctl is-enabled unattended-upgrades apt-daily.timer apt-daily-upgrade.timer# 查看自动更新的配置cat/etc/apt/apt.conf.d/20auto-upgrades

第三步:查看内核锁定状态

sudoapt-mark showhold

解决方案:锁定内核,禁止内核自动更新

锁定内核包

sudoapt-mark hold linux-image-generic linux-headers-generic linux-generic

验证锁定

sudoapt-mark showhold

应输出:

linux-generic linux-headers-generic linux-image-generic

效果

  • 内核自动更新:已禁止
  • 其他安全补丁更新:正常进行
  • 不会再因为内核自动更新中断导致 Kernel Panic

手动更新内核流程

以后需要手动更新内核时,执行以下步骤:

# 1. 解锁内核包sudoapt-mark unhold linux-image-generic linux-headers-generic linux-generic# 2. 手动更新(全程盯着,不要中途关机或重启)sudoaptupdate&&sudoaptupgrade# 3. 更新完成后重新锁定sudoapt-mark hold linux-image-generic linux-headers-generic linux-generic

其他可选防护措施

让 GRUB 显示启动菜单

出问题时可以在开机时直接选旧内核进系统:

sudosed-i's/^GRUB_TIMEOUT_STYLE=.*/GRUB_TIMEOUT_STYLE=menu/'/etc/default/grubsudosed-i's/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=5/'/etc/default/grubsudoupdate-grub

添加 apt hook 自动检查 initramfs

每次 apt 更新后自动检查内核是否都有对应的 initramfs:

sudotee/etc/apt/apt.conf.d/99-check-initramfs<<'EOF' DPkg::Post-Invoke { "if ls /boot/vmlinuz-* > /dev/null 2>&1; then for k in /boot/vmlinuz-*; do v=${k#/boot/vmlinuz-}; if [ ! -f /boot/initrd.img-$v ]; then echo '[initramfs-check] 内核 '$v' 缺少 initramfs,正在自动修复...'; update-initramfs -c -k $v; fi; done; fi"; }; EOF

保留足够的旧内核

建议至少保留2 个可用内核,不要手动清理过度:

# 查看已安装的内核数量dpkg--list|greplinux-image|grep"^ii"

环境信息

  • 系统版本:Ubuntu 24.04.1 LTS (noble)
  • 当前内核:6.17.0-19-generic
  • 已安装内核:6.14.0-37-generic、6.17.0-19-generic
  • 解决日期:2026年4月

总结

项目状态
系统当前状态正常,无残留问题
内核 initramfs全部完好
内核自动更新已禁止(apt-mark hold)
其他安全补丁更新正常进行

实际案例

(new_code)myx@myx-ubuntu:~/桌面$ lsb_release-aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu24.04.1 LTS Release:24.04Codename: noble(new_code)myx@myx-ubuntu:~/桌面$uname-r6.17.0-19-generic(new_code)myx@myx-ubuntu:~/桌面$ls/boot/vmlinuz-* /boot/initrd.img-* /boot/initrd.img-6.14.0-37-generic /boot/vmlinuz-6.14.0-37-generic /boot/initrd.img-6.17.0-19-generic /boot/vmlinuz-6.17.0-19-generic(new_code)myx@myx-ubuntu:~/桌面$sudodpkg--audit[sudo]myx 的密码:(new_code)myx@myx-ubuntu:~/桌面$sudodpkg--audit(new_code)myx@myx-ubuntu:~/桌面$sudodpkg--audit(new_code)myx@myx-ubuntu:~/桌面$ systemctl is-enabled unattended-upgrades apt-daily.timer apt-daily-upgrade.timer enabled enabled enabled(new_code)myx@myx-ubuntu:~/桌面$cat/etc/apt/apt.conf.d/20auto-upgrades APT::Periodic::Update-Package-Lists"0";APT::Periodic::Download-Upgradeable-Packages"0";APT::Periodic::AutocleanInterval"0";APT::Periodic::Unattended-Upgrade"1";(new_code)myx@myx-ubuntu:~/桌面$sudoapt-mark showhold(new_code)myx@myx-ubuntu:~/桌面$sudoapt-mark showhold(new_code)myx@myx-ubuntu:~/桌面$sudoapt-mark hold linux-image-generic linux-headers-generic linux-generic linux-image-generic 设置为保留。 linux-headers-generic 设置为保留。 linux-generic 设置为保留。(new_code)myx@myx-ubuntu:~/桌面$sudoapt-mark showhold linux-generic linux-headers-generic linux-image-generic(new_code)myx@myx-ubuntu:~/桌面$'''
http://www.jsqmd.com/news/573441/

相关文章:

  • ai赋能react开发:描述需求即可获得高质量数据可视化组件代码
  • 诗词在线app上线带来的启发和展望
  • 大模型如何“思考”:一文读懂从输入到输出的完整逻辑,小白也能学会收藏!
  • Windows任务栏美化工具TranslucentTB完全指南
  • 用Proteus和Keil C51复刻经典:STC89C51单片机红绿灯仿真全流程(附紧急制动与手动切换)
  • c++编程:多组数据求和
  • APRSPacketLib:嵌入式C库实现APRS协议编解码
  • 谷歌SEO新手入门:以SEO为主、GEO为辅,精准打造高转化内容与用户人群
  • 【51单片机实战指南】从零构建多功能波形发生器:正弦、矩形、三角、锯齿波全解析
  • Tomato-Novel-Downloader:解决小说离线阅读痛点的全场景方案
  • BMP280气压计实战:从硬件接线到数据采集的完整指南(附STM32代码)
  • 【2026年最新600套毕设项目分享】springboot鸣珮乐器销售网站(14301)
  • 希尔排序算法原理与嵌入式应用实践
  • 湖南石材结晶公司
  • OpenClaw+Qwen3-32B内容创作:自动化生成技术博客与配图实践
  • 用AI重新定义中文字体设计:从3000个字符到完整字库的智能飞跃
  • 医疗大数据数据上报失败问题完整排查复盘
  • 混合ai开发新思路:快马生成项目演示云端与d盘本地ollama协同编程
  • 2026年,探秘天水钢筋网片厂家!
  • 【底层重构】C语言100篇:从入门到天花板 第43篇 文件字符读写:fgetc/fputc 与缓冲区机制
  • 腾讯云轻量服务器+宝塔面板:新手零代码搭建个人网站的保姆级避坑指南
  • 三分钟搭建小说解析器:用快马AI快速验证你的文本处理创意
  • 从零到一:Cobalt Strike远控实战指南
  • Mermaid Live Editor:代码驱动的图表创作革命,让复杂可视化变得简单高效
  • 如何构建专业领域的大语言模型:中医AI诊疗系统的技术实现方案
  • [特殊字符]C# ASP.NET Core 前后端分离终极实战:JWT 身份认证与授权全攻略(保姆级配置 + 避坑指南)
  • 【边打字.边学昆仑正义文化】_17_宇宙信息网(2)
  • OpenClaw技能扩展:基于Kimi-VL-A3B-Thinking的自动化内容创作流程
  • c++编程:(PAT1001)害死人不偿命的(3n+1)猜想
  • 无需先装pycharm:用快马ai描述需求,直接生成一个可运行的flask项目原型