linux-块结构

遗漏

之前大体说过了。文件和具体硬件存储是根据inode进行关联的。

不论直接或者是间接,大致都可归纳为

filename
inode
fileEntity

遗漏1: 我们所谓的数据实体对应硬盘啥位置,怎么找到

同时,我们也提到过逻辑分块的概念,不过对于其中的大小和管理没有太深入的说明。

但是,我们明确的知道,它和扇区相关,那么,它和inode是什么关系。

遗漏二:块和inode的关系。

融合

filename
inode
blocks
sectors

把遗漏的补上,就是这样了。精确到扇区的话,也就没什么疏漏了。

不过其中的对应关系值得分析一下

entity relationship description
filename-inode one2one 一个文件名只能有一个inode
inode-filename one2more 同一个文件只能有一个inode
但是却可以有多个文件名引用,硬链接
inode-block one2more 每个文件只能有一个inode
但是由于大小问题,可能占用多个块
block-sectors one2more 一个逻辑块必定占用多个扇区

疑问

整个逻辑文件到硬件存储中,最让人觉得迷惑的莫属于inode

entity description eample
inode-block 直接文件存储 一般文件
inode-dev 指向设备 sda
inode-table 指向映射表 目录
inode-inode inode-filename-inode 软链接文件

从中我们可以明确的得出一个结论:一个文件单纯有且只有一个inode

好比一个人能有多个名称,但是身体只能唯一。

我们还可以发现另一个问题:不是所有文件都一定要在磁盘的数据空间当中。

对于inode我们之前说的它是放在元数据区的,好比目录,却不算书内容的正文。

现在明晰一下我们关系的问题:磁盘上的文件是怎么存储管理的。

那么,我们所关心的范围就锁定为inode-block这一层了。

尤其一个新问题,瞬间把我们的中心给转移了:一个超大的文件怎么管理。

这样的话,估计只有一个inode,所有的block都归于旗下?

同样的,全部是小文件,如果block比较大,浪费的空间 不就更多了么。

最后,我们的问题转到了分块

分块

大小

一个扇区512字节,但是一个块应该多大呢。

一个块一般是由 2 n 2^n 2n个扇区组成,常见的容量就是1024,2048,4096,也就是1K,2K,4K的情况。

在文件级别的话,不同大小的文件可以占据不同个数的块。

但是分块的时候,每个块大小都必须是要相等的,所以,最开始如何去划分每个块的容量,这是个大问题。

分组

地球面积广,然后分了国家,分了省,市,村寨。

那么多的盘面、磁道、柱面、扇区,即使多个扇区算作一个块,数量也是不小的。

你没见过一个学校一个班的吧,毕竟不论是知识的传授还是人员的管理,这样都很繁杂且不靠谱。

然后分了年级,分了班。

bitmap

bit是什么,不是0就是1。

主要是由于那么多的块,当我想使用某一个未被使用过的块时,遍历的区查询所有的块,实在是太麻烦了。

而且,效率上不得不说很慢。而且块数量增大时,这种方式会浪费更多时间。

把块的是否使用这个信息,用一个bit进行存储,这样的直接判断结果的获取比挨个便利再判断的结果就会更快

假设我们使用1K的空间去存储一个bitmap,可以记录多少个块的信息呢。

1k = 1024byte = 1024 * 8 bit8192bit

这是多么的简便。

正式由于bitmap的便利,inode中也是使用bitmap进行的管理。

块管理

linux-块结构_第1张图片

第一行呢,就是我们的磁盘抽象了。因为扇区已经被抽象为块了,磁盘也就成了块组集合了。

boot bolck

说道boot,我们就不得不提起MBR了,它的位置是在零磁道的零扇区。

不被算作用户占用的磁盘空间,但是引导系统启动。

boot block引导块,第零块,和MBR类似,也是不被用户所使用的,也可以boot

但是,系统引导时,只能够是MBR作为启动入口,boot block可以作为启动内容。

双系统时,我们写入的boot loader,在MBR中有一份,boot block中也存在一份。

选择运行的boot loader不一样,选择的启动引导不一样,最后就是双系统的体验了。

name location descritpion
MBR 零磁道零扇区 分区引导
boot block 零号块 引导内容

全局信息

  • Super Block

超级块,不过其实只是一个粗略的分组信息。

正如你知道学校几个年级几个班,就此而已,更多信息在GDT里面。

  • GDT

Group Description Table,组描述表。

和一般书后面的名词解析一样,针对一个东西的详细注释都有。

正如你知道了分了哪些块,但是具体的其实块和终止块,他们的区间组如此类的信息。

配合SB,也就是超级块,你就明白一切了。

并不是如图所示的每个块组都会包含有超级块和描述表。

因为这是很对所有块的信息,虽然会复制多分作为备份。

但不会真的复制这么多,毕竟分组过多的话复制次数也浪费。

一般二到三份。

个体信息

  • Block Bitmap

块使用情况bitmap报表

  • Inode Bitmap

inodebitmap报表

  • Inode Table

inode-blocks的对照关系表。

通过inode就可以好到具体的block,然后查看具体内容。
block可能有多个哦,如果文件比较大的话。

实体数据

Data Blocks。实际存储的数据文件信息了。

和元数据相对应。

管理信息被称作元数据, 其中的全局信息个体信息都属于元数据。

实体数据只存储具体的文件信息。

小结

之前为了去理解磁盘,我们追踪到了扇区。

现在扇区组成了块,而且大致的管理模式也明白了。

数据具体怎么写目前不去想它,我只是突然发现一个问题:我们是不是就达成了使用磁盘的目的。

如果这样的块管理方式,加上能够实际读写块的话,是不是就可以称作文件系统了。

你可能感兴趣的:(linux)