【Linux】文件系统

磁盘的物理结构

【Linux】文件系统_第1张图片

【Linux】文件系统_第2张图片

一个盘片都有正反两面,一面都会对应一个读写磁头,假设有5个盘片,就是有10个面,那么就会存在10个磁头,这个磁头是一起摆动的,不能单独动,一个磁头负责一面磁片的读写。

【Linux】文件系统_第3张图片

那么磁头是怎么进行读写的呢?

其实在磁片上有很多个微小单元,这些微小单元其实就是一个小磁铁,我们都知道磁铁有南北极,南极表示1,北极表示0,如果要写入数据,就把北极改为南极,对内容做磁化,如果要删除数据就是把南极改为北极

磁片上的结构

【Linux】文件系统_第4张图片

把磁盘的物理构造图像抽象出来后为下图:

【Linux】文件系统_第5张图片

  • 每个盘片被分为很多个同心圆,每一个圆都是一个磁道。
  • 每一个磁道会分为若干个扇区。
  • 每个扇区的存储容量都是512字节,不论离圆心斤或是远。
  • 文件系统访问磁盘的基本单位是4kb

逻辑抽象

【Linux】文件系统_第6张图片

可以把盘面抽象为一个线性结构,每一个盘面上面有很多个磁道,每个磁道又有8个扇区,每个扇区是512字节,那么8个扇区就是一个磁道就是4kb

【Linux】文件系统_第7张图片

Linux中EXT2文件系统的存储方案

磁盘分区好了之后,每一个分区的头部都会有一个引导块Boot Block,其余部分EXT2文件系统会根据分区的大小分配块组(Block Group)

引导块(boot block)是存储在计算机硬盘的特定扇区中的一段代码。它是计算机启动过程中的第一个扇区,也被称为主引导记录(Master Boot Record,MBR)。

引导块的主要作用是引导计算机的操作系统。当计算机启动时,BIOS(Basic Input/Output System)会读取硬盘的引导块,并将控制权转交给引导块中的引导程序。

引导程序是一段特定的机器码,它能够加载操作系统的核心代码(内核)到计算机的内存中,并将控制权交给操作系统。引导程序通常位于引导块的开头位置,其大小一般为512字节。

引导块还包含了分区表(Partition Table),它记录了硬盘上的分区信息。分区是硬盘被划分成多个逻辑部分,每个分区可以包含一个操作系统或其他数据。分区表中的记录描述了每个分区的起始位置和大小。

通过引导块中的引导程序和分区表,计算机能够正确加载并启动操作系统,从而使计算机能够正常运行。

【Linux】文件系统_第8张图片

而每一个分区当中的头部都会存在一个Super Block,这个块主要存放文件的很多重要信息,一旦丢失,那么文件也全部都丢失了,所以需要在每一个块组前面设置一个当作备份,防止文件丢失。

【Linux】文件系统_第9张图片

Super Block:记录了文件系统的大小,包括所有的数据块和inode结构的大小、每个数据块的大小、inode表起始的位置等等…

Group Descriptor Table:该组中第一个数据块的块号、该组中哪些数据块被使用的位图的起始块号、组中未被使用的数据块数量、组中未被使用的inode数量、组中目录的数量。

Block Bitmap:记录Data Blocks中哪些数据块被占用,哪些没有被占用。

inode Bitmapinode节点的分配情况。

inode Table:存放文件的属性,每个文件的inode,文件内容在Data Blocks中的分布情况。

Data Block:存放文件内容。

如何创建一个空文件?

1.首先在inode bitmap当中找到一个没有被使用的inode

2.在inode表当中找到对应的inode结构体,并且把文件信息写入到inode结构体当中。

3.将该文件的文件名和指向inode结构体的指针添加到目录文件的数据块中。

如何理解对文件进行写入?

1.通过inode找到inode结构体

2.通过inode结构体找到文件对应的Data Blocks

如何理解删除一个文件?

1.将文件的inodeinode位图中设置为0。

2.将文件的对应的数据块的数据块位图设置为0。

这也就是为什么下载很慢,删除很快,因为操作系统并没有删除数据,而是把映射关系取消掉了。

文件名存在哪里?

前面说到了,inode保存了文件的属性,那么inode是否也保存了文件名呢?

答案是没有。

文件名其实是保存在目录的数据块当中,当然,也会保存文件的inode,不保存inode的话那还怎么去找到文件呢。

同时,这也是为什么同一个目录下不能出现名字一样的文件的原因。

软连接

【Linux】文件系统_第10张图片

现在我要为d1/d2/d3/test这个文件创建一个软链接。

ln -s d1/d2/d3/test soft

我现在去执行这个test程序,看会打印什么

我再执行soft呢?

【Linux】文件系统_第11张图片

接下来看一下文件信息

【Linux】文件系统_第12张图片

【Linux】文件系统_第13张图片

softinode是1576022,而testinode是15706021,可以说明它们并不是同一个文件,但是soft文件其实是指向test文件的,soft文件内容就是test文件的地址。

这可以联想到windows的桌面,其实基本都不是原文件,而是建立了一个软链接。

硬链接

ln d1/d2/d3/test hard

【Linux】文件系统_第14张图片

【Linux】文件系统_第15张图片

可以看到这两个的inode是一样的,其实他两都是同一个文件,只是在当前目录下同一个inode,不同的文件名罢了,其实inode当中是有一个引用计数的,如果创建了一个硬链接,那么计数就会+1,当计数为0的时候才会删除文件。

【Linux】文件系统_第16张图片

那么再来看到隐藏文件当中的...,就是当前文件目录和上一级文件目录,它们是怎么实现的呢?

【Linux】文件系统_第17张图片

这里.的硬链接数是3,inode为1576016,..的硬链接数是8,inode为786757。

可以看到.inode和当前目录linkinode一模一样,而..inode和上级目录studyinode一模一样,就说明其实它们两就是一个硬链接,那硬链接数是怎么回事呢?

【Linux】文件系统_第18张图片

这是由于study目录下有6个文件,因为创建一个文件它的硬链接是1,就是它自己,那么目录也是如此,也有一个自己的硬链接,然后就是目录下的.文件以及其它文件,1+1+6=8,所以是8个硬链接。

软硬链接的区别

  1. 软链接是一个独立的文件,有独立的inode,而硬链接没有独立的inode。
  2. 软链接相当于快捷方式,硬链接本质没有创建文件,只是建立了一个文件名和已有的inode的映射关系,并写入当前目录。

你可能感兴趣的:(Linux,linux,网络,运维)