linux inode详解

1.inode 和 block 概述.

操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如 Linux操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在 inodeblock中。

文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区 sector,每个扇区存储 512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块 block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是 4KB,即连续八个 sector组成一个 block

文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做 inode,中文译名为 索引节点,也叫 i节点。因此,一个文件必须占用一个 inode,但至少占用一个 block

  • 元信息 → inode
  • 数据 → block

1.1.inode 内容

inode包含很多的文件元信息,但不包含文件名,例如:字节数、属主 UserID、属组 GroupID、读写执行权限、时间戳等。

而文件名存放在目录当中,但 Linux系统内部不使用文件名,而是使用 inode号码识别文件。对于系统来说文件名只是 inode号码便于识别的别称。

1.2.inode 号码

表面上,用户通过 文件名打开文件,实际上,系统内部将这个过程分为三步:

1.系统找到这个文件名对应的 inode号码;
2.通过 inode号码,获取 inode信息;
3.根据 inode信息,找到文件数据所在的 block,并读出数据。

其实系统还要根据 inode信息,看用户是否具有访问的权限,有就指向对应的数据 block,没有就返回权限拒绝。

1.2.1.i node 编号

每一个 inode 都有一个 编号,系统根据 inode 编号可以快速的计算出 inode 信息在磁盘 inodes 存储区的偏移,然后从中获取 inode 信息,再根据 inode信息中记录的 Block 块位置,从Block存储区读出文件内容

inode 编号在一个文件系统中是唯一的,多个文件系统之间可能会出现相同的编号

创建一个新文件的时候,文件名和对应的 inode 编号会存储在目录文件的Block块中(关于目录文件后面会讲到)

文件的 inode 信息中记录了文件 Block 块的位置,Block块中存储着文件的内容,可以使用 ls -i 命令查看文件的 inode 编号

1.3.inode 大小

inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是 inode区,存放 inode所包含的信息。每个 inode的大小,一般是 128字节或 256字节。通常情况下不需要关注单个 inode的大小,而是需要重点关注 inode总数。 inode总数在格式化的时候就确定了。

1.4.inode 耗尽故障

由于硬盘分区的 inode总数在格式化后就已经固定,而每个文件必须有一个 inode,因此就有可能发生 inode节点用光,但硬盘空间还剩不少,却无法创建新文件。同时这也是一种攻击的方式,所以一些公用的文件系统就要做磁盘限额,以防止影响到系统的正常运行。

至于修复,很简单,只要找出哪些大量占用 i节点的文件删除就可以了。

2.硬链接与软链接

2.1.硬链接

通过文件系统的 inode链接来产生的新的文件名,而不是产生新的文件,称为硬链接。

一般情况下,每个 inode号码对应一个文件名,但是 Linux允许多个文件名指向同一个 inode号码。意味着可以使用不同的文件名访问相同的内容。

ln 源文件 目标

运行该命令以后,源文件与目标文件的 inode号码相同,都指向同一个 inodeinode信息中的链接数这时就会增加 1

当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名的访问。删除一个文件名,只会使得 inode中的链接数减 1。类似share_ptr的作用是一样的

需要注意的是不能对目录做硬链接。

通过 mkdir命令创建一个新目录,其硬链接数应该有 2个,因为常见的目录本身为 1个硬链接,而目录下面的隐藏目录 .(点号)是该目录的又一个硬链接,也算是 1个连接数。

2.2.软链接

类似于Windows的快捷方式功能的文件,可以快速连接到目标文件或目录,称为软链接。

ln -s 源文件或目录 目标文件或目录

软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。例如,文件 A和文件 Binode号码虽然不一样,但是文件 A的内容是文件 B的路径。读取文件 A时,系统会自动将访问者导向文件 B。这时,文件 A就称为文件 B的软链接 soft link或者符号链接 symbolic link

这意味着,文件 A依赖于文件 B而存在,如果删除了文件 B,打开文件 A就会报错。这是软链接与硬链接最大的不同:文件 A指向文件 B的文件名,而不是文件 Binode号码,文件 Binode链接数不会因此发生变化。

3.inode的代码表现

inode 是一种数据结构,用来存储文件以下的信息:

1、文件大小
2、文件类型(常规文件、目录、软连接等)
3、权限(读写执行权限)
4、属主(所属用户)
5、属组(所属用户组)
6、链接数(有多少个文件名指向这个inode)
7、文件创建时间
8、文件最近访问时间
9、文件最近修改时间
10、文件内容所在Block位置

可以通过stat命令(stat 文件名)查看文件的 inode 信息

4.inode的宏观表现

linux inode详解

Original: https://blog.csdn.net/m0_46392035/article/details/128753932
Author: @seven@
Title: linux inode详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/812608/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球