之前大体说过了。文件和具体硬件存储是根据inode
进行关联的。
不论直接或者是间接,大致都可归纳为
遗漏1: 我们所谓的数据实体对应硬盘啥位置,怎么找到
同时,我们也提到过逻辑分块的概念,不过对于其中的大小和管理没有太深入的说明。
但是,我们明确的知道,它和扇区相关,那么,它和inode
是什么关系。
遗漏二:块和
inode
的关系。
把遗漏的补上,就是这样了。精确到扇区的话,也就没什么疏漏了。
不过其中的对应关系值得分析一下
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 bit
,8192bit
。
这是多么的简便。
正式由于bitmap
的便利,inode
中也是使用bitmap
进行的管理。
第一行呢,就是我们的磁盘抽象了。因为扇区已经被抽象为块了,磁盘也就成了块组集合了。
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
inode
的bitmap
报表
Inode Table
inode-blocks
的对照关系表。
通过
inode
就可以好到具体的block
,然后查看具体内容。
block
可能有多个哦,如果文件比较大的话。
Data Blocks
。实际存储的数据文件信息了。
和元数据相对应。
管理信息被称作元数据, 其中的
全局信息
和个体信息
都属于元数据。实体数据只存储具体的文件信息。
之前为了去理解磁盘,我们追踪到了扇区。
现在扇区组成了块,而且大致的管理模式也明白了。
数据具体怎么写目前不去想它,我只是突然发现一个问题:我们是不是就达成了使用磁盘的目的。
如果这样的块管理方式,加上能够实际读写块的话,是不是就可以称作文件系统
了。