inode

编辑
本词条由“匿名用户” 建档。

inode(英文indexnode,读作“eye-node”)是类Unix操作系统管理文件系统的基本数据结构。每个inode在文件系统中由其inode编号唯一标识。目录中的每个名称条目都指向一个索引节点。这包含文件的元数据,指的是文件的数据或目录的文件列表。 应用软件在读取或写入数据时不再区分设备驱动程序和常规文件。由于inode概念,在Unix变体中一切都被视为文件(“在UNIX系统上,说一切都...

inode

编辑

inode英文index node,读作“eye-node”)是类Unix操作系统管理文件系统的基本数据结构。 每个 inode 在文件系统中由其 inode 编号xxx标识。 目录中的每个名称条目都指向一个索引节点。 这包含文件的元数据,指的是文件的数据或目录的文件列表。

应用软件在读取或写入数据时不再区分设备驱动程序和常规文件。 由于 inode 概念,在 Unix 变体中一切都被视为文件(“在 UNIX 系统上,说一切都是文件是相当安全的……”;请参阅一切都是文件)。 因此,此类操作系统在数据存储管理方面不同于其他系统,例如使用 NTFS 的 Windows,但也不同于 VMS 或 MVS。

基础知识

编辑

如果在计算机上保存文件,不仅要保存文件内容(用户数据),还要保存文件创建时间或文件所有者等元数据。 同时,计算机必须能够有效地将相应的用户数据和元数据分配给一个文件名——包括文件路径。这种数据如何组织和存储在数据载体上的规范称为文件系统。 根据应用程序和操作系统的不同,存在不同的文件系统。 文件系统规范由驱动程序实现,驱动程序既可以作为操作系统核心(内核)的内核模块来实现,也可以作为用户空间中的普通程序实现,这种情况很少见。

类 Unix 操作系统(例如 Linux 和 macOS)的文件系统使用所谓的 inode。 这些包含元数据和对用户数据存储位置的引用。索引节点的大小、数量和位置存储在文件系统中的一个特殊位置,即超级块。 inode 被编号并存储在磁盘上的一个片段中。 文件系统的根目录有一个固定的索引节点号。 子文件夹是“普通”文件,其中包含它们包含的文件列表以及作为用户数据的关联 inode 编号的分配。

例如,如果要打开文件/bin/ls,则简化如下:

  • 文件系统驱动程序读取超级块。 这告诉他 inode 的起始位置及其长度。 所以现在可以找到并读取任何 inode。
  • 现在根目录的索引节点将被打开。 由于这是一个文件夹,它包含一个指针,指向它包含的所有文件列表的位置,以及它们的 inode 编号。 搜索bin目录。
  • 现在可以读取bin目录的inode,类似于上一步,可以找到ls文件的inode。
  • 因为 ls 文件是一个常规文件,而不是一个目录,它的索引节点现在包含对所需数据位置的引用。

inode结构

编辑

恰好一个 inode 分配给每个单独的名称,由斜杠 /(斜杠)分隔。 这将保存有关文件的以下元信息,但不保存实际名称:

  • 文件类型(常规文件、目录、符号链接……),见下文;
  • 所有者(UID、用户id)和组(GID、组id)的数字标识符;
  • 所有者(用户)、组(组)和所有其他人(其他)的访问权限;经典用户和权限管理是通过程序 chown(更改所有者)、chgrp(更改组)和 chmod(更改模式)。 访问控制列表 (ACL) 可实现更精细的权限分配。
  • 文件的不同时间:创建、访问(访问时间,atime)和最后修改(修改时间,mtime);
  • inode最后一次状态变化的时间(status,ctime);
  • 文件的大小;
  • 链接计数器(见下文);
  • 对存储实际数据的块的一个或多个引用。

普通文件

常规文件既是用户数据又是可执行程序。 后者由可执行权限标识,并在调用时由系统在单独的进程中启动。 不仅编译的程序被认为是“可执行的”,而且 shebang 指定要使用的解释器的脚本也被认为是“可执行的”。 对于“稀疏文件”,即所谓的稀疏文件,逻辑大小与数据块实际占用的硬盘空间不同。

