当前位置:网站首页>什么叫做 inode ?带你理解 inode 和对于创建文件和删除文件时 inode 都提供了哪些帮助。
什么叫做 inode ?带你理解 inode 和对于创建文件和删除文件时 inode 都提供了哪些帮助。
2022-07-25 23:46:00 【兔7】


大家好,我是 兔7 ,一位努力学习C++的博主~
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
如有不懂,可以随时向我提问,我会全力讲解~
如果感觉博主的文章还不错的话,希望大家关注、点赞、收藏三连支持一下博主哦~!
你们的支持是我创作的动力!
🧸 我相信现在的努力的艰辛,都是为以后的美好最好的见证!
🧸 人的心态决定姿态!
本文章CSDN首发!
前言
为了更好的理解和观察,这里我都采用Linux环境进行测试!
此博客为博主以后复习的资料,所以大家放心学习,总结的很全面,每段代码都给大家发了出来,大家如果有疑问可以尝试去调试。
大家一定要认真看图,图里的文字都是精华,好多的细节都在图中展示、写出来了,所以大家一定要仔细哦~
感谢大家对我的支持,感谢大家的喜欢, 兔7 祝大家在学习的路上一路顺利,生活的路上顺心顺意~!
inode
为了能解释清楚inode我们先简单了解一下文件系统:

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的,
- Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。
- 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
- GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下。
- 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。
- inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
- i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等。
- 数据区:存放文件内容。

将属性和数据分开存放的想法看起来很简单,但实际上是如何工作的呢?我们通过touch一个新文件来看看如何工作。

为了说明问题,我们将上图简化:

为了理解这个图,接下来我再引入一下:

那么我们现在就更能理解 ls 、 ls -l 、 cat 命令是再做什么了:

那么创建文件的过程我们也就可以解释了:

既然创建文件了,那么这个文件就得有它的 inode号,也就是从inode Bitmap中申请一个 inode号 ,然后从 inode Table 里的对应位置,把当前文件的 inode 属性填进去,然后如果有数据写进去了,那就在 Block Bitmap 中申请 block ,并且建立好 inode 和 block 之间的对应关系,然后将数据写进去,然后再将这个文件的文件名和 inode 号填写进当前目录的 inode Table 中。
创建一个新文件主要有一下4个操作:
- 存储属性
内核先找到一个空闲的i节点(这里是790231)。内核把文件信息记录到其中。- 存储数据
该文件需要存储在三个磁盘块,内核找到空闲块:300,500,800(随便写的)。将内核缓冲区的第一块数据 复制到300,下一块复制到500,以此类推。- 记录分配情况
文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。- 添加文件名到目录
新的文件名 new.txt 。
linux如何在当前的目录中记录这个文件?内核将入口(790231,new.txt )添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

如上就是 inode 的所有知识,如果大家喜欢看此文章并且有收获,可以支持下 兔7 ,给 兔7 三连加关注,你的关注是对我最大的鼓励,也是我的创作动力~!
再次感谢大家观看,感谢大家支持!
边栏推荐
- What is the difference between hot deployment and hot loading?
- Graph traversal DFS, BFS (code explanation)
- R语言安装教程 | 图文介绍超详细
- S4/hana ME21N create Po output control message button missing solution (switch EDI output mode brf+ to Nast mode)
- Leetcode 0135. distribute candy
- numeric学习之iota,accumulate
- [JUC] concurrent keyword volatile
- 抽丝剥茧C语言(高阶)程序环境和预处理
- A long detailed explanation of C language operators
- 图的遍历-DFS,BFS(代码详解)
猜你喜欢

模式之固定与交替顺序执行

Graph traversal DFS, BFS (code explanation)

意向不到的Dubug妙招

获取马蜂窝酒店数据

E-commerce RPA, a magic weapon to promote easy entry

抽丝剥茧C语言(高阶)程序环境和预处理

The process of finding free screen recording software - I didn't expect win10 to come with this function

redis-扩展数据类型(跳跃表/BitMaps/HyperLogLog/GeoSpatial)

Why are there many snapshot tables in the BI system?
![[code case] blog page design (with complete source code)](/img/9e/0e7cab956515b9cc75a7567eb477d2.png)
[code case] blog page design (with complete source code)
随机推荐
redis-扩展数据类型(跳跃表/BitMaps/HyperLogLog/GeoSpatial)
ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
[Muduo] EventLoop event cycle
Serialize operator
面试重点——传输层的TCP协议
模式之固定与交替顺序执行
String functions and memory operation functions
What is the difference between hot deployment and hot loading?
Qt智能指针易错点
在应用中使用 Jetpack 库
LeetCode 0135. 分发糖果
[testing technology automated testing pytest] basic summary of pytest
JS regular expression content:
VSCode格式化Json文件
What is a physical firewall? What's the effect?
Constructors and prototypes
【MUDUO】打包EventLoop和Thread
Regular expression (user name form verification / verification of landline number / regular replacement)
Three board axe! Help you become an excellent software engineer
Zhiniu stock -- 09