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检查开头是否含 ELF magic(
ath/to/core.zst | head -c 128 | hexdump -C
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(默认),才能落地为文件;none或journal会丢弃原始 core -
MaxUse=2G:调大,例如MaxUse=10G,防止因空间不足触发自动清理 -
KeepFree=5G:留足缓冲,避免磁盘写满导致新 core 写入失败 -
ProcessSizeMax=0:设为 0 表示不限制 core 大小(默认是 2G,超限会被丢弃) -
ExternalCompression=zstd:保持默认即可,zstd 比 gzip 压缩率高、解压快,且coredumpctl debug原生支持
调试时如何还原和使用压缩后的 core
不需要手动解压:所有标准工具(gdb、coredumpctl、eu-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=0 和 LimitCORE=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门面模式与底层机制
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?


