上回说到,蛋蛋来到饿想她超市第四家分店EXT4,发现每个货架Block Group上都有一份超市概览Super block的副本供顾客查阅。凭着代码农业扎实的基础,蛋蛋终于搞清楚了货架的秘密。
首先我们还是得介绍一下Linux市民和我们当代人类的有一个不同。看过三体的人都知道,三体人没有语言,而是直接看到对方的思想,不能掩藏自己的想法。Linux市民没有嘴巴,他们只能通过数据来交流,这就是他们以数据为食物的原因:说多了,数据用没了,饿了!
货架说明Block Group Descriptor
蛋蛋看完了超市概览,就把它放回第一个大盒子block里。然后,打开第二个大盒子,从这里开始的几个大盒子是货架说明,Block Group Descriptor。
如下图,这里面写了这个货架上标签分布表inode bitmap、标签表inode table在哪里,货物分布表block bitmap在哪里,货架上还有多少空盒子free block count,空标签等等,最后还有一些特殊的字符checksum来帮助检验有些重要数据是不是写错了。
标签和数据分布表bitmap
蛋蛋合起盒子,按照货架说明的指示,打开后面的几个盒子,分别找到了标签分布表inode bitmap和盒子分布表block bitmap。前者表示标签表inode table哪些条目是占用的,后者表示哪些盒子里面有数据。他们的内容都是用一个bit是0或者1表示空或者非空。Bit是Linux市民食物字节的基本元素,8个bit组成了一个字节。
标签表inode table
蛋蛋看完两个分布表,就知道货架上的一个基本情况了,于是关起盒子,按照货架说明的指示,打开了有一个盒子,上面写着:标签表。我们要透漏Linux市的第三个特征了,他们的货物叫做文件,每个文件在超市里面都有一个标签来说明和索引,方便查找和管理,叫做inode。
标签表里面有货架上所有货物的标签,每个标签的主要内容如下表。包括了:
- 货物的权限,是否是VIP专享,是不是私人定制的,是不是共享的。
- 是不是某些特殊的货物,他们并不是拿来吃的,而是一些设备,能够使用。比如char设备,block设备,都是一些机器,char设备能够执行用户的命令,block设备可以批量执行用户的一串命令,存数据,查看数据。
- 货物的大小,用了多少个字节,用了多少个盒子block。
- 货物的最近查看时间,维修时间,移走时间等。
引用
https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
想要每天看一条SSD文章吗?扫一扫,微信关注我们!或者微信搜索公众号ssdfans关注。