RHEL 10 kdump 与 vmcore:配置、触发与验证
This content is not available in your language yet.
kdump 是“内核崩溃后把内存转储到磁盘”的机制。它依赖三件事:crashkernel 预留内存、kdump 服务、触发方式。本页在 RHEL 10.2 上真的触发一次 crash,验证 vmcore 落盘。
在 PVE 390 rhel10-lab(RHEL 10.2 x86_64)上实际执行:
rpm -q kexec-toolscat /proc/cmdlinesudo kdumpctl statussudo kdumpctl estimatecat /proc/sys/kernel/sysrqsudo sysctl -w kernel.sysrq=1sudo sh -c 'echo c > /proc/sysrq-trigger'# 系统崩溃并重启ls -l /var/crash/*/vmcoreE3 记录:plans/content-expansion/evidence/rhel/rhel-kdump/run.json(9 步,含 crash 前后输出 sha256)。
先给结论:三件套
Section titled “先给结论:三件套”| 组件 | 检查 | 本实验 |
|---|---|---|
| crashkernel 预留 | /proc/cmdline | crashkernel=2G-64G:256M,64G-:512M |
| kdump 服务 | kdumpctl status / systemctl is-active kdump | active / operational |
| 预留估算 | kdumpctl estimate | Reserved 256M,Recommended 256M |
crashkernel=2G-64G:256M,64G-:512M 的意思是:内存 2G–64G 时预留 256M,64G 以上预留 512M。没有这段参数,kdump 服务会起不来。
触发 crash
Section titled “触发 crash”$ cat /proc/sys/kernel/sysrq16$ sudo sysctl -w kernel.sysrq=1kernel.sysrq = 1$ sudo sh -c 'echo c > /proc/sysrq-trigger'16 只启用 sync 类 sysrq,c(crash)需要 1(全开)。触发后 SSH 立即断开,PVE 控制台会看到内核崩溃日志,随后自动重启。
验证 vmcore
Section titled “验证 vmcore”重启后:
$ ls -l /var/crash/*/-rw-------. 1 root root 62739 Nov 4 14:48 kexec-dmesg.log-rw-------. 1 root root 163453109 Nov 4 14:48 vmcore-rw-------. 1 root root 64567 Nov 4 14:48 vmcore-dmesg.txt目录名是 <host>-<timestamp>;vmcore 是完整内存转储,vmcore-dmesg.txt 是崩溃时的内核日志。163MB 只是本机 6G 内存的压缩后大小,生产机会大得多。
vmcore 可以用 crash 工具分析(需要对应 kernel-debuginfo):
sudo dnf install -y crash kernel-debuginfosudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcorestatus 文案不可靠
Section titled “status 文案不可靠”$ sudo kdumpctl statuskdump: Kdump is operationalkdump: Notice: No vmcore creation test performed!明明已经生成了 163MB 的 vmcore,status 仍说“没有做过 vmcore 创建测试”。它说的是“没有执行过内置测试标记”,不是“没有 vmcore”。验证要看:
ls -l /var/crash/*/vmcorevmcore 很大,实验后及时删:
sudo rm -rf /var/crash/127.0.0.1-2026-11-04-14:48:53生产上按保留策略归档到独立存储,不要把 /var/crash 塞满根分区。
-
/proc/cmdline有 crashkernel 预留; -
kdumpctl estimate的 Reserved ≥ Recommended; -
systemctl is-active kdump为 active; - 触发前确认是实验机、有控制台;
-
sysrq是否为 1; - 重启后
/var/crash/*/vmcore存在; - 及时清理/归档 vmcore。
未实测与边界
Section titled “未实测与边界”- 未测试
crash工具分析 vmcore(未装 kernel-debuginfo); - 未测试 NFS/SSH 远程 dump target;
- 未测试
kdumpctl test内置测试; - 未测试大内存机器的 crashkernel 自动取值。
- RHEL 内核与模块管理 — 内核参数与模块
- RHEL 10 tuned 性能配置档 — 内核调优
- 官方:Managing, monitoring, and updating the kernel