【Bug已解决】Error: ENOSPC no space left on device — Claude Code 磁盘空间不足解决方案

📅 2026/7/8 8:20:37
【Bug已解决】Error: ENOSPC no space left on device — Claude Code 磁盘空间不足解决方案
【Bug已解决】Error: ENOSPC no space left on device — Claude Code 磁盘空间不足解决方案1. 问题描述在 Claude Code 正常使用过程中突然弹出以下磁盘空间错误Error: ENOSPC: no space left on device write EIO或者Error: ENOSPC: no space left on device, write at Object.writeFileSync (node:fs:2360:14) at writeCredentials (/usr/local/lib/node_modules/anthropic-ai/claude-code/dist/auth.js:45:12)有时报错为 Claude Code 无法写入配置或缓存Error: ENOSPC: no space left on device mkdir /home/user/.claude/sessions/2024-01-15/或者涉及 npm 缓存npm error code ENOSPC npm error syscall write npm error path /home/user/.npm/_cacache/tmp npm error errno -28这个问题在以下场景中特别常见CI/CD 环境中磁盘空间有限Docker 容器使用默认存储驱动长期使用的开发机器积累了大量缓存Claude Code 的会话历史和日志文件持续增长npm 全局缓存目录过大临时文件未清理# 典型复现过程 $ claude 帮我分析这段代码 Error: ENOSPC: no space left on device, write # Claude Code 无法写入会话文件 $ df -h / Filesystem Size Used Avail Capacity /dev/disk1 234G 234G 0G 100%2. 原因分析核心原理拆解Claude Code 运行 → 需要写入文件会话/缓存/配置 ↓ 磁盘空间已满 (ENOSPC) ↓ 文件写入失败 ↓ 报错 no space left on device原因分类表原因分类具体表现占比Claude Code 会话/日志过大~/.claude/ 目录持续增长约 30%npm 缓存过大~/.npm/_cacache 占用大量空间约 25%Docker 存储层满容器可写层空间有限约 20%系统临时目录满/tmp 或 /var/tmp 被占满约 10%Node.js 版本管理器占用nvm/fnm 多版本 Node.js约 10%其他应用占用Docker 镜像、日志等约 5%深入说明Claude Code 在运行过程中会持续写入以下文件会话历史~/.claude/sessions/YYYY-MM-DD/— 每天的对话记录日志文件~/.claude/logs/— 调试日志和错误日志凭据缓存~/.claude/credentials.json— 认证信息配置文件~/.claude/settings.json— 用户配置MCP 日志~/.claude/logs/mcp-*.log— MCP 服务器日志长时间使用后会话历史和日志文件可能累积到数 GB。npm 缓存目录~/.npm/_cacache也可能占用大量空间特别是频繁安装和更新包时。3. 解决方案方案一清理 Claude Code 缓存最推荐清理 Claude Code 的会话历史和日志文件。# 步骤 1检查 Claude Code 目录大小 du -sh ~/.claude/ du -sh ~/.claude/sessions/ du -sh ~/.claude/logs/ # 步骤 2清理旧会话历史保留最近 7 天 find ~/.claude/sessions/ -type f -mtime 7 -delete # 步骤 3清理日志文件保留最近 3 天 find ~/.claude/logs/ -type f -mtime 3 -delete # 步骤 4验证空间释放 df -h ~ du -sh ~/.claude/方案二清理 npm 缓存# 步骤 1检查 npm 缓存大小 du -sh ~/.npm/ # 步骤 2清理 npm 缓存 npm cache clean --force # 步骤 3清理旧的全局包 npm cache ls 2/dev/null | wc -l # 如果缓存项过多清理 # 步骤 4验证 du -sh ~/.npm/ df -h ~方案三清理系统临时文件# 步骤 1清理 /tmp 目录 # macOS: sudo rm -rf /tmp/claude-* sudo rm -rf /tmp/npm-* # Linux: sudo rm -rf /tmp/claude-* sudo rm -rf /tmp/npm-* sudo journalctl --vacuum-time3d # 清理 systemd 日志 # 步骤 2清理系统日志 # macOS: sudo rm -rf /private/var/log/asl/*.asl # 步骤 3清理 Docker如果使用 Docker docker system prune -a --volumes # 这会清理未使用的镜像、容器和卷 # 步骤 4验证 df -h /方案四清理 Node.js 版本管理器# 步骤 1检查 nvm 占用的空间 du -sh ~/.nvm/ # 步骤 2列出已安装的 Node.js 版本 nvm ls # 步骤 3卸载不需要的旧版本 nvm uninstall 16 nvm uninstall 18 # 只保留当前使用的版本 # 步骤 4验证 du -sh ~/.nvm/ df -h ~方案五Docker 容器中扩展磁盘空间# 步骤 1在 Dockerfile 中清理缓存 # 使用多阶段构建减小镜像大小 FROM node:22-slim AS builder RUN npm install -g anthropic-ai/claude-code # 清理缓存 RUN npm cache clean --force rm -rf /tmp/* FROM node:22-slim COPY --frombuilder /usr/local/lib/node_modules /usr/local/lib/node_modules # 最终镜像不含缓存 # 步骤 2或挂载外部卷 docker run -v claude-data:/root/.claude node:22 claude # 步骤 3定期清理容器 docker container prune docker volume prune方案六配置 Claude Code 自动清理# 步骤 1在 settings.json 中配置自动清理 cat ~/.claude/settings.json EOF { maxSessionHistory: 7, maxLogFiles: 3, autoCleanup: true } EOF # 步骤 2创建定期清理的 cron job # 每周清理一次 Claude Code 缓存 echo 0 3 * * 0 find ~/.claude/sessions/ -type f -mtime 7 -delete | crontab - # 步骤 3验证 cron job crontab -l4. 各方案对比总结方案适用场景推荐指数难度方案一清理 Claude 缓存~/.claude 过大⭐⭐⭐⭐⭐低方案二清理 npm 缓存npm 缓存过大⭐⭐⭐⭐⭐低方案三清理系统临时系统磁盘满⭐⭐⭐⭐中方案四清理 nvm多版本 Node.js⭐⭐⭐⭐低方案五Docker 优化Docker 环境⭐⭐⭐⭐中方案六自动清理长期预防⭐⭐⭐⭐⭐低5. 常见问题 FAQ5.1 清理会话历史会丢失什么会话历史是~/.claude/sessions/中的对话记录文件。清理后无法使用claude --continue恢复旧会话不影响当前正在运行的会话不影响 Claude Code 的配置和凭据不影响 MCP 工具配置5.2 清理日志文件是否安全安全。日志文件仅用于调试和故障排查。清理后不影响 Claude Code 正常运行。如果需要提交 bug 报告可以在清理前先复制相关日志。5.3 npm cache clean --force 是否安全安全。npm 缓存只是下载的包的本地副本清理后下次安装会重新下载。不影响已安装的包。5.4 磁盘空间仍然不足使用以下命令找到最大的文件和目录# 找到最大的目录 du -sh ~/* | sort -rh | head -20 # 找到最大的文件 find ~ -type f -size 100M 2/dev/null | xargs ls -lh | sort -k5 -rh | head -20 # 使用 ncdu 工具可视化磁盘使用 brew install ncdu # macOS ncdu ~5.5 Docker 容器频繁报 ENOSPCDocker 默认存储驱动有存储层限制。解决方案使用docker system prune -a --volumes清理挂载外部卷存储 Claude Code 数据使用多阶段构建减小镜像5.6 CI/CD 环境中磁盘空间不足在 CI 流程中添加清理步骤- name: Free disk space run: | npm cache clean --force rm -rf ~/.npm/_cacache rm -rf /tmp/* df -h / - name: Install Claude Code run: npm install -g anthropic-ai/claude-code5.7 macOS 上其他存储占用大量空间macOS 的其他存储包含缓存、日志、应用数据。清理方法使用du -sh ~/Library/Caches/* | sort -rh找到大缓存清理 Xcode 缓存rm -rf ~/Library/Developer/Xcode/DerivedData/*清理系统缓存rm -rf ~/Library/Caches/*5.8 Claude Code 安装时报 ENOSPCnpm 安装需要临时空间。清理 npm 缓存后重试npm cache clean --force rm -rf /tmp/npm-* npm install -g anthropic-ai/claude-code5.9 配置自动清理后仍然空间不足自动清理只清理 Claude Code 的文件。其他应用Docker、Xcode、浏览器缓存等也需要定期清理。建议使用ncdu或du定期检查磁盘使用情况。5.10 排查清单速查表□ 1. df -h 检查磁盘空间 □ 2. du -sh ~/.claude/ 检查 Claude Code 目录 □ 3. 清理旧会话: find ~/.claude/sessions/ -mtime 7 -delete □ 4. 清理日志: find ~/.claude/logs/ -mtime 3 -delete □ 5. npm cache clean --force □ 6. 清理 nvm 旧版本 □ 7. docker system prune如使用 Docker □ 8. du -sh ~/* | sort -rh 找到最大目录 □ 9. 配置 settings.json 自动清理 □ 10. 创建 cron job 定期清理6. 总结根本原因ENOSPC 磁盘空间不足最常见原因是 Claude Code 会话/日志累积30%和 npm 缓存过大25%长期使用不清理导致磁盘被占满最佳实践定期清理~/.claude/sessions/中超过 7 天的会话文件和~/.npm/_cacache缓存这两个目录是最常见的空间消耗源自动清理在settings.json中配置maxSessionHistory: 7和autoCleanup: true配合 cron job 实现自动清理Docker 环境使用多阶段构建减小镜像大小挂载外部卷存储 Claude Code 数据避免容器可写层空间不足最佳实践建议每月运行一次du -sh ~/* | sort -rh | head -20检查磁盘使用情况及时发现和清理占用空间过大的目录故障排查流程图flowchart TD A[出现 ENOSPC no space left] -- B[运行 df -h 检查磁盘] B -- C[运行 du -sh ~/.claude/ 检查 Claude 目录] C -- D{Claude 目录是否过大?} D --|是| E[清理旧会话和日志] D --|否| F[检查 npm 缓存] E -- G[du -sh ~/.npm/ 检查 npm] F -- G G -- H{npm 缓存过大?} H --|是| I[npm cache clean --force] H --|否| J[du -sh ~/* 找最大目录] I -- K[df -h 检查空间是否释放] E -- K K -- L{空间足够?} L --|是| M[✅ 问题解决] L --|否| J J -- N{找到大目录?} N --|Docker| O[docker system prune] N --|nvm| P[卸载旧 Node.js 版本] N --|系统缓存| Q[清理系统临时文件] N --|其他| R[针对性清理] O -- K P -- K Q -- K R -- K M -- S[配置自动清理预防] S -- T[settings.json cron job]