kdump 内核转储与崩溃记录
kdump 在内核崩溃时由预先保留的内存区域启动一个转储内核,把崩溃前的内存内容导出到 /var/crash 下,产物通常为 vmcore 目录与对应的 vmcore-dmesg.txt。这类转储能解释主机重启原因:正常关机不会产生该目录,出现记录说明当时发生了内核级别的崩溃。它同时也是崩溃时刻的内存镜像,可用于进一步分析。kdump 依赖启动参数中预留的内存区域,未预留时崩溃不会生成任何转储。
基本信息
| 配置 | /etc/kdump.conf,启动参数中的 crashkernel 预留 |
|---|---|
| 产物 | /var/crash/<时间>/ 下的 vmcore 与 vmcore-dmesg.txt |
| 查看命令 | kdumpctl status(RHEL 系) |
| 体积 | 转储大小通常与内存规模相当 |
典型使用场景
- 解释主机非预期重启的真实原因
- 确认某次重启是硬件或内核问题还是人为操作
- 为崩溃时间点提供精确的时间锚
- 在内存侧分析中获得已有崩溃时刻的内存材料
- 评估导出转储所需的空间与时间成本
核查转储
核查转储
ls -lt --time-style=long-iso /var/crash/ 2>/dev/null | head # 有哪些崩溃记录
kdumpctl status 2>/dev/null | head -12 # 服务与预留状态(RHEL 系)
grep -o 'crashkernel=[^ ]*' /proc/cmdline # 是否预留了转储内存
df -h /var/crash # 导出前确认可用空间
cat /etc/kdump.conf 2>/dev/null | grep -vE '^\s*#|^\s*$' | head # 转储路径配置
head -20 /var/crash/*/vmcore-dmesg.txt 2>/dev/null # 崩溃时的内核消息/var/crash 内容读法
| 内容 | 含义 | 判读要点 |
|---|---|---|
| 日期时间目录 | 崩溃发生的时刻 | 与重启时间接近即为非正常重启 |
| vmcore | 崩溃时内存镜像 | 体积大,导出前确认空间 |
| vmcore-dmesg.txt | 崩溃时刻的内核消息 | 文本可直接阅读,优先使用 |
未预留内存时 kdump 无法启动,也就不会产生转储;查不到记录不等于没有崩溃,需要转向内核日志与系统日志中的崩溃迹象。
vmcore-dmesg.txt 是文本文件,体积极小,优先采集与阅读;完整 vmcore 按需导出,避免在大容量介质上无谓搬运。
vmcore 含崩溃时刻的完整内存内容,可能包含凭据与业务数据,导出与留存按敏感材料处理并限制访问范围。
转储生成后系统随即重启,可用目录时间与最后一次启动时间对照来判断崩溃时刻;若两者相差很远,说明这批目录是更早的遗留记录,不能用来解释本次重启。