Linux基础IO之理解文件系统

(。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~icon-default.png?t=N7T8https://blog.csdn.net/ky233?type=blog

点个关注不迷路⌯'▾'⌯

目录

 一、文件系统

1.了解磁盘

1.背景知识

2.了解磁盘

3.磁盘结构

4.磁盘的存储结构

5.磁盘的抽象结构

2.块组

1.Super Block

2.Data Blocks

3.inode Table

4.Block Bitmap

5.inode Bitmap

6.GDT

7.inode编号

8.面试题

3.软硬连接

1.软连接

2.硬链接 

3.软硬连接的区别


 一、文件系统

1.了解磁盘

1.背景知识

有没有没有被打开的文件呢?在哪里呢?

答案是肯定的,在磁盘里存在。

那么我们学习磁盘文件的侧重点是什么呢?

如何进行对磁盘文件进行分门别类的存储,用来支持更好的存取!

2.了解磁盘

  • 内存:掉电易失存储介质
  • 磁盘:永久性存储介质,如SSD,U盘,flash卡......

磁盘是一个外设,是我们计算机中唯一一个机械设备!所以磁盘的缺点就是慢!那么OS会有哪些提速的方式呢?

3.磁盘结构

磁盘是一个物理结构,里面存在磁盘盘片、磁头、伺服系统、音圈马达......

盘面上会存储数据,像磁盘写入,本质上就是改变磁盘上的正负形!

4.磁盘的存储结构

Linux基础IO之理解文件系统_第1张图片

磁盘虽然看起来很光滑但是其实上面是有像是同心圆一样的磁道来存储数据的,而被每个光盘被分为好几个扇区,所有盘面上同一位置的扇区叫做柱面

那么在物理上是如何写到指定扇区的呢?

CHS寻址:

  • 确定在哪一个柱面上
  • 确定对应的是哪一个磁头
  • 然后再确定是哪个扇区

利用CHS寻址法就可以找到任意一个扇区,那么所有的扇区我们就都可以找到了

5.磁盘的抽象结构

我们可以把磁盘展开想象成一个线性结构,每一个扇区就是我们一个单位的大小,那么这就像是一个数组!我们访问一个扇区只需要知道数组的下标就可以访问了。我们一般把这种寻址叫做LBA寻址法,那么我们只需要把LBA转化成CHS就可以找到了

Linux基础IO之理解文件系统_第2张图片

那么我们现在对于磁盘的管理就变成了对数组的管理!

这个数组太大了,我们就可以对此来进行分区,比如分成5个100G,可是还是很大,然后我们还可以对这100G继续分区成一个个的块组!这样分治来处理!

2.块组

根据上面的学习,我们已经知道了块组是什么,那么块组里面都有什么呢?

Linux基础IO之理解文件系统_第3张图片

1.Super Block

这代表的是文件的属性信息,注意这代表的是整个分区的信息,这是为了防止,盘片意外被刮花,所以会有很多个!

2.Data Blocks

首先我们要知道,虽然磁盘的基本单位是扇区,但是操作系统(文件系统部分)和磁盘进行IO的基本单位是4kb这样做的原因由两个:

  1. 太小了会导致多次IO,导致效率的降低
  2. 如果和磁盘的基本单位一样,那么如果磁盘的基本单位变了,OS的源代码也需要改变。

那么其实Data block就是多个4kb大小block的集合,保存的都是特定文件的内容!

3.inode Table

inode是一个大小为128字节的空间,保存的是对应文件的属性。

那么该块组内是所有文件的inode的空间集合,需要标识唯一性,每一个inode块,需要有一个inode编号,一般而言一个inode,一个inode编号。

4.Block Bitmap

就是位图,每一个比特位和特定的block是一一对应的,其中比特位为1,代表block被占用,否则表示可用!

5.inode Bitmap

和Block Bitmao类似,每一个比特位和特定的inode是一一对应的,其中bitmao中比特位为1,代表改inode,被占用,否则表示可用!

6.GDT

块组表述符:这个块组多大,已经使用了多少,有多少个inode等等。表示的块组的信心

所以只要把以上信息管好就可以追溯和管理,每一个块组都这样干,整个分区就被写入了文件系统信息!

那么一个文件对应一个inode属性节点,inode编号,那么一个文件只能有一个block吗?

答案是当然不是,我们只要找到文件对应的inode编号,就能找到该文件的inode属性集合,这个属性集合是个类,里面有一些属性和同一个组块的编号这样就可以找到属于同一组块的编号!

而且data block中不是所有的data block只能存文件数据,也可以存其他块的块号!这样就形成了类似多叉树的结构

7.inode编号

我们找到文件是通过inode编号->分区特定的BlockGroup->inode结构体->属性->内容

那么我们不禁有些疑问,inode编号是怎么获得的呢?

而且我们还发现Linux中inode属性里是没有文件名的

那么我们要知道在一个目录下是可以有多个文件的,但是不能有同名的文件,而且目录也是一个文件,所以目录其实也是有自己的inode的也有自己的Data Block

其实,文件名和inode编号是互为key值的,当我们创建一个文件的时候,输入文件名,那么文件系统就会给分配一个inode编号,这样我们就可以根据文件名获得所对应的inode编号,来找到相应的文件了!

8.面试题

有些时候我们看到还有空间但是却创建不了这是为什么呢?

这是因为我们的inode和Date Blocks是固定的,我们的inode没了自然就没办法去创建了!反之也是一样的!

3.软硬连接

1.软连接

ln -s text1.txt soft.txt

我们可以这个样子创建软链接

2.硬链接 

ln text2.txt hard.txt

我们可以这个样子创建硬链接 

3.软硬连接的区别

本质的区别就是有没有独立的inode!

软连接有独立的inode所以是一个独立的文件!

意义就是相当于一个快捷方式!可以理解成软连接连接的内容,是指向的文件对应的路径!

硬链接没有独立的inode,不是一个独立的文件!

硬链接就是在指定的目录下,建立了文件名和指定inode的映射关系,类似于起了别名!

如果我们删除text2.txt,那么我们发现属性中的一个参数由2变成了1,这类似于智能指针里的引用计数!

你可能感兴趣的:(linux,数据库,运维)