关于juicefs删除文件后仍然存在残留临时文件
起因
juicefs 使用 postgresql 作为元数据引擎,minio 作为对象存储,当从 juicefs 一侧删除文件之后,发现 pg 中仍然存在很多元数据信息,解析 jfs_edge中的文件名之后发现都是一些swp残留文件,去 minio 中查看也确实都存在
原因
1、回收站功能:
JuiceFS 默认启用了回收站功能,被删除的文件会被移入回收站,而不是立即从对象存储中删除。因此,即使在文件系统中删除了文件,回收站中的文件仍然存在,且仍会被 PostgreSQL 记录。要彻底删除文件,需要清空回收站。
2、异步删除:
JuiceFS 的删除操作是异步的,文件删除请求会被提交到后台任务,实际删除可能会有延迟。因此,删除操作可能尚未完成,导致 PostgreSQL 中仍然存在 .swp 文件的记录。
解决方案
juicefs gc --delete $META-URL
忘记格式可以参考 (postgres://juicefs:****@localhost:5432/bucket6)

再次查看就很清爽了
补充
--delete这个选项会真正删除标记为垃圾的数据。默认情况下,juicefs gc 只会标记垃圾数据,而不会立即删除它们。
--threads这个选项允许你指定垃圾回收的线程数。增加线程数可以提高垃圾回收的速度,但也会消耗更多的系统资源。
--dry-run这个选项允许你进行一次“干运行”,即只列出将被删除的文件,而不实际删除它们。这对于预览垃圾回收的结果非常有用。
--min-age 这个选项允许你指定被认为是垃圾数据的最小年龄。例如,--min-age=7d 表示只有超过 7 天没有被访问的数据才会被认为是垃圾数据。
例如:想删除所有超过 7 天没有被访问的垃圾数据,并使用 4 个线程进行垃圾回收,可以这样写
juicefs gc --delete --threads=4 --min-age=7d $META-URL
注意:在运行 juicefs gc 命令之前,建议先使用 --dry-run 选项进行一次“干运行”,以确保你知道哪些数据将被删除。

浙公网安备 33010602011771号