理解Linux下的inode

在讲inode之前,首先要明白为什么会有inode ?inode是用来干啥的?带着这两个问题,我将开始讲述我理解的inode 。
设想一个场景,在windows下,创建一个新的文件,这个文件都包含哪些信息?最基本的包含文件属性和文件数据,而文件属性包括文件大小、创建时间、文件类型…数据就是我们在文件中写入的东西,那在Linux下也是一样的,创建一个文件也需要创建这些东西,但是又牵扯到属性和数据分离的问题,所以就有了inode,利用inode来存储文件的属性,利用数据块来存储数据。下面我将详细介绍inode基础知识点:

一、关于文件系统

在这里插入图片描述
上图为磁盘文件系统图,磁盘是典型的块设备,硬盘分区被划分为一个个的block,一个block的大小是由格式化的时候确定的,并且不可以更改。
注意这几点:

  • inode位图:每个bit表示一个inode是否空闲可用
  • 块位图:记录Data Block中哪个数据块已经被占用,哪个数据块没有被占用
  • i节点表(inode Table):存放文件属性
  • Data Block:存放文件内容

二、inode是什么?

文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。

文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点“。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

三、inode的内容

  • Size 文件的字节数
  • Uid 文件拥有者的User ID
  • Gid 文件的Group ID
  • Access 文件的读、写、执行权限
  • 文件的时间戳,共有三个:
    Change 指inode上一次变动的时间
    Modify 指文件内容上一次变动的时间
    Access 指文件上一次打开的时间
  • Links 链接数,即有多少文件名指向这个inode
  • Inode 文件数据block的位置
  • Blocks 块数
  • IO Blocks 块大小
查看inode信息
stat 文件名

在这里插入图片描述

四、inode大小

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。
df  -i

在这里插入图片描述
由于每个硬盘分区inode的数量是有限的,所以可能存在inode已经用完了,但是硬盘还没存满的情况,此时就不能创建新的文件。

五、创建一个新文件,经过了哪些操作?

每个文件都对应一个inode号码,操作系统通过inode号码识别不同的文件

ls -i 命令,查看文件名对应的inode号码
ls -i sum.c

在这里插入图片描述
创建一个新文件的步骤:
在这里插入图片描述

  • 存储属性:内核先找到一个空闲的i节点(这里是21368157),内核把文件信息记录其中
  • 存储数据:该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800,将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推
  • 记录分配情况:文件内容按顺序300,500,800存放,内核在inode上的磁盘分布区记录了上述块列表
  • 添加文件名到目录:文件名和inode之间建立映射关系

六、删除文件,经历哪些操作

  • 找到文件对应的inode号码
  • 把文件对应的inode位图和数据区位图由1置为0
  • 去掉目录里inode和文件名的映射关系

七、打开文件,经历哪些操作

  • 找到文件对应的inode号码(在目录文件中,文件名和inode之间建立了映射关系ls -i 文件名查看)
  • 获取inode信息
  • 根据inode信息(inode中存了文件所使用的数据块列表)找到文件的block,读出数据

八、inode特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

1、有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
2、移动文件或重命名文件,只是改变文件名,不影响inode号码。
3、打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

此篇文章参考大佬博客:https://blog.csdn.net/xuz0917/article/details/79473562

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值