答案是inode耗尽而非磁盘块用光;需先用df -i(linux/macos)或get-psdrive(windows)确认缓存及/tmp分区inode使用率是否接近100%,再停掉所有composer进程,执行composer clear-cache,并手动清理cache/vcs/和sys_get_temp_dir()中的残留文件。

不是镜像占空间,是缓存和临时目录吃光了 inodes 或磁盘块——直接删镜像配置没用,得清 cache/files/、cache/vcs/ 和 sys_get_temp_dir() 里的残留文件。
先确认是磁盘满还是 inode 满
报 No space left on device 却发现 df -h 还剩几十 GB?大概率是 inode 耗尽。Composer 缓存里每个包版本都建独立子目录(比如 ~/.composer/cache/files/monolog/monolog/1.27.0/),全是小文件,df -i 的 Use% 接近 100% 就会卡死。
- Linux/macOS:运行
df -i,重点看/tmp和缓存所在分区(比如/home) - Windows:PowerShell 中执行
Get-PSDrive C | Select-Object Used,Free,虽不直接显示 inode,但可辅助排除真实磁盘块是否真满 - 别跳过这步——清错地方只会浪费时间
停掉所有 composer 进程再清理
直接 rm -rf ~/.composer/cache 风险极高:IDE 内嵌的 Composer、后台未退出的 php composer.phar、残留锁文件,都会导致删一半就报 file_put_contents(): No space left on device,甚至损坏缓存索引。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 查进程:
ps aux | grep composer(Linux/macOS)或tasklist | findstr composer(Windows) - 杀干净:
kill -9 $(pgrep -f "composer")或手动结束对应 PID - 再跑
composer clear-cache——它会校验路径权限、跳过被占用项、安全删除无效/损坏/过期条目
手动精简 cache/files/ 和清空 cache/vcs/
composer clear-cache 不会删“有效但陈旧”的 ZIP 包(比如三年前装过的 monolog/monolog 1.18.0),这类冗余最占空间又最无用;而 cache/vcs/ 是 inode 杀手,clear-cache 默认完全不管它。
- 进 ZIP 缓存目录:
cd $(composer config --global cache-dir)/files - 删 90 天前的 ZIP:
find . -name "*.zip" -mtime +90 -delete - 删整个旧版包目录(保留每个包最新版):
for d in */; do ls -t "$d" | tail -n +2 | xargs -I{} rm -rf "$d{}"; done - 安全清 Git 仓库:
rm -rf $(composer config --global cache-dir)/vcs - 长期方案:禁用它,运行
composer config --global cache.vcs false,之后所有包强制走--prefer-dist
别忘了 sys_get_temp_dir() 这个隐形炸弹
Composer 解压 ZIP、生成 autoload、执行脚本时重度依赖 PHP 的 sys_get_temp_dir() 返回路径。Windows 默认是 C:\Users\用户名\AppData\Local\Temp,Linux/macOS 是 /tmp——这里堆积的 composer_*.zip、php*.phar 文件往往比缓存还难察觉,且极易触发 inode 耗尽。
- 查真实路径:
php -r "echo sys_get_temp_dir();" - Windows:资源管理器打开该路径,搜
composer_和php,手动删匹配项 - Linux/macOS:
find $(php -r "echo sys_get_temp_dir();") -name "composer_*" -o -name "php*.phar" -delete 2>/dev/null - 长期预防:用环境变量重定向,比如 Linux 启动前加
TMPDIR="/mnt/data/tmp",再运行php composer install
真正麻烦的从来不是“清不干净”,而是多个地方同时漏掉:vcs/ 没关、sys_get_temp_dir() 没查、进程没杀净——三者叠加,清完立刻复现。










