Codex ENOSPC 磁盘空间不足错误处理
在本地跑 Codex、使用 Codex CLI 生成代码、安装依赖或让它修改一个比较大的项目时,偶尔会碰到 ENOSPC。这个错误不用先怀疑模型或接口,第一步先看磁盘和 inode。很多时候不是代码问题,而是临时目录、缓存目录、node_modules、日志或 Docker 占满了空间。
一、常见错误现象
不同环境里报错文字不完全一样,但核心一般都有 ENOSPC:
### token云桥中转 0029.org ###
Error: ENOSPC: no space left on device, write
npm ERR! code ENOSPC
npm ERR! syscall write
npm ERR! errno -28
ENOSPC: System limit for number of file watchers reached
这里要注意,ENOSPC 不一定只代表磁盘容量满了。它可能有三类情况:
- 磁盘分区空间真的不足,例如
/、/home、/tmp满了。 - inode 用尽,磁盘还有空间,但无法再创建新文件。
- 文件监听数量达到系统限制,常见于 VS Code、Cursor、前端项目、Codex 扫描大仓库时。
二、先判断是哪一种 ENOSPC
1. 查看磁盘空间
先看各分区使用率,重点关注挂载点是不是 100%。
df -h
如果看到类似下面这样,基本就是磁盘空间不足:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 39G 0 100% /
2. 查看 inode 是否耗尽
有些项目会产生大量小文件,例如 node_modules、缓存、测试快照、构建产物。此时磁盘看着还有剩余,但 inode 已经用完。
df -i
如果 IUse% 接近或达到 100%,说明问题在 inode。
3. 查看文件监听限制
如果错误里带有 file watchers,更可能是监听数量限制,而不是磁盘满。
cat /proc/sys/fs/inotify/max_user_watches
cat /proc/sys/fs/inotify/max_user_instances
前端大项目、monorepo、包含多个子仓库的项目,Codex 或编辑器在分析文件时容易触发这个限制。
三、逐步修复:先清理最安全的目录
1. 找出大目录
不要一上来就乱删。先定位哪个目录占空间最多:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h
如果是用户目录占用大,再继续往下查:
du -xh ~ --max-depth=1 2>/dev/null | sort -h
项目目录里可以这样看:
du -xh . --max-depth=1 | sort -h
2. 清理包管理器缓存
Codex 经常会配合 Node、Python、Go、Rust 等工具链工作,缓存堆积很常见。
# npm
npm cache verify
npm cache clean --force
# pnpm
pnpm store prune
# yarn
yarn cache clean
# pip
pip cache purge
如果是 Ubuntu/Debian 机器,还可以清理 apt 缓存:
sudo apt clean
sudo apt autoremove -y
3. 清理项目构建产物
常见可清理目录包括 dist、build、.next、coverage、.turbo、.cache。如果项目依赖可以重新安装,node_modules 也可以删除后重装。
rm -rf dist build coverage .next .turbo .cache
rm -rf node_modules
npm install
删除前确认当前没有未保存的生成文件,尤其是一些脚手架把用户上传资源也放在构建目录里的项目,不要机械执行。
4. 清理临时目录
很多工具会把中间文件写到 /tmp。如果 Codex 执行任务时频繁生成补丁、日志或临时依赖,/tmp 满了也会报 ENOSPC。
df -h /tmp
sudo find /tmp -type f -mtime +3 -delete
不要直接 rm -rf /tmp/*,线上机器可能有正在运行的服务使用临时文件,建议按时间清理。
5. Docker 环境重点检查
如果 Codex 在容器里或配合 Dev Container 使用,Docker 镜像、容器、卷很容易占满磁盘。
docker system df
docker ps -a
docker images
确认无用后再清理:
docker container prune
docker image prune
docker volume prune
docker builder prune
如果想一次清理未使用资源,可以执行:
docker system prune -a
这条命令会删除未使用镜像,可能导致后续重新拉取镜像,开发机上问题不大,生产环境要谨慎。
四、处理文件监听数量不足
如果错误信息是 System limit for number of file watchers reached,清理磁盘未必有用,需要调整 inotify 参数。
sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl fs.inotify.max_user_instances=1024
临时生效后,再把配置写入文件:
echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
echo "fs.inotify.max_user_instances=1024" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
如果项目特别大,还应该在编辑器或工具配置里排除无关目录,例如 node_modules、dist、.git、日志目录。减少监听数量比单纯调大系统限制更稳。
五、Codex 相关目录也要看一下
有些问题出在 Codex 或相关 CLI 的缓存、会话记录、日志目录。不同安装方式路径不一样,可以先从用户缓存目录查起:
du -xh ~/.cache --max-depth=1 2>/dev/null | sort -h
du -xh ~/.config --max-depth=1 2>/dev/null | sort -h
du -xh ~/.local/share --max-depth=1 2>/dev/null | sort -h
如果你是多模型、多接口混用,建议把临时测试项目和正式项目分开,避免一次性把大量上下文、日志和依赖都堆在同一个目录。我自己在测试不同模型接口时,会把中转配置也单独隔离;需要稳定 token 转发时,可以顺手看一下 token云桥AI中转站 0029.org,主要是方便把测试环境和日常开发环境分开管理,排错时少一些干扰项。
六、修复后的验证方式
清理或调整后,不要只看命令没报错,建议按下面顺序验证。
1. 再看磁盘和 inode
df -h
df -i
根分区、项目所在分区、/tmp 至少要留出一定余量。开发机建议不要长期超过 85%,否则依赖安装和构建时还会反复出问题。
2. 验证临时写入
touch /tmp/codex-test-file
echo "ok" > /tmp/codex-test-file
cat /tmp/codex-test-file
rm /tmp/codex-test-file
如果这里都失败,说明问题还在系统层面,不要急着重跑 Codex。
3. 验证项目依赖和构建
npm install
npm run build
Python 项目可以执行:
pip install -r requirements.txt
python -m pytest
构建能跑通,再让 Codex 继续修改代码,成功率会高很多。
七、避免再次复发
- 定期清理包管理器缓存,尤其是 npm、pnpm、pip、Docker。
- 把大型项目放到空间更充足的分区,不要长期挤在系统盘。
- CI、容器、临时测试目录要设置清理策略。
- 不要把日志、构建产物、模型输出文件提交或堆在项目根目录。
- 大仓库配置忽略目录,减少无意义扫描和文件监听。
遇到 Codex 的 ENOSPC,排查顺序建议固定下来:先 df -h,再 df -i,然后看是否是 inotify 文件监听限制。确认原因后再清理缓存、构建产物、Docker 资源或调整系统参数。这个错误本身不复杂,关键是不要一看到报错就重装工具,先把系统资源状态查清楚,通常几分钟就能定位。

被折叠的 条评论
为什么被折叠?



