Kernel panic 的错误非常常见,“基本”束手无策的印象确实很 “panic”。不过有 很多 panic 解决起来其实也比较简单,本文参考网上很多文章,先了解一下 panic 。在记录一下实践中遇到的问题。

参考
panic 类型
kernel 源码分析
问题分析
硬件问题
温度
根文件系统没有挂载上
修改 panic 的默认动作

参考

panic 类型

通常有这样几种 panic :

Kernel panic - not syncing fatal exception in interrupt
kernel panic - not syncing: Attempted to kill the idle task!
kernel panic - not syncing: killing interrupt handler!
Kernel Panic - not syncing:Attempted to kill init !

kernel 源码分析

和 panic 有关的源码有:

kernel/panic.c
kernel/exit.c

问题分析

硬件问题

硬件检测错误,内存出错会引起 panic。对于服务器,通常内存问题更多(我手 头有台服务器有16根1G的ddr3内存条,其中一个内存有问题,导致过 kernel panic)

温度

和硬件也有关系,不过这个简单点,关机冷却会再试试就知道。

根文件系统没有挂载上

这个问题最常见!通常都是 grub 启动时候 kernel 选项中 root 指定的根分区 不对。或者没有对于设备驱动。

修改 panic 的默认动作

默认情况下,kernel panic 发生后只有按电源冷关机,键盘鼠标都不起作用。但 是可以定制,在 /etc/sysctl.conf 添加:

kernel.panic = 30 #panic错误中自动重启,等待时间为30秒
kernel.sysrq=1 #激活Magic SysRq! 否则,键盘鼠标没有响应

其中激活 Magic SysRq 键指按住 [ALT]+[SysRq]+[COMMAND], 这里 SysRq 是 Print SCR 键,而 COMMAND 按以下来解释:

b - 立即重启
e - 发送SIGTERM给init之外的系统进程
o - 关机
s - sync同步所有的文件系统
u - 试图重新挂载文件系统