目录

目录是其“文件内容”是从 en 的表格列表中选择的文件包含的文件。 该表包含一个包含文件名的列和一个包含关联 inode 编号的列。 对于某些文件系统,该表包含附加信息。 这样,ext4也把所有包含文件的文件类型保存在里面,这样在列出一个目录的内容时就不用从所有文件的inode中读取了,每个目录总有一个条目。 和 .. 作为对当前目录或父目录的引用。

硬链接和符号链接

符号链接是特殊文件,包含链接指向的文件路径,而不是数据。 根据文件系统和文件路径的长度,链接要么直接存储在 inode 中,要么存储在 inode 指向的数据块中。

另一方面,硬链接不是特殊文件。 硬链接是指从不同目录或不同文件多次引用 inode。 所有对 inode 的引用(链接)都是等价的; 所以没有原创。 在 inode 中,链接计数表示有多少文件名引用了它。 创建文件后,它为 1,一旦为此文件创建了更多硬链接,它就会增加。 对于一个目录,它比它包含的子文件夹的数量多两个,因为在上面文件夹中的条目旁边和条目“。” 在该文件夹中,所有子文件夹中的条目“..”都引用它。如果删除一个文件,则其条目将从更高级别的目录中删除,链接计数器减一。 如果此时链接计数器为 0,则可能需要等到文件不再被任何程序打开,然后才释放内存空间。

其他类型的文件

除了这些常用文件外,还有其他文件类型:

  • 面向块的设备文件
  • 面向字符的设备文件
  • 命名管道
  • 插座
  • 门(仅限 Solaris

数据引用

编辑

在较旧的文件系统中,索引节点通常包含有限数量的数据块条目,文件的用户数据位于这些数据块中。 由于 inode 中的条目数会严重限制文件大小,因此对于较大的文件,对数据块的引用存储在 inode 中,其中存储具有对数据块的引用的列表而不是用户数据。 从理论上讲,这个原则可以以任何嵌套方式重复。

作为替代方案,更现代的文件系统具有所谓的范围,在这种情况下,inode 中仅存储数据块的连续区域的xxx个和最后一个块的编号。 如果文件没有分片,不管文件大小,只需要保存两个块ID:xxx个数据块的编号和最后一个数据块的编号。

例子

对于 ext2 文件系统,inode 的大小默认为 128 字节。 在其中,一个常规文件的最多 12 个条目每个都引用存储实际内容的数据块。 如果这 12 个块还不够,则 inode 中的一个条目指向一个簇,然后该簇包含对实际数据簇的引用。 这样的引用称为单个间接块。 最多可以使用三重间接块,因此xxx文件大小范围为 16 GiB 到 4 TiB,具体取决于块大小。

inode

一个 inode 结构的例子,在直接寻址的数据块中有 12KiB,在间接寻址的数据块/簇中大约有 1600 万 KiB + 65536KiB + 256KiB,每个大小为 1 KiB:

引用块中的 256 个条目是由于 1KiB 块可以包含恰好 256 个长度为 4 字节(32 位地址空间)的地址。

inode练习

编辑

可以使用 ls -i filename 命令显示文件的 inode 号,find 程序提供了 -inum 选项来搜索具有特定 inode 号的文件。

可以使用 stat 命令查看 inode 中存储的元数据。 debugfs 工具知道 stat 命令来显示 inode 中存储的数据。

在某些文件系统中,可能的 inode 数量以及可能的文件数量是有限的; 如果达到xxx数量,则无法创建更多文件。 创建ext2/ext3/ext4文件系统时可以设置inode数量。 对于包含大量小文件的数据载体,格式化时必须注意选择足够多的 inode。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/358180/

(10)
词条目录
  1. inode
  2. 基础知识
  3. inode结构
  4. 普通文件
  5. 目录
  6. 硬链接和符号链接
  7. 其他类型的文件
  8. 数据引用
  9. 例子
  10. inode练习

轻触这里

关闭目录

目录