首页 > 解决方案 > 从 Jfrog 工件中删除工件不会释放磁盘空间

问题描述

我有 Artifactory Jfrog 6.16.0 Pro。我安装了插件 artifactCleanup 并针对存储库运行它。它删除了大约 500GB。下一步,我从垃圾箱中删除文件,现在它为零。最后一个我手动运行“垃圾收集”。

空间没有被释放。在存储部分中,它向我显示了以下信息:

Binaries Size: 1.67 TB
Artifacts Size: 663.15 GB
Optimization:  257.79%

请指教,删除工件后如何释放空间?

谢谢!

标签: artifactory

解决方案


首先让我们确定 Artifactory GC 是如何工作的。从文档

部署新文件时,Artifactory 会检查是否存在具有相同校验和的二进制文件,如果存在,则将存储库路径链接到此二进制文件。删除存储库路径后,Artifactory 不会删除二进制文件,因为它可能被其他路径使用。但是,一旦删除了所有指向二进制文件的路径,该文件实际上就不再被使用。为了确保您的系统不会被未使用的二进制文件阻塞,Artifactory 会定期运行“垃圾收集”来识别未使用(“已删除”)的二进制文件并将它们从数据存储中处理掉。默认情况下,它设置为每 4 小时运行一次,并由 cron 表达式控制。

这意味着如果我存储相同的 5GB 文件 100 次,那么我们的工件大小是 500GB,而我们的二进制文件大小仍然是 5GB。这是因为 Artifactory 通过基于校验和的存储进行重复数据删除。

二进制文件大小不应该超过工件大小,恰恰相反,优化不应该通过 100%。然而,这基本上是通过运行“df”命令计算出来的,所以如果 GC 没有运行,它会显示那些二进制文件仍然存在。

这会将我们带到您的问题,这可能不是问题,但之前链接的文档中也提到了预期的行为:

未引用的二进制文件(包括现有的未引用的二进制文件或从垃圾箱中手动删除的工件)将在之前每 20 次 GC 迭代运行一次的 Full GC 策略期间被删除(可配置,'artifactory.gc.skipFullGcBetweenMinorIterations=20')。

这告诉我们,二进制文件的实际删除只会每 20 次迭代发生一次。请尝试手动触发 GC 20 次;完整 GC 的输出将与常规输出不同,为您提供删除内容的摘要。

如果这不起作用,请查看 Artifactory 用户的权限,以确保它可以删除文件。


推荐阅读