crash工具安装需三要素对齐:gdb版本≥10.2、匹配内核的dbgsym符号包已安装、crashkernel预留内存充足;缺一即导致“找不到符号”或解析失败。

crash 工具安装与依赖检查
直接 apt install crash 往往失败或装出不可用版本——Ubuntu 官方源里的 crash 包默认不带调试符号支持,且依赖的 gdb 版本常低于 crash 运行所需(比如要求 gdb ≥ 10.2,但系统自带是 9.2)。
- 先确认当前
gdb版本:gdb --version;若低于 10.2,需手动升级(推荐从 GNU 官网 下源码编译,或用apt install gdb尝试更新到最新版) -
crash必须匹配目标内核版本:运行uname -r查看当前内核,再确保已安装对应linux-image-$(uname -r)-dbgsym包(Canonical 提供的 debug 符号包,非linux-image-$(uname -r)本身) - 验证符号包是否就位:
ls /usr/lib/debug/boot/vmlinux-$(uname -r)应存在;若无,apt install linux-image-$(uname -r)-dbgsym并等待 APT 自动下载(可能需启用deb http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiverse中的main/debug源)
/var/crash 下的 vmcore 怎么喂给 crash
crash 启动时必须同时指定转储文件和对应的 vmlinux 镜像,缺一不可。常见错误是只传 vmcore 却漏掉符号文件,结果报 cannot find kernel debugging data。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 典型命令格式:
crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/202607071355/vmcore - 路径中
/var/crash/202607071355/是时间戳目录,每次崩溃生成一个;vmcore是原始内存镜像,体积大(通常等于物理内存大小),别误删 - 如果提示
no symbols found,不是命令写错,而是vmlinux-$(uname -r)文件权限不对(需可读)、路径不对、或该文件根本不是对应内核编译产物(比如你刚升级过内核但没装新 dbgsym)
kdump-tools 配置里容易被忽略的两个参数
/etc/default/kdump-tools 不只是开/关开关,其中两个配置项直接影响 crash 能否顺利加载符号:
-
USE_KDUMP=1:必须为1,否则服务根本不加载捕获内核;设成yes或空值都无效 -
CRASHKERNEL_PARAMS="irqpoll":加在 GRUB 的crashkernel=...后面,解决某些硬件(尤其是虚拟化环境)下捕获内核无法获取中断的问题;不加可能导致vmcore为空或截断,crash分析时堆栈全乱 - 改完记得
sudo systemctl restart kdump-tools,并用kdump-config show | grep -E "(state|crashkernel)"确认状态是ready且参数已生效
手动触发测试后,/var/crash 里没有 vmcore?
不是配置失败,大概率是 crashkernel 内存预留不足或位置冲突。Ubuntu 默认的 crashkernel=512M-:192M 在 4GB 以上内存机器上经常不够——crash 分析时需要完整内存镜像,而捕获内核自身也要内存运行。
- 保守做法:物理内存 ≤ 8GB → 设
crashkernel=256M;≥ 16GB → 至少512M;不要低于128M - 修改位置:编辑
/etc/default/grub.d/kdump-tools.cfg(不是/etc/default/grub),改crashkernel=行,然后sudo update-grub && sudo reboot - 重启后检查:
dmesg | grep -i crash应输出类似Reserving X MB of memory at Y MB for crashkernel;若无此行,说明内核根本没识别该参数(常见于 GRUB 配置未生效或内核不支持)
crash 分析,关键不在命令多复杂,而在三处对齐:gdb 版本对得上、vmlinux 符号文件对得准、crashkernel 内存留得够。任意一环偏差,都会卡在“找不到符号”或“无法解析堆栈”这种静默失败上。

















