答案是inode耗尽而非磁盘空间不足;需先用df -i(linux/macos)或get-psdrive(windows)确认缓存及/tmp分区inode使用率是否接近100%,再停掉所有composer进程,执行composer clear-cache,并可手动清理vcs/目录或禁用cache.vcs等非必要缓存类型。

磁盘已满不是真没空间,而是 inode 耗尽
报 No space left on device 却发现 df -h 显示还有几十 GB 剩余?十有八九是 inode 用光了。Composer 缓存目录(比如 ~/.composer/cache 或 %APPDATA%\Composer\Cache)里动辄数万个小文件——每个 Git 仓库、每个 ZIP 包版本、每个哈希子目录都占一个 inode。macOS(APFS)、Docker 容器、某些云主机尤其敏感。
必须先验证:
- Linux/macOS:运行 df -i,重点看 /tmp 和缓存所在分区的 Use%
- Windows:PowerShell 中执行 Get-PSDrive C | Select-Object Used,Free(注意这不是 inode 指标,但可辅助判断磁盘块是否真满)
- 若 Use% 接近 100%,哪怕 df -h 显示 20GB 剩余,也会失败
清缓存前必须停掉所有 composer 进程
直接 rm -rf ~/.composer/cache 风险极高:IDE 内嵌的 Composer、后台未退出的 php composer.phar、残留锁文件,都会导致删一半就卡死,甚至损坏缓存索引。
- 查进程:
ps aux | grep composer(Linux/macOS)或tasklist | findstr composer(Windows) - 杀干净:
kill -9 $(pgrep -f "composer")或手动结束对应 PID - 再跑:
composer clear-cache——它会校验路径权限、跳过被占用项、安全删除无效/损坏/过期条目 - 留意输出:若提示
Permission denied,说明部分子目录属主不是当前用户(比如曾用sudo composer),需先修复权限
只删旧版 ZIP 包,不碰元数据和 vcs
composer clear-cache 不会删“有效但陈旧”的包(比如你三年前装过的 monolog/monolog 1.18.0),这类冗余 ZIP 最占空间又最无用。手动精简更高效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进缓存根目录:
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 - 可安全清
vcs/目录:rm -rf $(composer config --global cache-dir)/vcs(禁用后 Composer 自动 fallback 到 dist 安装) - 别碰
repo/packagist.org/:这是核心元数据快照,删了首次update会卡很久
长期预防:关掉非必要缓存类型
Composer 默认同时存 ZIP(cache.dist)、源码(cache.source)、Git 仓库(cache.vcs),三者叠加就是 inode 杀手。治本要从配置入手:
- 禁用 ZIP 缓存:
composer config --global cache.dist false - 禁用源码缓存:
composer config --global cache.source false - 禁用 Git 仓库缓存:
composer config --global cache.vcs false - 限制 ZIP 缓存有效期(单位秒):
composer config --global cache-files-ttl 86400 - 临时切到大 inode 分区:
composer config --global cache-dir /tmp/composer-cache(前提是/tmp分区 inode 充足)
这些配置生效后,新安装不再生成对应类型文件;已存在的 vcs/ 和 files/ 可手动删,但 repo/ 保留更稳妥。真正容易被忽略的是:禁用 cache.vcs 后,Composer 会自动走 --prefer-dist 流程,无需额外参数,也不影响功能。










