报“No space left on device”应先检查inode而非磁盘容量,因Composer缓存大量小文件易耗尽inode;需用df -i确认/tmp和cache-dir所在分区的inode使用率,再安全清理进程、缓存及系统临时文件,并禁用vcs和ZIP缓存。

报“No space left on device”先看 inode 而不是磁盘容量
Composer 卡在 Downloading 阶段、报 No space left on device,大概率不是磁盘块用光了,而是 inode 耗尽——尤其在 Linux/macOS 的 /tmp 或 ~/.composer/cache 所在分区。每个缓存包(比如 monolog/monolog/1.27.0/)都会建独立子目录,全是小文件,迅速吃光 inode。
立刻执行这两条命令确认:
-
df -h—— 看磁盘使用率(别只盯着它,容易误判) -
df -i—— 重点看/tmp和$(composer config --global cache-dir)所在挂载点的Use%;若接近 100%,就是 inode 不够
Windows 用户等效检查:PowerShell 中运行 Get-PSDrive C | Select-Object Used,Free,并手动进 %APPDATA%\Composer\Cache\ 和 %TEMP% 查看文件数量。
清缓存前必须杀掉所有 composer 进程
直接 rm -rf ~/.composer/cache 极其危险:IDE 内嵌的 Composer、未退出的 php /path/to/composer.phar、残留锁文件,都会导致删一半就报 file_put_contents(): No space left on device,甚至损坏缓存索引。
安全清理顺序:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 查进程:
ps aux | grep composer(Linux/macOS)或tasklist | findstr composer(Windows) - 杀干净:
kill -9 $(pgrep -f "composer")或手动结束对应 PID - 再跑:
composer clear-cache—— 它会校验完整性、跳过被项目引用的缓存项、重建元数据 - 验证:
du -sh $(composer config --global cache-dir),应明显变小;若仍报错,说明还有进程锁着文件,得重试 kill
手动清理系统临时目录(常被忽略的真凶)
Composer 解压 ZIP、生成 autoloader、运行脚本时重度依赖 sys_get_temp_dir() 返回的路径。这个目录在 Linux/macOS 是 /tmp 或 $TMPDIR,Windows 是 %TEMP%(通常为 C:\Users\用户名\AppData\Local\Temp)。里面堆积大量 composer_*.zip、php*.phar、composer_extract_* 临时文件,且不自动清理。
操作建议:
- Linux/macOS:
ls -lt /tmp | grep composer,删掉残留项;也可用find /tmp -name "composer_*" -type f -mtime +1 -delete - Windows:打开资源管理器,定位到
%TEMP%,搜索composer,手动删除匹配文件夹 - 注意:
/tmp可能是内存挂载(tmpfs),空间小但 inode 多;若它占满,df -i /tmp比df -h /tmp更关键
禁用高开销缓存项,防止反复爆满
composer clear-cache 只清一次,治标不治本。Composer 默认缓存 ZIP 包(cache/files/)、解压后源码(cache/vcs/)、repo 元数据(cache/repo/)三类内容,其中前两项最占 inode 和磁盘。
推荐配置(立即生效,无需重启):
- 禁用 Git 克隆缓存(省最多空间):
composer config --global cache.vcs false;之后所有包强制走--prefer-dist,已存在的vcs/目录可安全手动删 - 禁用 ZIP 缓存:
composer config --global cache-files-ttl 0 - 禁用解压后源码缓存:
composer config --global cache-files-maxsize 0 - (可选)换缓存位置到大分区:
composer config --global cache-dir "/mnt/data/composer-cache"
注意:cache/repo/ 别碰——它是 JSON 元数据,体积小、加速解析,删了会导致首次 composer update 卡很久。

















