Skip to content
Search RHEL

This page uses Chinese content. Search opens the Chinese documentation.

    Browse this documentation

    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)上实际执行:

    Terminal window
    rpm -q kexec-tools
    cat /proc/cmdline
    sudo kdumpctl status
    sudo kdumpctl estimate
    cat /proc/sys/kernel/sysrq
    sudo sysctl -w kernel.sysrq=1
    sudo sh -c 'echo c > /proc/sysrq-trigger'
    # 系统崩溃并重启
    ls -l /var/crash/*/vmcore

    E3 记录:plans/content-expansion/evidence/rhel/rhel-kdump/run.json(9 步,含 crash 前后输出 sha256)。

    组件检查本实验
    crashkernel 预留/proc/cmdlinecrashkernel=2G-64G:256M,64G-:512M
    kdump 服务kdumpctl status / systemctl is-active kdumpactive / operational
    预留估算kdumpctl estimateReserved 256M,Recommended 256M

    crashkernel=2G-64G:256M,64G-:512M 的意思是:内存 2G–64G 时预留 256M,64G 以上预留 512M。没有这段参数,kdump 服务会起不来。

    $ cat /proc/sys/kernel/sysrq
    16
    $ sudo sysctl -w kernel.sysrq=1
    kernel.sysrq = 1
    $ sudo sh -c 'echo c > /proc/sysrq-trigger'

    16 只启用 sync 类 sysrq,c(crash)需要 1(全开)。触发后 SSH 立即断开,PVE 控制台会看到内核崩溃日志,随后自动重启。

    重启后:

    $ 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

    目录名是 &lt;host&gt;-<timestamp>;vmcore 是完整内存转储,vmcore-dmesg.txt 是崩溃时的内核日志。163MB 只是本机 6G 内存的压缩后大小,生产机会大得多。

    vmcore 可以用 crash 工具分析(需要对应 kernel-debuginfo):

    Terminal window
    sudo dnf install -y crash kernel-debuginfo
    sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore
    $ sudo kdumpctl status
    kdump: Kdump is operational
    kdump: Notice: No vmcore creation test performed!

    明明已经生成了 163MB 的 vmcore,status 仍说“没有做过 vmcore 创建测试”。它说的是“没有执行过内置测试标记”,不是“没有 vmcore”。验证要看:

    Terminal window
    ls -l /var/crash/*/vmcore

    vmcore 很大,实验后及时删:

    Terminal window
    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。
    • 未测试 crash 工具分析 vmcore(未装 kernel-debuginfo);
    • 未测试 NFS/SSH 远程 dump target;
    • 未测试 kdumpctl test 内置测试;
    • 未测试大内存机器的 crashkernel 自动取值。