什么是孤立 inode?

什么是孤立 inode?

我了解 inode 是什么,但是孤立 inode 的确切定义是什么?我实在不明白这意味着什么。

更新

曾经有一段时间,我管理的服务器耗尽了 inode,但是当我执行 df -h 时,它显示该服务器仅使用了 60% 的空间。我猜这是因为孤立的索引节点。怎么可能所有的索引节点都用完了,但服务器上仍然有“空间”呢?您能在答案中解决这个问题吗?

答案1

孤立 inode 是未附加到文件系统中的目录条目的 inode,这意味着无法访问它。

出现孤立 inode 的原因有多种:

  • 被删除但保持打开状态的临时文件(常见做法)占用文件系统上的索引节点;如果系统在没有正确关闭的情况下重新启动,这些索引节点将保留并成为孤立的
  • 文件系统损坏可能会损坏目录,但不会影响该目录包含的文件的索引节点;然后这些 inode 就被孤立了

fsck为 中的孤立 inode 创建新的目录条目lost+found

答案2

孤立 inode 是一个“半删除”的文件:它不再有目录项,但在某些进程中仍然打开,因此数据仍然存在于磁盘上。当最后一个打开该文件的进程关闭它时,该文件将被完全删除,孤立的 inode 将消失。

孤立 inode 使用 inode 和磁盘空间来存储文件,因此两者都dfdf -i其计为已使用。因此,如果磁盘报告已满但df显示剩余一些空间,则这与孤立的 inode 无关。孤立 inode 是报告的文件系统使用情况df和报告的总文件大小可能不同的原因之一du;看为什么有这么多不同的方法来测量磁盘使用情况?有关此主题的更多详细信息。

许多文件系统在创建文件系统时保留了固定数量的索引节点,这意味着文件系统上最多可以有那么多文件。 inode 的数量是 inode 使用的空间和创建多个文件的能力之间的折衷。如果文件系统上没有更多空间,则您无法增加现有文件或创建新文件(也许您仍然可以在现有目录中创建一些空文件,只要它们仅填充部分使用的块而不是需要分配一个新块)。如果没有更多空闲 inode,您可以增加现有文件,但无法创建新文件。

无论文件系统是由于缺少数据空间还是由于缺少索引节点而已满,内核都会向应用程序报告相同的错误。因此,如果操作需要新的索引节点并且索引节点表已满,即使还剩下一些数据空间,您也可能会收到“磁盘已满”错误。运行df -i即可了解已使用了多少个 inode,还剩多少个。

答案3

  • 孤立 inode 是指已取消链接但在另一个进程中仍处于打开状态的 inode。例如,tail -f {file}在一个 shell 中运行,然后rm {file}在另一个 shell 中运行。文件系统会跟踪这些内容,以便在进程退出时将其清除。

  • 每当你下马不干净时,这是完全正常的。它们只是已被删除的文件,但在重新挂载文件系统时仍以只读方式打开。它们不是原因,而只是一种症状。


对于 inode 问题,运行此查询以获取所有目录中使用的 inode 数量的列表

for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n

您可以参考了解更多检查方法。

相关内容