试图了解删除硬链接与释放 inode 表中的值有何关系?

试图了解删除硬链接与释放 inode 表中的值有何关系?

当删除硬链接时,链接会被移除,但文件本身的内容会继续存在(即,其空间不会被释放),直到指向该文件的所有链接都被删除。

我的理解是仅有的当文件本身被删除时,这个特定文件的 Inode 表是否会重置?因为即使原始文件也是由1在 ls 命令的元数据中。

比如说,我有 2 个指向某个文件的硬链接,我删除了这两个硬链接,在删除最后一个链接之前,Inode 数据仍然在表中被索引?这样对吗?

使用该命令时,df -hi它不会提供太多有关空间是否已清除的信息。因此,我的第二个问题是,我如何才能确切知道 Inode 数据何时已清除且不占用空间?

答案1

在以下情况下,inode 的空间以及 inode 表中的块和空间将被释放:

  • 指向该 inode 的最后一个目录条目被删除。也就是说,不再有指向该 inode 的硬链接,并且
  • 引用该 inode 的最后一个文件描述符已关闭。也就是说,该 inode 不再使用,并且没有打开的文件描述符引用它。

例如,一个进程可能会创建一个文件,打开该文件,然后立即取消链接,以便将该文件用作临时存储。如果该进程退出或以其他方式被终止,其文件描述符将自动关闭,临时文件将自动释放。

在 inode 实际释放之前,inode 及其块将处于使用状态,已使用的空间将被视为 df 显示的已使用块和 inode。当最后一个文件描述符和硬链接消失时,空间将被释放,df 的报告也将随之更新。

相关内容