惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Palo Alto Networks Blog
P
Privacy & Cybersecurity Law Blog
H
Hacker News: Front Page
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
IT之家
IT之家
B
Blog
Google DeepMind News
Google DeepMind News
U
Unit 42
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
美团技术团队
Y
Y Combinator Blog
爱范儿
爱范儿
L
Lohrmann on Cybersecurity
O
OpenAI News
酷 壳 – CoolShell
酷 壳 – CoolShell
W
WeLiveSecurity
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
T
Threatpost
Application and Cybersecurity Blog
Application and Cybersecurity Blog
TaoSecurity Blog
TaoSecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
Security Archives - TechRepublic
Security Archives - TechRepublic
M
MIT News - Artificial intelligence
Last Week in AI
Last Week in AI
Apple Machine Learning Research
Apple Machine Learning Research
AWS News Blog
AWS News Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tenable Blog
The GitHub Blog
The GitHub Blog
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
小众软件
小众软件
罗磊的独立博客
B
Blog RSS Feed
S
SegmentFault 最新的问题
L
LINUX DO - 热门话题
Scott Helme
Scott Helme
G
GRAHAM CLULEY
Martin Fowler
Martin Fowler
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Last Watchdog
The Last Watchdog
P
Proofpoint News Feed
Security Latest
Security Latest

公牛博客

《观局》——乡野猪噜噜 《观局》——乡野猪噜噜 《观局》——乡野猪噜噜 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《观局》——乡野猪噜噜 – 公牛博客 《送子》– 乡野猪噜噜 《行旅》– 乡野猪噜噜 《观海》– 乡野猪噜噜 《清欢》– 乡野猪噜噜 《阅兵》– 乡野猪噜噜 《离职》– 乡野猪噜噜 《本爻令》-- 敬梦想 《春游》-- 乡野猪噜噜 北京新公司注册开办流程、免费地址、银行开户 《本爻》—乡野猪噜噜 《好友》—乡野猪噜噜 毛主席诗词集锦与深度解析(五) 毛主席诗词集锦与深度解析(四) 毛主席诗词集锦与深度解析(三) 毛主席诗词集锦与深度解析(二) 毛主席诗词集锦与深度解析(一) Linux 系统网络连接不稳定,如何优化? Linux 系统网络连接不稳定,如何优化? Linux 系统无法连接网络,如何排查? Linux 系统启动提示 "Boot device not found",如何排查? Linux 系统启动提示 "Error loading operating system",如何解决? Linux 系统启动提示 "No such device",如何排查? Linux 系统启动提示 "Missing operating system",如何解决? Linux 系统启动提示 "Invalid partition table",如何修复? Linux 系统启动提示 "Filesystem error",如何修复? 《国际风云》2024年12月13日·午间看点 德国,加布伦茨的拉科茨桥 捕捉巴黎圣母院重建过程中的“宏伟和美丽” 《国际风云》2024年12月13日·早间看点
Linux 系统启动提示 "Kernel panic",如何分析?
大嘴 · 2024-12-31 · via 公牛博客

什么是 Kernel Panic?

Kernel panic 是 Linux 内核在遇到无法恢复的致命错误时触发的保护机制。此时内核会主动停止系统运行,以防止数据损坏或硬件损伤。错误信息通常包含关键线索,例如崩溃原因、调用堆栈(Call Trace)和寄存器状态。以下是分析此类问题的系统性方法。


一、理解 Kernel Panic 的常见原因

  1. 硬件故障
  • 内存损坏(RAM 故障)
  • 硬盘/SSD 读写错误
  • CPU 或主板异常(如超频不稳定)
  1. 软件或驱动问题
  • 内核模块(驱动)不兼容或崩溃
  • 文件系统损坏(如 ext4、XFS 结构异常)
  • 内核自身 Bug(尤其是自定义编译的内核)
  1. 配置错误
  • 错误的 grub 内核参数(如 root= 指定错误分区)
  • 内核与 initramfs 不匹配
  • ACPI(电源管理)配置冲突

二、分析步骤与排查方法

1. 记录错误信息

