Unix文件系统原理简介

文件系统在磁盘中大致分为三个区域:1.超级块 2.i-节点表 3.数据区

1. 超级块:作用是存放文件系统本身的结构信息,比如每个区域的大小以及有哪些空余的磁盘块信息
2. i-节点表:存储文件的属性,比如大小以及所有者之类的。每个i-节点结构的大小一致,而且访问的方式就和数组类似,比如要访问i-节点号为9的i-节点结构,就对应i-节点表中的第10个位置。
3. 数据区:文件的内容就保存在这个区域,磁盘上的所有块的大小都是相同的,如果该文件的内容存储下来不止需要一个块,那就使用多个块进行存储。如果文件很大的话,就需要很多个磁盘块才能存储下来。

事实上,创建一个文件经历了以下步骤:

1. 存储属性:内核找到一个空闲的i-节点结构,把该文件的属性存入该结构中。
2. 存储数据:内核缓冲区将数据分块存储到多个块中
3. 记录分配情况:这么多块,要想顺利的读到这些数据,就需要把这些块的编号按顺序存储到i-节点结构中去。
4. 添加文件名到目录:目录的实质其实也是一张表,里面存储了当前目录下的文件及目录的i-节点号和文件/目录名。(目录也是文件,符合linux的一切皆文件)

大文件的存储:
创建一个文件时,如果有多个数据块,就需要把这些块的编号按顺序存储到i-节点结构中去,但是问题是i-节点结构的大小是有限的,如果有非常多的数据块序列,当i-节点结构存不下时,就会使用数据块来存储存不下的数据块序列,最后将该数据块的序列存进i-节点结构中,就相当于一个二级映射。这样的处理方式还是有一定的问题,当i-节点结构存不下二级映射过的数据块序列时又该怎么办?可以继续使用三级映射,就是存储数据块序列的数据块中最后再存储另一个用于存储数据块序列的数据块序列。

但是这样一直使用这种方法,会导致最后读取一个文件需要通过很多级映射,这时的解决方法就是把这个大文件分成另外一个文件系统了

上面提到目录的实质其实是一张表,里面存储了当前目录下的文件及目录的i-节点号和文件/目录名。大家都知道每个目录下都有两个隐藏文件,一个是.,另一个是.. ,这两项也存储在目录表中。那么目录的子目录该怎么理解呢?子目录的i-节点号和目录名也存在当前目录下,想找到子目录很简单,就是通过对比i-节点号和目录名。可以通过ls -i命令查看文件的i-节点号。说到这就不得不提到符号链接和硬链接的本质区别了。

符号链接又称软链接,它创建了之后,拥有自己的i-节点号,但是它的内容却是指向的链接的文件。这样的机制就决定了软链接可以跨越文件系统进行链接。
硬链接创建了之后,它的i-节点号是共用的链接的文件,所以硬链接产生的文件相当于只是多了一个名字,而且修改了其中一个的内容,另外一个文件的内容也会随之改变(因为数据块是一样的,只是文件名不同)。由于是共用i-节点,又由于磁盘可能有多个文件系统,而每个文件系统的i-节点是重复的,所以跨文件系统的硬链接是不被允许的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值