深度解析Codex SSD杀手Bug:TRACE日志硬编码、WAL写入放大、绕过环境变量的三重祸根
OpenAI Codex CLI在2026年6月被发现存在一个严重缺陷:其内置的SQLite日志收集器默认启用全局TRACE级别,以每秒约5MiB的速度持续向本地磁盘写入诊断数据,21天累计写入量约37TB,年化超过640TB——超过大多数1TB消费级SSD的额定写入寿命(TBW约600TB)。GitHub用户1996fanrui于2026年6月14日提交Issue #28224,详细记录了这一问题;此后10周内积累154条评论,成为Codex仓库近年来讨论最激烈的Bug之一。OpenAI于6月23日通过PR #29432和#29457在v0.142.0版本完成修复,将覆盖85%的日志写入量。这篇文章还原Bug的技术根因、影响范围、临时解决方案,以及这类"静默损耗"Bug值得警惕的深层原因。

Bug是什么:640TB/年从哪里来
2026年6月14日,GitHub用户1996fanrui在Codex仓库提交了一份详细的Bug报告(Issue #28224,标题"Codex SQLite feedback logs can write ~640 TB/year and rapidly consume SSD endurance")。
核心数据来自实测:
在约21天的运行时间内,主SSD写入量达到约37TB。进程/文件级检查确认,Codex SQLite日志是主要的持续写入源。折算年化写入量约640TB。对比1TB消费级SSD,额定TBW寿命通常约600TB——这意味着一年内可能耗尽一块硬盘的全部写入寿命保证。
这不是磁盘性能问题,也不是用户操作问题,而是Codex CLI本身的设计缺陷。
技术根因:TRACE级别被硬编码进SQLite收集器
Bug的来源定位清晰。Codex CLI内置了一个SQLite日志接收器(feedback sink),负责将诊断数据写入本地数据库 ~/.codex/logs_2.sqlite。
问题的根源是这一行Rust代码:
Targets::new().with_default(Level::TRACE)SQLite收集器以全局TRACE级别作为默认值——这是粒度最细的日志模式,记录所有内部行为,包括:
每次WebSocket数据包的收发
inotify文件系统事件(打开
ld.so.cache、passwd、nsswitch.conf等系统文件的每次操作)OpenTelemetry遥测事件镜像(每次对话事件同时生成3条记录)
tokio-tungstenite异步库内部状态
Issue提供的日志分布数据显示,TRACE级别占总写入字节的70.7%,codex_otel.log_only和codex_otel.trace_safe再贡献25.3%——仅过滤这两类就能消除约96%的日志写入量。
更关键的问题:SQLite收集器完全忽略标准的RUST_LOG环境变量,用户无法通过常规手段降低日志级别。这使得这个Bug在未公开之前,基本没有自助排查和缓解的路径。
15秒采样数据:
保留行数:681,774 → 681,774(不变)
最大行ID:5,003,347,015 → 5,003,383,226(+36,211行)15秒内插入了3.6万行,而实际保留行数不变——数据库在持续执行"插入→写WAL→剪枝"的循环,行本身被删掉了,但每一次写入都已经记录在SSD的物理磨损上。
影响范围:哪些用户受影响
根据Issue和社区讨论(截至2026年6月,来源:GitHub Issue #28224,154条评论),受影响的情况如下:
平台:Linux和macOS用户是主要受影响群体(日志路径 ~/.codex/logs_2.sqlite);Windows/WSL用户同样受影响,日志路径为 %USERPROFILE%\.codex\,但临时解决方案可用性更有限。
用法强度:Bug的影响与使用强度直接相关。高强度用户(长时间运行Agent任务、多任务并行)写入速率远超轻度使用者。
版本范围:v0.142.0之前的所有版本均受影响。问题最早可追溯到Issue #17320(早于28224),实际存在时间可能更长。
症状:部分用户报告长时间对话后系统明显变慢,甚至"无法打字";极端情况下日志文件膨胀至690GB,导致Codex在运行30-105分钟后崩溃。

立即可用的三种缓解方案
方案一:升级到v0.142.0+(推荐)
这是根本解法:
npm install -g @openai/codex@latestPR #29432和#29457已在v0.142.0中合并,预计消除约85%的日志写入量。PR #29599将在v0.143.0中跟进,进一步优化。
升级后建议检查日志文件是否还在增长:
# 检查文件大小
ls -lh ~/.codex/logs_2.sqlite ~/.codex/logs_2.sqlite-wal
# 15秒内监控写入变化
stat ~/.codex/logs_2.sqlite; sleep 15; stat ~/.codex/logs_2.sqlite方案二:SQLite Trigger阻断写入(临时)
社区用户@beskay提供的方案(Issue #28224评论),在数据库层直接拦截INSERT:
# 1. 先退出Codex
# 2. 执行:
sqlite3 ~/.codex/logs_2.sqlite "CREATE TRIGGER IF NOT EXISTS
block_log_inserts BEFORE INSERT ON logs BEGIN SELECT RAISE(IGNORE);
END;"效果:彻底阻断新的日志写入,不影响Codex正常运行,但会丢失所有后续诊断信息。适合在升级前的过渡期使用。
方案三:符号链接重定向到内存(Linux/macOS)
将日志文件重定向到 /tmp,日志写入内存而非SSD,重启后自动清空:
# 1. 退出Codex
# 2. 备份现有日志(如果需要)
mv ~/.codex/logs_2.sqlite ~/.codex/logs_2.sqlite.bak
# 3. 创建符号链接
ln -s /tmp/codex_logs.sqlite ~/.codex/logs_2.sqlite注意:重启后 /tmp 下的文件会消失,符号链接需要重建。不涉及用户对话内容,只影响诊断日志。
Windows/WSL:暂无等效方案,建议优先升级版本,同时通过SMART工具监控SSD健康状态。
OpenAI的响应时间线
从首次报告(Issue #17320,约4月)到大规模讨论(6月22日前后),中间约10周。Issue #28224本身从提交到修复合并约9天,但这已经是问题在Hacker News引爆后的提速结果。

为什么这类Bug特别危险
这次Codex Bug有一个让它区别于常规软件缺陷的特征:损耗是静默的、不可逆的。
软件崩溃可以修复;数据丢失可以从备份恢复;性能下降可以感知和干预。但SSD的写入寿命一旦消耗,就永久损失——用户在看到任何症状之前,硬件已经悄悄地变旧了。
更值得警惕的是背景趋势:2026年的AI编程工具正在从"辅助建议"向"长期持续运行的Agent"演进。Codex、Claude Code、DeepSeek Harness等工具都鼓励用户运行多小时甚至多天的自主Agent任务。在这个使用模式下,任何后台持续写入的行为——无论是日志、缓存还是遥测——都会被放大数倍。
对于在同类AI编程工具之间并用多个平台(Codex、Claude Code等)的开发者团队,统一管理API调用记录和运行资源是一个逐渐浮现的效率需求。七牛云Token Plan(qiniu.com/ai/plan)提供DeepSeek、Kimi、GLM、MiniMax等国产主流模型的统一订阅,一个API Key管理多个模型接入,在Codex或其他工具切换不同后端时可减少独立账户管理成本。
FAQ
v0.142.0修复后,SSD损耗会恢复吗?
不会。SSD寿命消耗是物理过程,已经发生的写入磨损无法撤销。修复只能防止后续损耗继续累积。如果你的SSD已经高强度使用Codex超过数周,建议通过CrystalDiskInfo(Windows)或smartctl(Linux/macOS)检查当前TBW剩余量,评估健康状态。
怎么判断我的机器是否受到了影响?
在升级前运行以下命令检查日志文件大小:
ls -lh ~/.codex/logs_2.sqlite ~/.codex/logs_2.sqlite-wal ~/.codex/logs_2.sqlite-shm如果文件大小超过几百MB,或者在不使用Codex时文件仍在增长,则已受影响。升级到v0.142.0后,文件应停止快速增长。
这个Bug会读取我的代码内容写入日志吗?
Issue报告者明确指出,日志中主要是系统级的内部事件(WebSocket帧元数据、inotify事件、OTel遥测镜像),而非对话内容或代码正文。原始WebSocket payload体出于隐私考虑未在Issue中展示。但鉴于日志体量如此之大,如果对隐私敏感,升级+清除旧日志文件是更彻底的选择。
macOS用lsof如何确认写入源?
# 检查哪个进程在写入logs_2.sqlite
lsof ~/.codex/logs_2.sqlite
# 或者监控实时磁盘写入
sudo iotop -ao # Linux
sudo fs_usage -w -f filesys | grep codex # macOS如果看到codex或node进程持续出现,说明Bug仍在触发(通常意味着版本尚未升级)。
总结
Codex CLI日志写入Bug(Issue #28224,2026年6月)的核心是SQLite反馈收集器以全局TRACE级别运行,绕过环境变量控制,每秒约5MiB的速率写入本地磁盘,年化超过640TB(数据来源:GitHub Issue #28224,1996fanrui,2026年6月14日)。v0.142.0通过PR #29432和#29457修复了约85%的写入量。对于仍在运行旧版本的用户,SQLite Trigger方案是最简单的临时阻断手段。这次事件对AI编程工具行业的更大启示是:当工具进入"长时间后台运行"的Agent模式,后台资源行为的透明度和可控性变得和功能本身一样重要。
本文数据来源:GitHub Issue #28224(openai/codex,1996fanrui,2026年6月14日,154条评论)、PR #29432/#29457发布说明(v0.142.0,2026年6月23日)、INSIDE报道(2026年6月23日)、快科技/IT之家报道(2026年6月22-24日)。
延伸阅读
GitHub Issue #28224原文(含完整数据和社区讨论):https://github.com/openai/codex/issues/28224
OpenAI Codex CLI发布页(更新至v0.142.0+):https://github.com/openai/codex/releases
Codex官方文档:https://developers.openai.com/codex
七牛云AI编程工具接入配置(Codex、Claude Code等主流工具并用参考):https://www.qiniu.com/ai/models