kdump生成转储文件调试内核崩溃、死机
目录
- 操作流程
- 0. 确认内核配置
- 1. 安装kdump相关工具
- 2. 编辑/etc/default/grub,配置预留kdump内存,
- 3. 更新GRUB并重启
- 4. 设置转储路径
- 5. 验证kdump服务状态
- 6. 查看kdump预留内存空间大小
- 7. 最后检查kdump配置
- 8. 查看崩溃日志
- 常见问题
最近在写内核模块,经常安装模块之后突然死机。用的又是虚拟机,直接弹个窗口说cpu已被禁用
,什么都动不了,重启之后呢又看不到任何的崩溃信息,也不知道是什么原因导致的崩溃,反正就是一头雾水。问ai,说用kdump
咱也就是跟着ai走,遇到啥坑咱给写出来。
操作流程
我使用的是Ubuntu20 Linux5.15内核版本
0. 确认内核配置
grep -E "CONFIG_KEXEC=|CONFIG_CRASH_DUMP=" /boot/config-$(uname -r)
确保 CONFIG_KEXEC=y
和 CONFIG_CRASH_DUMP=y
否则需要更换为已启用CONFIG_KEXEC=y
的内核
sudo apt install linux-image-$(uname -r)-dbgsym # 安装调试符号内核
1. 安装kdump相关工具
sudo apt install kdump-tools crash
2. 编辑/etc/default/grub,配置预留kdump内存,
sudo nano /etc/default/grub
在GRUB_CMDLINE_LINUX
中添加:
crashkernel=128M # 预留128MB内存给捕获内核也可以写成
crashkernel=512M-:256M # 总内存大于512时预留256最后文件中显示如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash crashkernel=256M"
我这里直接留了1G,因为我怕重启卡住(这是一个坑)所以推荐大家预留内存给大点
3. 更新GRUB并重启
sudo update-grub && sudo reboot
4. 设置转储路径
编辑/etc/kdump.conf
sudo nano /etc/kdump.conf在文件中添加
path /var/crash
之后崩溃重启的文件将存储在/var/crash
中
5. 验证kdump服务状态
注意:Ubuntu中Kdump的服务名为 kdump-tools.service,而非 kdump.service:
sudo systemctl status kdump-tools.service
应该显示active
,若状态显示 active (exited) 或 active (waiting) 表示服务已就绪。
6. 查看kdump预留内存空间大小
cat /proc/cmdline | grep crashkernel # 应显示预留的内存大小
7. 最后检查kdump配置
kdump-config show
确认current state
为ready to kdump
8. 查看崩溃日志
崩溃内容会生成在下图蓝色的时间文件夹中,有dmesg和dump文件,通过查看dmesg可以较快找到崩溃原因。
常见问题
崩溃重启卡死在转圈界面不动怎么办?
Q: 可能是预留的内存不够 (看步骤2), 如果确认内存足够,崩溃后经常会在重启界面暂停一会,请耐心等待。