kdump未生成vmcore说明机制未启用,需依次验证内核支持(CONFIG_KEXEC=y且CONFIG_CRASH_DUMP=y)、安装对应工具(桌面版apt装linux-crashdump,服务器版yum装kexec-tools)、配置crashkernel内存预留(如crashkernel=512M并更新GRUB)、指定转储路径(修改/etc/kdump.conf并重建initramfs)、手动触发echo c测试验证。

银河麒麟V10系统遭遇内核崩溃(如panic)后无法自动生成vmcore转储文件,说明kdump机制未正确启用或关键配置缺失,需按顺序完成内核支持验证、工具安装、内存预留、路径配置与手动触发验证五步操作。
确认内核已编译启用kdump支持
若内核未开启CONFIG_KEXEC和CONFIG_CRASH_DUMP,后续所有配置均无效,系统根本无法加载捕获内核。
执行命令:grep -E "CONFIG_KEXEC=|CONFIG_CRASH_DUMP=" /boot/config-$(uname -r)
输出中必须同时出现CONFIG_KEXEC=y和CONFIG_CRASH_DUMP=y;若任一为m或n,需更换内核版本或重新编译内核。
安装并启用kdump服务套件
银河麒麟V10桌面版与服务器版使用不同包管理器,安装命令不可混用。
方法一:银河麒麟V10桌面版(Debian/Ubuntu系)
执行:sudo apt update && sudo apt install linux-crashdump apport crash -y
方法二:银河麒麟V10服务器版(RHEL/CentOS/openEuler系)
执行:sudo yum install -y kexec-tools
安装完成后立即启用服务:sudo systemctl enable --now kdump-tools.service
验证服务状态:sudo systemctl status kdump-tools.service | grep -E "(active|running)",若无匹配输出则服务未正常启动。
配置crashkernel内存预留
这是kdump能否工作的物理前提——没有预留内存,崩溃时连备用内核都加载不了。
第一步:编辑GRUB配置文件
桌面版执行:sudo vim /etc/default/grub.d/kdump-tools.cfg
服务器版执行:sudo vim /etc/default/grub
第二步:在GRUB_CMDLINE_LINUX_DEFAULT(桌面)或GRUB_CMDLINE_LINUX(服务器)行末尾追加参数:crashkernel=512M
第三步:对于内存≥8GB的生产环境,【必须改用分段式配置】:crashkernel=0M-2G:0M,2G-8G:192M,8G-:256M。硬写固定值如crashkernel=256M在低内存机器上会被内核静默忽略,/sys/kernel/kexec_crash_size将返回0。
第四步:更新GRUB并重启
x86_64 BIOS系统:sudo grub-mkconfig -o /boot/grub/grub.cfg
UEFI系统:sudo grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfgsudo reboot
指定转储路径并重建initramfs
/var/crash是默认路径,但若该分区空间不足或权限异常,vmcore将写入失败且无提示。
编辑/etc/kdump.conf,取消注释并修改path行,例如:path /var/crash → path /backup/crash(需确保/backup已挂载且可写)
【关键动作:必须重建initramfs】——任何对/etc/kdump.conf的修改(包括路径、压缩、NFS挂载等)都需重建,否则捕获内核仍按旧配置运行。
桌面版执行:sudo update-initramfs -u -k $(uname -r)
服务器版执行:sudo dracut -f
验证预留内存是否生效:cat /sys/kernel/kexec_crash_size,返回非零值(如268435456表示256MB)才代表成功。
手动触发panic测试转储是否生成
这是唯一能确认整套流程是否真正生效的操作,不执行此步等于未验证。
执行:echo c | sudo tee /proc/sysrq-trigger
系统将立即触发内核panic并自动进入捕获内核,完成转储后重启。
重启后检查指定路径(如/var/crash或你自定义的/backup/crash)是否存在以vmcore-开头的文件,以及date目录下是否有对应时间戳子目录。
若目录为空,重点排查:dmesg | grep -i "kdump\|kexec"是否报Failed to load kdump kernel或No memory for crash kernel。

















