关于linux的inode索引节点基本原理详解

概述

众所周知,文件储存在硬盘上,硬盘的最小存储单位叫扇区(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block)。这种由多个扇区组成的块是文件存取的最小单位,块的大小,最常见的是4KB,即连续八个sector组成一个block,文件数据都储存在块中,但是这仅仅是储存数据的内容,而文件的创建者、文件的创年日期、文件的大小等信息是另外单独存放的,叫做文件的元信息,储存元信息的区域就叫做inode,中文译名为”索引节点,inode (index node) 表中包含文件系统的所有文件列表。

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

inode内容

  • 文件的字节数

  • 文件拥有者的User ID

  • 文件的Group ID

  • 文件的读、写、执行权限

  • 文件的时间戳,共有三个:

    1、ctime指inode最近一次变动的时间
    2、mtime文件内容最近变动的时间
    3、atime指文件最近一次访问的时间。

  • 链接数,即有多少文件名指向这个inode

  • 文件数据block的位置

查看inode

可以用stat命令,查看某个文件的inode的详细信息:
在这里插入图片描述
使用ls -i命令,也可以查看某一个文件的inode节点号:
在这里插入图片描述
使用ls -i命令,可列出整个目录下的文件名和文件的inode号码:
在这里插入图片描述

ls -l可以查看文件或目录一共被调用了几次,就是有几个文件指向它,一般都是1,除了目录默认为2,还有硬链接,几个硬链接就是几
在这里插入图片描述

inode大小

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。
查看每个硬盘分区的inode总数和已经使用的数量,可以使用df -i命令
在这里插入图片描述
查看每个inode节点的大小:
ext4文件系统使用dumpe2fs -h /dev/mapper/vg01-lv02 | grep “Inode size”
在这里插入图片描述
xfs系统用xfs_info命令查看
在这里插入图片描述

读取数据过程

在linux操作系统中表面上是通过文件名打开文件的,实际上分为以下三步:

  1. 查找文件名对应的inode号
  2. 通过inode号获取inode信息
  3. 根据inode信息,找到文件数据所在的block,读出数据

注意事项

  • 有时,文件名包含特殊字符,无法正常删除,这时,直接删除inode,就起到删除文件的作用
  • 移动文件或重命名文件,只是改变文件名,不影响inode号码
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
  • 由于每个文件必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况,这时就无法再硬盘上创建新文件,所以对于公用的文件系统,建议为相关用户设置磁盘限额

硬链接与软链接

在linux下面的链接文件有两种,一种类似于Windows系统的快捷方式,可以快速连接到目标文件或目录,另一种则是通过文件系统的inode链接来产生的新文件名,而不产生新文件,这种就是硬链接

硬链接

一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。但是linux系统允许,多个文件名指向同一个inode号码,这意味着,可以用不同的文件名访问同样的内容,可以使用ln 源文件 目标文件 来创建硬链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
硬链接不能对目录创建,也不能跨文件系统创建
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

软链接

软链接就是再创建一个新文件,inode不再相同,而这个文件会让数据的读取指向它链接的那个文件的文件名,并且软链接文件依赖源文件存在,如果删除源文件的话软链接就会失效
可以使用ln -s 源文件 目标文件 来创建硬链接
在这里插入图片描述
hard2指向的是hard的文件名而不是inode号码
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shengjie87/article/details/106936397