理解inode


inode是文件系统里面的一个数据结构。
注:这里讲的文件是硬盘级文件,而不是被加载进内存被进程管理的进程级文件

磁盘构成

img
磁盘是一种机械设备,比如机械硬盘就是磁盘的一种。(固态硬盘不是磁盘)

磁盘可以存储信息,可以划分为三个区域来存储信息。

1.不同的磁盘面
2.柱面
3.扇区

柱面是把磁盘划分成许多同心圆,不同的同心圆是不同的柱面。
扇区是在同一个同心圆上面,有很多小块,被称为扇区。

磁盘存储的映射

文件系统在管理物理内存时,会进行抽象管理。硬盘会被划分成一个线性结构。并且将这一个线性结构分块管理
在这里插入图片描述
经过层层划分,最终会划分出一个叫做block group的分区。
在这里插入图片描述
一个block group里面有很多成员组成,主要讲几个重要的。


inode和data block(重点)

文件系统是通过struct file去管理硬件级文件的。struct file里面有一个dentry成员,可以通过dentry成员找到inode。(可以理解成struct file里面可以找到inode)

为什么要找到inode呢?因为通过inode可以找到文件数据。

inode是一个数据结构,里面存放着各种文件信息,和文件数据区的映射关系。

map[inode id] = data block

inode bitmap

inode里面有一个成员叫inode id。每一个文件都有自己的inode id。
在不考虑硬链接的情况下,一个文件只有一个inode id。系统在查找文件的时候也是用inode id去查找的。

我们可以用ls -i来查看文件的inode id。前面那些数字就是inode id
在这里插入图片描述
也可以用stat来查看更多文件信息,可以看到inode id是665534
在这里插入图片描述

知道了inode id,就知道了inode bitmap是干什么的了。
bitmap是位图,每一个bit位代表一个inode id是否空闲,没有被使用。使用过了就不能再使用了。

block bitmap

block bitmap也是位图,每一个bit位代表一个data block是否空闲,空闲就可以往里面放数据。

inode table

一个block group里面可以存很多个文件信息。由inode bitmap也知道了,一个group里面会有很多inode需要管理,因此inode table就是用来存放inode的。

data table

存放文件的数据的。

查找文件的示意图(重点)

1.通过文件名找到inode id是多少
2.先通过inode id找到inode在inode table的位置
3.然后通过映射关系,找到该文件的数据在data block的那些位置,然后拿到那些数据
在这里插入图片描述

创建新文件需要的操作(重点)

1.找到一个空闲的inode id,用inode 存下来这个新文件的文件信息。
2.把文件内容存下到data block
3.记录下文件内容在哪些data block,并保存在inode里面。
4.添加文件名到目录

为什么明明还有空间,却创建不了文件

我们知道inode id在一个group里面是有限的,当inode id用完的时候,即使有空间,仍然无法创建文件。

创建目录需要的操作

我们知道,目录也是文件的一种。因此目录也与inode有关系。

和创建文件需要的操作类似,但是不完全一样,因为目录没有数据。
目录的data block里面存放的是目录下文件名和inode id的映射关系。

总结一下所有步骤:
1.找一个空闲的inode id,用这个inode存下目录的文件信息
2.把文件内容存到data block里面(这里的内容是文件名和inode id的映射关系)
3.用inode记录下数据放在了哪些data block里
4.添加文件名到目录

删除文件需要的操作

删除文件并不需要将data block和inode清空,只需要把这个inode id和data block id变成空闲的即可。这样操作没有成本。

这也是为什么数据删除后可以被恢复,原因就是数据只要没有被覆盖,还存在那里。

目录文件与inode

有一个现象,当一个目录文件是不可读的时候,我们仍然可以访问目录里面的文件内容。但是当一个目录文件不可执行时,我们是无法读和写目录里面的文件内容的。

这和inode也是有关系的。

当一个目录文件不可读时,只是inode里面的信息不可读而已,但是我们仍然能映射到data block拿到目录下文件的inode id去访问文件。但是如果没有目录的x权限,我们是无法通过inode 拿到data block的映射关系的。

硬链接

一般情况下,一个文件名对应一个inode,但是硬链接这种特殊文件可以和其他文件共用同一个inode。

ln 文件 硬链接

注:硬链接不是链接,是普通文件。

文件信息中的硬链接数

这个2是就是文件的硬链接数。
为什么一个刚刚创建出来的目录硬链接数是2?
在这里插入图片描述
回忆硬链接的定义,共用同一个inode id的文件数量就是硬链接数。还有谁和这个目录共用同一个inode id呢???

我们知道linux下每一个目录都有两个隐藏文件.和…,分别是当前目录和上级目录。

原来是.这个文件和tmp目录共用同一个inode id,因此硬链接数是2.

在这里插入图片描述
在这里插入图片描述

软链接

软链接有点像快捷方式。如果可执行程序在比较深的目录下,不方便进入去运行(或者用绝对路径也不方便)就可以在当前目录下建立文件的软链接,那样就可以在当前目录下运行了。

ln -s 文件 软链接

l就是软链接
在这里插入图片描述

文件信息中的三个时间a c m

Access 最后访问时间
Modify 文件内容最后修改时间
Change 属性最后修改时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值