Linux 中的 inode 是什么?你需要知道的一切Linux 中的 inode 是什么?你需要知道的一切Linux 中的 inode 是什么?你需要知道的一切Linux 中的 inode 是什么?你需要知道的一切
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 中的 inode 是什么?你需要知道的一切

Linux 中的 inode 是什么?它是干什么用的?为什么它很重要以及如何在 Linux 中检查 inode?本指南解释了索引节点的所有重要方面。

我有一个奇怪的问题要问你。

您的 Linux 系统是否曾经抱怨过没有剩余空间,而您的空间显然仍然绰绰有余?

我碰巧发现我还剩很多 GB,但我的 Linux 系统抱怨没有剩余空间。这是我了解索引节点的时候。

索引节点简介

索引节点将系统上每个文件的元数据存储在一个类似表的结构中,通常位于分区的开头附近。它们存储除文件名和数据之外的所有信息。

给定目录中的每个文件都是一个带有文件名和索引节点号的条目。有关文件的所有其他信息都是通过引用索引节点号从索引节点表中检索的。

索引节点编号在分区级别是唯一的。每个分区都有自己的索引节点表。

如果索引节点用完,即使给定分区上还有剩余空间,也无法创建新文件。

Linux 中的 inode 是什么?

Inode 代表索引节点。虽然历史对此并不太确定,但这是他们想出的最合乎逻辑、最好的猜测。它曾经被写成I-node,但连字符随着时间的推移而丢失了。

正如 linfo.org 上所述:

inode是一个数据结构 … ...存储有关<的所有信息em>文件除了其名称和实际数据。

索引节点存储有关它引用的文件的元数据。该元数据包含有关该文件的所有信息。

  • 尺寸

  • 允许

  • 业主/团体

  • 硬盘位置

  • 约会时间

  • 其他信息

每个使用的 inode 引用 1 个文件。每个文件有 1 个 inode。目录、字符文件和块设备都是文件。它们每个都有 1 个 inode。

对于目录中的每个文件,都有一个包含文件名和与其关联的索引节点号的条目。

索引节点在分区级别是唯一的。您可以拥有两个具有相同索引节点号的文件,因为它们位于不同的分区上。索引节点信息存储在每个分区的战略部分中的表状结构中,通常位于开头附近。

Linux下如何查看inode?

您可以使用以下命令轻松列出索引节点数:

ls -i

下图显示了我的根目录以及相应的索引节点号。

每个文件系统拥有的 inode 数量是在创建文件系统时决定的。对于大多数用户来说,默认的 inode 数量已经足够了。

创建文件系统时的默认设置将为每 2K 字节空间创建 1 个 inode。这为大多数系统提供了大量的索引节点。在用完索引节点之前,您很可能会用完空间。如果需要,您可以在创建文件系统时指定创建多少个 inode。

如果索引节点用完,您将无法创建新文件。您的系统也将无法执行此操作。大多数用户不会遇到这种情况,但有可能。

例如,邮件服务器将存储大量非常小的文件。其中许多文件的大小将低于 2K 字节。预计还将不断增长。因此,邮件服务器在空间不足之前就面临着 inode 耗尽的风险。

一些文件系统(如 Btrfs、JFS、XFS)已经实现了动态 inode。如果需要,他们可以增加可用的 inode 数量。

索引节点如何工作?

创建新文件时,会为其分配索引节点号和文件名。索引节点号是该文件系统中的唯一编号。名称和索引节点号都作为条目存储在目录中。

当我运行 ls 命令“ls -li /”时,文件名和 inode 编号是存储在目录 / 中的内容。剩余的信息用户、组、文件权限、大小等是使用 inode 号从 inode 表中检索的。

您可以在 Linux 中使用 df 命令列出每个文件系统的 inode 信息:

df -hi

索引节点和软/硬链接

软链接或符号链接是 Linux 的一个众所周知的功能。但是,当您在 Linux 中创建符号链接时,索引节点会发生什么情况呢?在下一张图片中,我有一个名为“dir1”的目录,一个名为“file1”的文件,里面有“ dir1 ” 我有一个名为“slink1”的软链接,它指向“. ./file1“

现在我可以递归列出并显示索引节点信息。

正如预期的那样,dir1 和 file1 具有不同的 inode 编号。但软链接也是如此。创建软链接时,您会创建一个新文件。在其元数据中,它指向目标。对于您创建的每个软链接,您都使用一个索引节点。

使用 ln 命令在 dir1 中创建硬链接后:

ln ../file1 hlink1

索引节点号列表为我提供了以下信息:

您可以看到“file1”和“hlink1”具有相同的inode编号。说实话,由于 inode,硬链接才成为可能。硬链接不会创建新文件。它只是为相同的数据提供一个新名称。

在旧版本的 Linux 中,可以硬链接目录。甚至可以让给定目录成为其自己的父目录。由于 inode 的实现,这成为可能。现在对此进行了限制,以防止用户创建非常混乱的目录结构。

inode 的其他含义

inode 的工作方式也是无法在不同文件系统之间创建硬链接的原因。允许这样的任务可能会导致索引节点号发生冲突。另一方面,可以跨不同的文件系统创建软链接。

由于硬链接与原始文件具有相同的索引节点号,因此您可以删除原始文件,并且通过硬链接仍然可以使用数据。在这种情况下,您所做的就是删除指向该索引节点号的名称之一。链接到该索引节点号的数据将保持可用,直到与其关联的所有名称都被删除。

Inode 也是 Linux 系统无需重启即可更新的一个重要原因。这是因为一个进程可以使用库文件,而另一个进程则用新版本替换该文件。因此,为新文件创建一个新的inode。已经运行的进程将继续使用旧文件,而每次对它的新调用都会导致使用新版本。

inode 附带的另一个有趣的功能是能够将数据存储在 inode 本身中。这称为内联。这种存储方法的优点是节省空间,因为不需要数据块。它还通过避免更多的磁盘访问来获取数据来增加查找时间。

某些文件系统(例如 ext4)有一个名为 inline_data 的选项。启用后,它允许操作系统以这种方式存储数据。由于大小限制,内联仅适用于非常小的文件。 Ext2 及更高版本通常会以这种方式存储软链接信息。也就是说,如果大小不超过 60 字节。

结论

索引节点不是您直接与之交互的东西,但它们发挥着重要作用。如果一个分区包含许多非常小的文件(例如邮件服务器),那么了解它们是什么以及它们如何工作可以为您节省很多问题。

我希望您喜欢这篇文章,并了解有关 Linux 中 inode 的一些新的、重要的知识。订阅我们的网站以了解更多 Linux 相关信息。

©2015-2025 艾丽卡 support@alaica.com