kdump未完成压缩/上传残留的vmcore裸镜像才是占用磁盘空间的“大Dump文件”,需通过file命令确认其ELF格式及大小,再用kdumpctl purge或手动删除,最后禁用kdump服务并更新grub配置。

休眠模式(hibernate)触发后,Linux会把整个内存镜像写入swap分区或专用的swap文件,生成一个与物理内存大小相当的hiberfile.sys(Windows)或/swapfile//dev/xxx中残留的休眠镜像数据(Linux),但真正造成磁盘空间被长期占用、且用户能直接看到的“大Dump文件”,其实是内核崩溃转储(kdump)捕获失败后残留的不完整vmlinux镜像或未压缩的vmcore原始内存快照——这类文件常达数GB甚至超过物理内存容量,且不会随重启自动清理。
确认是不是kdump残留的vmcore文件
先判断目标文件是否属于kdump机制生成的崩溃转储,而非普通core dump或swap残留:
执行 file /var/crash/*/vmcore 或 ls -lh /var/crash/*/vmcore*,若输出含 ELF 64-bit LSB core file 且大小接近内存总量(如16G机器出现15.8G文件),就是kdump未完成压缩/上传就中断留下的裸镜像。
这一步不能跳过——误删正在被kdumpctl处理中的vmcore会导致下次崩溃无法捕获。
安全清理未完成的kdump转储文件
方法一:用kdumpctl命令主动清理残留
运行 kdumpctl purge,该命令会扫描/var/crash下所有未完成归档(无.tar.gz后缀)、创建时间超24小时、且md5sum校验失败的vmcore文件并删除。
方法二:手动定位并删除裸镜像(需确认无活跃kdump进程)
① 执行 systemctl is-active kdump,输出必须是 active(说明服务在运行),但ps aux | grep "makedumpfile\|kdumpctl" 返回空,则代表无正在处理的任务;
② 进入转储目录:cd /var/crash;
③ 列出所有未压缩的原始镜像:find . -name "vmcore" -size +1G -type f -ls;
④ 【关键前提】 确认这些文件的修改时间早于最近一次系统启动时间(uptime -s),再执行 rm -f ./<em>路径</em>/vmcore。
注意:不要用rm -rf /var/crash/*暴力清空——其中可能含有已压缩完成的vmcore-dmesg.txt和kernel_log等调试必需文件。
永久禁用kdump避免再次生成
如果系统从不分析内核崩溃,只求释放空间:
运行 sudo systemctl disable --now kdump 停止服务并禁止开机自启;
再执行 sudo sed -i 's/^KDUMP_COMMANDLINE_APPEND.*/KDUMP_COMMANDLINE_APPEND="crashkernel=0"/' /etc/default/grub,彻底移除启动参数中的内存预留;
【不可逆操作】 最后必须运行 sudo update-grub(Debian/Ubuntu)或 sudo grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS)使更改生效。

















