乐于分享
好东西不私藏

你每天在用的 AI 工具,正加速损耗 SSD 寿命

你每天在用的 AI 工具,正加速损耗 SSD 寿命

技术专题

2026 年 6 月,GitHub 上一条 issue 在技术圈炸了:有人把自己常驻运行 OpenAI Codex 的机器开机 21 天,用 SMART 一查,SSD 累计写入 37TB,外推一年就是 640TB。而一块主流 1TB 消费级 SSD 的标称 TBW(总写入寿命)大多就 600TB 上下。

换句话说,重度用 Codex,一年就能把一块 SSD 的保修写入额度干穿。

先说清楚一句话:没有任何软件能瞬间搞坏一块硬盘。SSD 不是写到那一刻就报废,它是被一次次写入慢慢磨掉寿命的。反复读写大量日志和临时文件,加速的,是 SSD 耐久的消耗——而这一点,恰恰被很多人忽略了。

为什么文件不大,你却看不出来

诡异的地方在这:Codex 那个日志库 ~/.codex/logs_2.sqlite 在文件管理器里看着就几百 MB,谁会当回事?

问题在于——你看文件大小,根本看不出 SSD 的真实写入量du 看的是逻辑大小,df 看的是剩余空间,都反映不出 NAND 闪存上到底被写了多少次。只有 SMART 里的写入计数器和 TBW 百分比,才是真相:

# Linux / macOS 看累计写入量 sudo smartctl -a /dev/nvme0 | grep -i "written\|percentage used" # Windows(PowerShell,需装 smartmontools) smartctl -a /dev/sda | findstr /i "Written"

很多人机器越用越卡、重装后焕然一新,未必是系统脏,可能就是 SSD 磨损到了掉速区。

根因:TRACE 日志 + WAL,写入被放大了

Codex 默认开的是 TRACE 级调试日志,把 WebSocket 报文、底层网络事件、内部运行状态一股脑写进本地 SQLite。更坑的是它有两条独立的日志过滤链,SQLite 持久化那条链根本不理你设的 RUST_LOG 环境变量——你想降日志级别都没用。

SQLite 用的是 WAL(预写日志)模式,配合 Codex 的 insert-prune(边插边删)循环,会产生大量零碎写入。WAL 机制会把逻辑上的"小改动"放大成物理上的"多次 NAND 写入"。所以文件几百 MB,底层 NAND 可能已经被写了几十倍的量。这不是看文件大小能判断的负载。

SSD 怕写,机械硬盘不怕

这里必须严谨区分一句:SSD 和机械硬盘(HDD)的磨损机制完全不同

维度
SSD
机械硬盘 HDD
磨损来源
每次写入消耗存储单元寿命(P/E 循环)
主要是机械部件老化,写操作本身不损耗盘片
寿命指标
TBW(总写入字节数),写了就少
没有明确"写入寿命"概念
频繁写影响
怕,写多了提前掉速、出坏块
不怕,频繁写几乎不影响寿命
焊死在主板上的本
最亏:SSD 坏了往往得换整机
受损也多是机械故障,与写入量无关

所以本文标题特意写"SSD"而不是笼统说"硬盘"——你家里那块机械盘,天天写也没事;但笔记本焊死的 SSD、还有系统盘,才是被 AI 工具反复读写悄悄损耗的对象。

现状:修了,但没修干净

OpenAI 后来合并了两个 PR(停记每个 WebSocket 事件、过滤噪音日志),随 v0.142.0 发布,接着 v0.143.0 又进一步收敛。官方实测写入降了约 85%——但社区反馈最坏情况仍有约 96TB/年。截至年中稳定版是 v0.142.2

需要强调:这个 bug 只存在于 Codex 本地 CLI / 桌面端,和 ChatGPT 网页版无关。网页版不在你本机写日志,不会被波及。

你现在能做的几件事

如果你也在重度用这类常驻 AI 编程工具,下面几条能直接减负:

# 1. 先看自己中招没:查版本 + 查写入量 codex --version sudo smartctl -a /dev/nvme0 | grep -i "written"  # 2. 低于 0.142.0 就升级 npm update -g @openai/codex  # 3. 把日志库挪到内存盘(关键坑见下) #    macOS 的 /tmp 默认不是内存盘!得自己建 RAM 盘: diskutil erasevolume HFS+ RAMDisk $(hdiutil attach -nomount ram://2097152) ln -s /Volumes/RAMDisk/logs_2.sqlite ~/.codex/logs_2.sqlite  # 4. 终极兜底:直接给 SQLite 建触发器,禁止插入日志 sqlite3 ~/.codex/logs_2.sqlite <<'SQL' CREATE TRIGGER IF NOT EXISTS block_log_inserts BEFORE INSERT ON logs BEGIN   SELECT RAISE(IGNORE); END; SQL  # 5. 不用的时候,彻底退出进程,别让它在后台挂着

第 3 条那个坑我专门标一下:Linux 上 /tmp 通常是 tmpfs(内存盘),但 macOS 的 /tmp 只是重启会清、底层仍走磁盘,并非内存盘,建 RAM 盘得用 hdiutil。搞错这一步,你以为挪到内存了,其实还在写 SSD。

不止 Codex:另一类"本地留东西"

Codex 这类是偷偷写穿 SSD 寿命。还有一类更常见——像我每天在用的 WorkBuddy 这类常驻 AI 工具,它不写爆 SSD,但每天生成的临时脚本、缓存、中间产物、日志是一堆一堆的。一个悄悄损耗的是寿命,一个默默堆满的是空间,本质都是同一件事:AI 工具在本地默默留东西,你不当回事,它就在那里一天天累积。

定期清一下本地残留,比等磁盘红了再抓瞎强。

先敲一行 codex --version,低于 0.142.0 就更新;再用 smartctl 看一眼 SSD 写入量。硬盘不会提醒你,但它一直在记账。

— — —

       长按识别二维码,关注「天弈初心」     

文 / 弈心