linux 不提供内核崩溃转储自动清理机制,需管理员配置脚本+定时任务(cron 或 systemd timer)定期删除旧 vmcore;默认路径为 /var/crash,kdump 无内置保留策略,清理须避开正在写入目录并确保权限。

Linux 本身不提供内核崩溃转储(vmcore)的自动清理机制,所有清理必须由管理员主动配置。kdump 生成的 vmcore 文件默认存放在 /var/crash 或你指定的路径下,系统不会自动删除旧文件——哪怕磁盘快满了也不会触发自动清理。
确认转储路径与保留策略
先查清当前 kdump 实际写入位置:
- 运行
cat /etc/kdump.conf | grep "^path\|^nfs\|^ssh\|^raw",确认主存储路径(如path /var/crash) - 若用 NFS/SSH/raw 设备,清理逻辑需适配对应协议或挂载点权限
- kdump 不支持内置“保留最近 N 个”策略,必须靠外部脚本+定时任务实现
用 cron + find 实现定期清理
最常用、最可靠的方式是编写清理脚本并加入 crontab:
- 创建清理脚本:
/usr/local/bin/cleanup-kdump.sh - 内容示例(保留最近 7 天的 vmcore 及其子目录):
#!/bin/bash<br>find /var/crash -maxdepth 2 -type d -name "127.0.0.1-*" -mtime +7 -exec rm -rf {} \; - 赋予执行权限:
chmod +x /usr/local/bin/cleanup-kdump.sh - 添加定时任务(每天凌晨 2 点执行):
0 2 * * * /usr/local/bin/cleanup-kdump.sh >> /var/log/kdump-cleanup.log 2>&1
注意 vmcore 目录结构和安全边界
kdump 默认按主机名或 IP 建子目录(如 /var/crash/127.0.0.1-20260728142201/),每个目录含 vmcore 和 vmcore-dmesg.txt 等。清理时务必:
- 避免误删正在写入中的目录(kdump 进程运行时会新建目录,但不加锁)
- 不要直接
rm -rf /var/crash/*—— 可能删掉正在处理的转储 - 若启用了压缩(如
core_collector makedumpfile -c),实际文件是vmcore.gz,脚本中需匹配后缀 - 确保脚本运行用户有
/var/crash的读写权限(通常 root)
结合 systemd timer(可选进阶方式)
比 cron 更现代的方式是用 systemd timer:
- 创建 service:
/etc/systemd/system/kdump-cleanup.service[Unit]<br>Description=Cleanup old kdump files<br>[Service]<br>Type=oneshot<br>ExecStart=/usr/local/bin/cleanup-kdump.sh
- 创建 timer:
/etc/systemd/system/kdump-cleanup.timer[Unit]<br>Description=Run kdump cleanup daily<br>[Timer]<br>OnCalendar=daily<br>Persistent=true<br>[Install]<br>WantedBy=timers.target
- 启用:
systemctl daemon-reload && systemctl enable --now kdump-cleanup.timer











