为什么 NFS 上的 rm 不能立即释放空间?

为什么 NFS 上的 rm 不能立即释放空间?

我在一台 SUSE Enterprise 服务器上,该服务器已通过 NFS 安装安装了驱动器。我已通过 创建了一个 34GB 文件来dd if=/dev/Zero of=test_file bs=8k Count=4194304测试 NFS 共享的写入速度。之后我通过 删除了该文件rm test_file,然后立即使用df

used输出的列中的值df开始减少。我df每隔约 10 秒调用一次进行更新,每次看到used值都减少了约 2GB。

因此,rm test_file尽管我再次可以使用命令提示符,但该命令似乎尚未完成其工作(因此 rm 一定返回了“0”,对吗?)。后台发生了什么?

答案1

为 NFS 共享提供后端存储的远程节点上的文件系统不会立即释放空间。

严格来说,POSIX 语义并不要求删除文件以立即释放其使用的空间(它们实际上并不要求它释放任何空间根本,这对于某些用例来说非常重要)。正因为如此,以及释放空间可能需要很长时间,一些文件系统不会等待释放发生,而只是在确保文件条目不会出现在目录列表中后才返回(这是 POSIX 所要求的全部)。

释放空间可能需要一段时间,可能的原因包括:

  • 文件系统可能会在释放空余空间时清理这些空间,以防止信息泄露。这几乎总是一项昂贵的操作。
  • 文件系统可能位于 SSD 或精简配置的存储上,并配置为通知下层该空间现在未使用。此操作也可能需要相当长的时间。
  • 文件系统可能需要更新数据结构以用于内部会计目的。这可能需要很长时间,但通常并不是一件容易的事。
  • 文件系统可能需要更新内部数据结构以正确处理文件中的任何引用链接或其他共享区域。

相关内容