Linux——文件系统与软硬链接

目录

前言

一、物理上的磁盘

二、磁盘存储的逻辑抽象结构

三、块组内容与工作原理 

1.inode

2.Data bolcks

3.inode 位图

4.bolck bitmap

5.GDT

6.Super Block 

四、软硬链接

五、软硬链接链接目录


前言

我们之前学习了文件标识符,重定向,缓冲区等等,但是这些都是对已打开文件进行管理的,但是操作系统中被打开的文件只占小部分,更多的是那些在磁盘中未打开的文件,但是操作仍然要对其进行管理,今天文件系统他就来了。

一、物理上的磁盘

我们肯定是将文件放到磁盘中的,这是因为磁盘的特性,他速度虽然不快,但可以长期存储文件,并且容量也比较大。现在我们的电脑存储设备大多是固态硬盘,SATA接口或者M.2接口,比起磁盘来体积小速度快,但成本也高,同时数据难以恢复企业更多的使用的是磁盘,也就是机械硬盘

磁盘的内部所示如图

剖析图 

俯视图 

从图片中我们可以看出,磁盘一圈一圈的有很多磁道,每一个磁道又划分了很多扇区,扇区是磁盘的最小存储单元---512字节,这是因为磁盘本身比较慢,按比特位来读写效率非常差,就算只需访问1比特位,也得将整个扇区放到内存中。

如果我想向一个扇区写入,首先得选择哪一面——选择磁头,其次选择哪一个磁道,最后选择磁道中的哪一个扇区。这就是CHS定位法(柱面cylinder,磁头head,扇区sector)。

二、磁盘存储的逻辑抽象结构

我们可以将磁盘想象成可以随机存储的磁带,磁带是很长的线,这根线不就类似于磁道吗,将线卷起来就类似于磁盘了。

既然这样,我们可以将磁盘空间抽象为线性空间,有好几面,每一面又有N多个磁道,每一个磁道又分为N个扇区,这不就类似于数组了呀。

比如1-100000为第一面,1-1000为第一个磁道,依次类推,那么我们对磁盘的管理,也就变成了对数组的管理。

操作系统可以按照扇区(512Byte)为单位进行存取, 但更好的是按照文件块(8个扇区 4KB)为单位进行数据存取。这样能保证8个扇区是连续的,能更好利用局部性原理,让随机寻址变连续寻址,提升效率。

三、块组内容与工作原理 

我们现在有500G的磁盘,我对其进行分区,三个区100G,一个区200G,分区之后,需要进行格式化,也就是将管理的数据写入到块组中。每一个块组的大小是格式化的时候确定的,不可修改。块组里又有什么内容呢?

1.inode

一般情况下,一个文件一个inode,inode为文件编号,在整个分区具有唯一性,Linux内核中,识别文件和文件名无关,只和inode有关

块组中存在 inode 节点表 ,存放文件属性,如文件大小,所有者,最近修改时间等等。因为文件的属性是固定的,虽然内容不一定一样,但是属性占用的空间大小是一样的(128字节),inode表就是一个结构体数组,因此可以很方便的通过inode找到文件相关属性。

2.Data bolcks

前面inode Tables存放的是文件的属性,Data bolock是数据区,存放文件的内容

之前我们提到,每一个数据块大小都是4KB,因此我们也可以对数据块进行编号,inode 结构体里面还有一个数组,存放的是文件的块号,因此该文件的内容也能轻易的找到。

3.inode 位图

每一个bit表示一个inode是否空闲可用。

比如有40000w个inode,那么我们只需要4(KB)就能代表所有的inode是否空闲。

4.bolck bitmap

块位图,比特位表示对应的Data block是否被使用。

5.GDT

前面的Bolck 和 inode等都是关于文件的信息,Group Descriptor Table而描述块组属性信息。

6.Super Block 

超级块存放的是整个分区里面的数据,包括inode和block等等数据。他并没有跟Boot Block一样存放在分区的开始,而是存放在分组中,是因为Boot Block一般不会轻易变化,也就是不易发生损坏,而inode和block等数据会持续的发生变化,一旦Super Block毁坏,整个分区可能都不好了,因此放在组里,可以多放几份,保证Super Block的稳定,这一份挂掉从其他的组再拷贝过来再读取。同时Super 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节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容

小总结一下

用户只用文件名,内核只用inode编号,文件名和inode可以互相映射。自己目录内部直接保存的文件(包括文件夹)都有一份映射关系,因此同一目录下的所有文件不能重命名。因此我想在一个目录下新建、修改、删除文件需要 w 权限(会改变文件映射关系)。

四、软硬链接

链接文件分为两种,一种叫软链接,一种叫硬链接。

软连接代码如下

ln -s 源文件名 新文件名

 硬链接代码如下,也就是没有 -s(soft)

ln 源文件名 新文件名

通过inode编号可以看到,软链接是一个独立的文件,而硬链接不是,因为他和源文件inode编号一样。 

软链接就是新建了一个快捷方式,比如我电脑桌面的英雄联盟就是链接了D盘里面的laucher.exe,如果我们要卸载,只删除掉快捷方式是不行的。

我们知道,inode与文件名互相映射,硬链接不是一个独立文件,文件名不同,但inode相同,由此可推断硬链接的本质就是在指定目录内部添加的一组映射关系

inode内部有引用计数,表面有几个文件名与之映射,当引用计数变为了0,那就代表文件被删除了。

同时今天我们也能明白文件权限后面那个数字是什么意思了,我们可以看到,当我们删除test的时候,inode没变,有一个值从2变成了1,该值就是硬链接数,哪些文件名指向对于的inode

硬链接的应用在linux系统中经常看见, 比如文件中的 "." 和 ".." ,"." 代表当前文件,进入当前文件夹创建的文件夹,会发现 "." 文件的inode就是 dir , ".."文件的inode就是前面文件的 "." 。由于是硬链接的关系,因此我们才可以使用"."找到当前文件夹,使用".."找到上级目录。

五、软硬链接链接目录

软链接可以链接目录,而硬链接无法链接目录。

这是因为操作系统设立限制,比如当使用find查找某个文件时,使用硬链接就会发生环形链接的问题,find如果没有第一时间找到,则会陷入循环。因为硬链接的inode没有改变,他本质就是一个目录文件。

软链接inode改变了,他本质是一个普通文件,find查找时发现名字对不上,便会跳过去寻找其他文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值