为什么文件有时会改变,但索引节点却不会改变,反之亦然?

为什么文件有时会改变,但索引节点却不会改变,反之亦然?

当文件更新时,相应的索引节点也会更新。但有时会出现以下情况

  1. 文件相同且 inode 是新的
  2. 文件被更改但相应的索引节点较旧

为什么 ?

答案1

你的问题有点不清楚,但我会尝试一下......


如果您使用编辑器等编辑文件,通常会创建一个新文件(带有新的索引节点) - 但包含相同/编辑的数据。原始文件(带有原始索引节点)可以保留作为备份。

另一方面,shell 重定向(>和)会重用 inode,因此在覆盖/添加到文件后 inode 保持不变。 >>(缺点是旧内容通常会被覆盖,因此如果您错误地覆盖了旧内容,则无法挽救旧内容。)


不保证 inode 会“按顺序”使用,首先使用最低的可用 inode。 “最旧的”(第一个删除的)索引节点也不一定在“较新的”索引节点之前使用。当您删除文件时,释放的资源将添加到文件系统维护的两个列表中:一个包含空闲块(即磁盘上的空间),另一个包含空闲 inode。这些列表没有任何特定的顺序 - 释放的资源只是在文件删除时添加。

通常,这两个列表以“块”的形式维护,以便将多个索引节点或多个空闲块松散地分组在一起。当新文件需要资源时,文件系统通常会在移动到下一个文件之前完成其所在“块”中的资源的使用。

因此,总而言之,您不知道将按什么顺序重用索引节点或空间块。它不按 inode 编号或删除顺序排序。所有索引节点或所有空间也不必在重新使用之前“等待”同样长的时间。有些几乎会立即再次使用,而另一些则在很长一段时间内不会被重用(这将取决于它结束于列表中的哪个“块”)。

相关内容