Kernel panic 的日志通常直接输出到屏幕,内容可能包括:

  • 错误类型:如 Unable to mount root fs(无法挂载根文件系统)。
  • 调用堆栈(Call Trace):显示崩溃时的函数调用链。
  • 寄存器值:如 RIP(指令指针)指向崩溃的代码位置。

示例日志片段

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Call Trace:
 <IRQ>
 dump_stack+0x63/0x7c
 panic+0xe4/0x244
 mount_block_root+0x1f3/0x2a6
 prepare_namespace+0x13d/0x194
 kernel_init_freeable+0x231/0x255
...
2. 检查硬件健康状态
  • 内存测试
    使用工具如 memtest86+ 检测 RAM 是否损坏:
  # 从 Live USB 启动后运行
  sudo apt-get install memtest86+
  memtester 512M 1  # 测试 512MB 内存,执行 1 次
  • 硬盘检测
    使用 smartctl 检查硬盘健康状态:
  sudo smartctl -a /dev/sda
  # 关注 "SMART overall-health self-assessment test result" 是否为 PASSED
  • 其他硬件
  • 移除超频设置,恢复 BIOS 默认配置。
  • 检查 CPU 温度是否过高(通过 BIOS 或 lm-sensors 工具)。
3. 验证文件系统完整性

从 Live USB 启动后,挂载系统分区并修复:

# 假设根分区为 /dev/sda1
sudo fsck -y /dev/sda1
# 若使用 LVM:
sudo vgscan
sudo vgchange -ay
sudo fsck /dev/mapper/vg-root
4. 检查内核与驱动
  • 内核参数
    在 GRUB 启动时按 e 进入编辑模式,检查以下关键参数:
  • root=:是否指向正确的根分区(如 root=/dev/sda2)。
  • ro/rw:是否以只读或读写模式挂载。
  • 移除可能冲突的参数(如 acpi=offnomodeset 等)。
  • 内核模块问题
    若怀疑驱动导致崩溃,尝试在 GRUB 内核行添加以下参数禁用相关模块:
  # 例如禁用 NVIDIA 驱动
  modprobe.blacklist=nouveau
  • 恢复旧内核
    如果系统有多个内核版本,从 GRUB 选择旧版本启动:
  # 启动后卸载问题内核
  sudo apt remove linux-image-<problematic-version>
5. 分析内核转储(若有)

如果配置了 kdump,系统崩溃时会生成内存转储文件(vmcore),可通过 crash 工具分析:

crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/vmcore
# 输入命令查看堆栈
bt
log
6. 排查自定义内核问题

如果是自行编译的内核,需检查:

  • 编译配置(.config)是否启用了关键功能(如文件系统支持)。
  • 是否缺少依赖的固件文件(如 Wi-Fi 驱动固件需放在 /lib/firmware)。

三、常见错误场景与解决方案

场景 1:Unable to mount root fs
  • 原因:内核无法挂载根文件系统。
  • 解决
  1. 检查 root= 参数指定的设备是否正确。
  2. 确认根文件系统类型是否在内核中启用(如 CONFIG_EXT4_FS=y)。
  3. 从 Live USB 修复文件系统(fsck)。
场景 2:BUG: unable to handle kernel NULL pointer dereference
  • 原因:内核代码访问了空指针。
  • 解决
  1. 检查 Call Trace 中的模块(可能是驱动问题)。
  2. 更新或回滚相关驱动版本。
场景 3:Out of memory: Kill process
  • 原因:内存耗尽触发 OOM Killer。
  • 解决
  1. 优化应用内存使用。
  2. 增加物理内存或调整 vm.overcommit_memory 参数。

四、预防措施

  1. 定期维护
  • 更新内核和驱动至稳定版本。
  • 监控硬件健康状态(如 SMART 日志)。
  1. 配置冗余
  • 保留至少两个可用的内核版本。
  • 使用 LVM 或 RAID 提供存储冗余。
  1. 日志监控
  • 配置 syslogjournald 持久化保存内核日志。
  • 启用 kdump 以便捕获崩溃现场。

总结

Kernel panic 的排查需要结合错误日志、硬件状态和系统配置综合分析。通过逐步隔离硬件故障、验证软件兼容性,并利用工具深入分析,多数问题可被定位和修复。对于生产环境,建议提前配置崩溃转储和日志监控,以快速响应致命错误。

2