删除Docker Artifactory仓库文件夹未释放磁盘空间,如何触发空间回收?
Artifactory删除工件后磁盘空间未释放的解决步骤
我之前也碰到过一模一样的糟心事——用AQL删了一万八千多个镜像,结果磁盘空间纹丝不动,Artifactory的存储统计也没变化,折腾了好一阵才理清问题。下面是你需要逐一检查和执行的操作:
1. 先确认AQL删除操作真的生效了
- 重新跑一遍你的AQL查询,带上
recursive:true参数,看看目标文件夹里的镜像是不是真的被标记为删除了。如果没加递归参数,可能只删了文件夹本身,里面的工件根本没动。 - 去Artifactory后台的
Admin > Artifacts > Deleted Items里核对,有没有你删除的那些条目。如果这里看不到,说明你的AQL删除命令可能因为权限、语法或者路径错误没执行成功。
2. 正确执行垃圾回收(GC)
你提到执行了垃圾回收,但得确保是系统垃圾回收,且执行过程不受干扰:
- 要去
Admin > Maintenance > Garbage Collection里执行System Garbage Collection,而不是“清理未使用缓存工件”(那个是针对缓存的,和已删除工件无关)。 - 执行GC前,最好把Artifactory切换为只读模式,或者暂停所有CI/CD推送、文件上传操作——如果有新文件写入,GC会跳过正在被占用的已删除文件,导致回收不彻底。
- 查看GC日志:去
Admin > Logs > Request Log或者服务器上的$ARTIFACTORY_HOME/logs/artifactory.log里搜garbage collection,确认有没有GC completed successfully的提示,或者有没有报错、跳过文件的记录。比如某个镜像还在被下载,进程占用了文件句柄,GC就会跳过它,得等下次GC或者重启后再处理。
3. 解决磁盘层面的“已删未放”问题
即使Artifactory回收了文件,Linux文件系统可能因为进程占用,不会立刻释放空间:
- 执行命令
lsof | grep deleted,看看有没有Artifactory相关的进程拿着已删除文件的句柄。如果有,重启Artifactory就能释放这些被占用的空间。 - 用
du -sh $ARTIFACTORY_HOME/data查看Artifactory数据目录的实际大小,对比df -h的挂载点使用情况。如果du显示大小已经变小,但df没变,百分百是进程占用问题。
4. 手动刷新存储统计
Artifactory的admin/advanced/storage_summary不会实时更新,需要手动触发:
- 进入存储统计页面,点击右上角的
Refresh按钮,等待几分钟后再看,工件数量和存储大小应该就会同步更新了。
5. 极端情况:检查重复数据删除与孤立哈希块
如果你开启了Artifactory的重复数据删除功能,已删除工件对应的哈希块可能还被其他工件引用,导致无法回收:
- 去
Admin > Repositories > Repositories,找到目标仓库的Storage设置,手动触发Optimize Storage功能——这个操作会清理所有未被引用的孤立哈希块,释放真正的磁盘空间。
内容的提问来源于stack exchange,提问作者Peter Kahn
相关产品推荐
相关产品推荐

