我正在尝试通过删除文件来释放 ZFS 上的空间。它们很大(>1GB),所以应该显示在数字中。不幸的是,在取消链接文件后,df
没有显示任何可用空间的增加。似乎删除的文件在某处有硬链接(但ls
显示所有文件的硬链接计数器,1
除非我手动创建硬链接(我测试过))。
删除文件的脚本会打开、读取并关闭这些文件(我已检查过),因此没有打开的文件句柄。之后,它用来unlink()
删除文件。 ls
也不再显示它们。只是可用磁盘空间没有增加。
我们正在使用快照的 ZFS 功能。也许这就是没有释放任何内容的原因?
欢迎提供任何与我的问题有关的文档想法或提示。
答案1
根据 Oracle 的zfs 文档,
快照是文件系统或卷的只读副本。快照几乎可以立即创建,并且最初不会占用池中的额外磁盘空间。但是,随着活动数据集中的数据发生变化,快照会通过继续引用旧数据来占用磁盘空间,从而阻止释放磁盘空间。
如果您希望释放磁盘空间,则必须清除引用该文件的快照。您可能还需要阅读写时复制,这就是zfs 工作。
我实际上没有使用过 zfs,但我利用文件系统。btrfs 以与 zfs 类似的方式执行快照,并且会出现完全相同的“问题”。当然,由于我不希望当前工作集中已删除的文件从快照中删除,因此我肯定会预计删除文件时可用磁盘空间保持不变。毕竟,直到删除所有引用(跨所有快照)后,文件才真正被删除。