0


【Linux】文件系统

磁盘的物理结构

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

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

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

磁片上的结构

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

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

逻辑抽象

可以把盘面抽象为一个线性结构,每一个盘面上面有很多个磁道,每个磁道又有8个扇区,每个扇区是

512

字节,那么8个扇区就是一个磁道就是

4kb

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

磁盘分区好了之后,每一个分区的头部都会有一个引导块

Boot Block

,其余部分

EXT2

文件系统会根据分区的大小分配块组(Block Group)

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

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

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

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

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

image-20230925000008717

而每一个分区当中的头部都会存在一个

Super Block

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

Super Block

:记录了文件系统的大小,包括所有的数据块和inode结构的大小、每个数据块的大小、

inode

表起始的位置等等…

Group Descriptor Table

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

Block Bitmap

:记录

Data Blocks

中哪些数据块被占用,哪些没有被占用。

inode Bitmap

inode

节点的分配情况。

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.将文件的

inode

inode

位图中设置为0。

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

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

文件名存在哪里?

前面说到了,

inode

保存了文件的属性,那么

inode

是否也保存了文件名呢?

答案是没有。

文件名其实是保存在目录的数据块当中,当然,也会保存文件的

inode

,不保存

inode

的话那还怎么去找到文件呢。

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

软连接

现在我要为

d1/d2/d3/test

这个文件创建一个软链接。

ln-s d1/d2/d3/test soft

我现在去执行这个

test

程序,看会打印什么

我再执行

soft

呢?

接下来看一下文件信息

soft

inode

是1576022,而

test

inode

是15706021,可以说明它们并不是同一个文件,但是

soft

文件其实是指向

test

文件的,

soft

文件内容就是

test

文件的地址。

这可以联想到

windows

的桌面,其实基本都不是原文件,而是建立了一个软链接。

硬链接

ln d1/d2/d3/test hard

可以看到这两个的

inode

是一样的,其实他两都是同一个文件,只是在当前目录下同一个

inode

,不同的文件名罢了,其实

inode

当中是有一个引用计数的,如果创建了一个硬链接,那么计数就会+1,当计数为0的时候才会删除文件。

那么再来看到隐藏文件当中的

.

..

,就是当前文件目录和上一级文件目录,它们是怎么实现的呢?

这里

.

的硬链接数是3,

inode

为1576016,

..

的硬链接数是8,

inode

为786757。

可以看到

.

inode

和当前目录

link

inode

一模一样,而

..

inode

和上级目录

study

inode

一模一样,就说明其实它们两就是一个硬链接,那硬链接数是怎么回事呢?

这是由于

study

目录下有6个文件,因为创建一个文件它的硬链接是1,就是它自己,那么目录也是如此,也有一个自己的硬链接,然后就是目录下的

.

文件以及其它文件,1+1+6=8,所以是8个硬链接。

软硬链接的区别

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

本文转载自: https://blog.csdn.net/2301_79516932/article/details/133267991
版权归原作者 Sudo_Wang 所有, 如有侵权,请联系我们删除。

“【Linux】文件系统”的评论:

还没有评论