systemd-coredump 如何设置保留完整 core 文件且压缩存储

发布时间 - 2026-01-27 00:00:00    点击率:
systemd-coredump 默认将完整 core 文件以 zstd 无损压缩存于 /var/lib/systemd/coredump/,完整性取决于 ProcessSizeMax=0、LimitCORE=infinity、Storage=external 及合理 MaxUse=/KeepFree= 设置,而非禁用压缩。

coredump 存储路径和保留策略由 systemd-coredump.conf 控制

默认情况下,systemd-coredump 会将 core 文件写入 /var/lib/systemd/coredump/,并自动压缩(zstd)、限制数量和大小。要保留完整未截断的 core 文件(即不被 ProcessCoreDump 信号处理截断、也不被 ulimit -c 限制),关键不是改压缩行为,而是确保内核生成完整 core,且 systemd 不丢弃或裁剪它。

  • 确认内核允许生成完整 core:sysctl kernel.core_pattern 应为 |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e(即走 systemd-coredump 管道),且 kernel.core_pipe_limit 未设为 0
  • 关闭 ulimit 截断:应用启动前确保 ulimit -c unlimited;若用 systemd service,需在 unit 文件中加 LimitCORE=infinity
  • 检查 /proc/sys/kernel/core_uses_pid 是否为 1(避免覆盖,非必需但推荐)

启用 zstd 压缩但保留原始完整内容

systemd-coredump 默认就用 zstd 压缩存储,且压缩是「无损」的——解压后就是原始内存镜像,不会丢失任何字节。所谓“保留完整 core 文件”,本质是确保没被截断、没被过滤、没被提前删除,而不是禁用压缩。

  • 压缩行为由 Compress=yes(默认)控制,无需关闭;禁用它反而浪费磁盘空间,且不解决“是否完整”的问题
  • 真正影响完整性的是:Storage=external(存文件系统)+ MaxUse=KeepFree= 设置过小会导致旧 core 被删,但不会损坏当前保存的 core
  • 验证是否完整:用 file /var/lib/systemd/coredump/core.*.zst 看是否识别为 “zstd compressed data”;再用 zstd -dcq /p

    ath/to/core.zst | head -c 128 | hexdump -C
    检查开头是否含 ELF magic(7f 45 4c 46

修改 /etc/systemd/coredump.conf 实现长期保留

核心配置项集中在 /etc/systemd/coredump.conf,改完需运行 sudo systemctl kill --signal=SIGUSR2 systemd-coredump 或重启 systemd-coredump.socket 生效(后者更稳妥)。

  • Storage=external:必须设为 external(默认),才能落地为文件;nonejournal 会丢弃原始 core
  • MaxUse=2G:调大,例如 MaxUse=10G,防止因空间不足触发自动清理
  • KeepFree=5G:留足缓冲,避免磁盘写满导致新 core 写入失败
  • ProcessSizeMax=0:设为 0 表示不限制 core 大小(默认是 2G,超限会被丢弃)
  • ExternalCompression=zstd:保持默认即可,zstd 比 gzip 压缩率高、解压快,且 coredumpctl debug 原生支持

调试时如何还原和使用压缩后的 core

不需要手动解压:所有标准工具(gdbcoredumpctleu-stack)都直接支持 .zst 后缀的 core 文件,底层自动调用 zstd 解压流式读取。

  • coredumpctl debug your-program 直接进 gdb,无需解压
  • coredumpctl info your-program 查看元数据和路径,路径里显示的就是 .zst 文件
  • 若非要解压出来(如给其他工具用):zstd -dcq /var/lib/systemd/coredump/core.*.zst > core.full,注意确保磁盘空间足够(可能数 GB 到数十 GB)
  • 常见误操作:把 Compress=no 当作“更完整”,其实只是省了压缩步骤,对内容完整性零影响,反而更快占满磁盘导致后续 core 被丢弃

最容易被忽略的是 ProcessSizeMax=0LimitCORE=infinity 的配合——前者管 systemd 层接收上限,后者管内核层生成上限,缺一不可。只调大一个,另一个仍会截断。


# 字节  # 工具  # 解压  # red  # signal  # var  # linux  # 设为  # 的是  # 不被  # 磁盘空间  # 不需要  # 数十  # 更快  # 镜像  # 就用  # 再用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 利用python获取某年中每个月的第一天和最后一天  Laravel如何使用查询构建器?(Query Builder高级用法)  微信小程序制作网站有哪些,微信小程序需要做网站吗?  在线制作视频网站免费,都有哪些好的动漫网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何正确选择百度移动适配建站域名?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  微信小程序 闭包写法详细介绍  Python数据仓库与ETL构建实战_Airflow调度流程详解  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  简单实现Android文件上传  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  个人网站制作流程图片大全,个人网站如何注销?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  非常酷的网站设计制作软件,酷培ai教育官方网站?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何在Windows环境下新建FTP站点并设置权限?  在centOS 7安装mysql 5.7的详细教程  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Android仿QQ列表左滑删除操作  免费视频制作网站,更新又快又好的免费电影网站?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  深圳网站制作的公司有哪些,dido官方网站?  如何快速搭建支持数据库操作的智能建站平台?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何在IIS7上新建站点并设置安全权限?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  如何在IIS中新建站点并配置端口与IP地址?  如何挑选高效建站主机与优质域名?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  装修招标网站设计制作流程,装修招标流程?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何快速生成专业多端适配建站电话?  EditPlus中的正则表达式实战(6)  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何在IIS服务器上快速部署高效网站?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  jQuery validate插件功能与用法详解  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?