Codex ENOSPC 磁盘空间不足错误处理
2026/6/30 14:13:52 网站建设 项目流程

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. 清理项目构建产物

常见可清理目录包括distbuild.nextcoverage.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_modulesdist.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 资源或调整系统参数。这个错误本身不复杂,关键是不要一看到报错就重装工具,先把系统资源状态查清楚,通常几分钟就能定位。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询