崩溃后还能进系统时,应立即执行dmesg -t | grep -a 20 -b 5 -e "(kernel panic|oops|bug:|call trace:)"提取带时间戳和上下文的关键线索,并优先检查/var/log/kern.log.1.gz或journalctl -k --boot=-1获取重启前日志。

崩溃后还能进系统:先抓 dmesg 里的原始线索
只要没彻底锁死,dmesg 就是最快能拿到的现场快照。但默认输出全是滚动日志,关键 panic 或 oops 行早被刷走,必须加时间戳和上下文过滤:
- 执行
dmesg -T | grep -A 20 -B 5 -E "(Kernel panic|Oops|BUG:|Call Trace:)"——-T带本地时间,-A 20往下取调用栈,-B 5往上找前兆(比如磁盘 I/O 超时、EDAC 报错) - 如果系统已重启,
/var/log/kern.log可能被轮转,优先查/var/log/kern.log.1.gz:zcat /var/log/kern.log.1.gz | grep -A 20 -B 5 "Kernel panic" -
journalctl -k --boot=-1有时也能捞到,但前提是/var/log/journal/目录存在且 journal 没配成 volatile 模式;普通用户可能没权限,得加sudo
系统直接黑屏重启:必须依赖 kdump 生成的 vmcore
没有 kdump,panic 后就只剩控制台残留或空日志——因为内核停机时根本来不及写磁盘。vmcore 是唯一能回溯内存状态的证据,但它不是“有文件就有效”:
- 先确认 kdump 是否真在跑:
systemctl status kdump必须显示active (running);再看grep crashkernel /proc/cmdline,输出里要有类似crashkernel=256M@16M - 进入最新崩溃目录:
cd /var/crash/$(ls -t /var/crash | head -n1),然后file vmcore—— 正常应输出ELF 64-bit LSB core file x86-64;若显示data或empty,说明内存预留不足或写入失败 - 解析前必须配对:
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux vmcore,路径错了或 debuginfo 包没装,bt命令会卡住或报cannot determine vmcore type
Call Trace 里哪几行真正值得盯住
调用栈不是从上往下读,panic 位置往往在最底端(比如 __warn 或 panic),往上推才是问题源头。重点看这些信号:
- 方括号模块名:
[nvidia]、[zfs]、[wireguard]—— 第三方驱动占绝大多数根因,尤其内核升级后没重编译 ko 文件 - 文件系统函数:
ext4_writepages、ext4_da_write_begin频繁出现,立刻查磁盘 SMART:smartctl -a /dev/sda,并确认挂载参数是否用了data=journal - 内存子系统:
mm_page_alloc、try_to_unmap连续报错,结合dmesg -T | grep -i "ecc\|correctable"查硬件级内存故障 - 符号缺失:
unknown symbol或invalid opcode,八成是模块版本不匹配,或 CPU 微码过旧(查主板 BIOS 更新日志)
为什么日志里看不到 panic,但 /var/crash 下有 vmcore 却打不开
vmcore 文件体积大,但有效性极脆弱。常见失效点比想象中更底层:
-
crashkernel=参数设太小(比如只留 128M),实际 dump 时内存不够,文件被截断 ——file vmcore会显示data而非 ELF - vmlinux 符号文件路径错:
find /usr/lib/debug/lib/modules/$(uname -r) -name "vmlinux"必须返回真实路径,不能靠猜或软链接 - 内核 panic 后自动重启时间太短:
/proc/sys/kernel/panic值为 0,意味着停机不触发 kdump;应设为非零(如 10,表示 10 秒后重启,留给 kdump 写入时间) - initramfs 里没打包 kdump 工具链 —— 即使服务跑着,崩溃瞬间也调不起 dump 流程,
systemctl restart kdump无效,必须重生成 initramfs
真正麻烦的不是找不到日志,而是误以为找到了——vmcore 看似存在,但符号不匹配或内存截断,解析出来全是地址偏移,没法还原函数名。











