Linux Ext4文件系统的老祖宗长什么样

2020-07-09 00:00:00 数据 文件 磁盘 位置 文件系统

现代文件系统(例如Ext4和XFS等)具有多种附加特性,不仅扩展了文件系统的应用场景,而且使得文件系统的容错性(例如日志特性)和性能得到很大的提高。而下一代文件系统(例如Btrfs和ZFS)则提供了更加的功能特性,比如存储池、RAID支持和快照等特性,使得文件系统超出了严格文件系统的界限,甚至具备的卷管理的能力。

文件系统已经发展的如此完善,我们是否有必要在去了解那些老古董。本号以为是有这个比较要的。一方面是通过这个我们可以了解文件系统初的样子,理解文件系统的理念;另外一方面是现代的问题系统都比较庞大(少的也几万行代码),不容易理解,而老的文件系统才几千行代码,理解起来比较容易。

废话说了半天,还没进入正题。首先我们可能想知道Ext4的老祖宗到底是谁,我们知道Linux操作系统是参考MINIX操作系统写的。而Linux操作系统的代文件系统Ext也正式参考该系统的实现。目前在新的内核代码树仍然保留这Minix文件系统。该文件系统功能特性非常简单,能力有限,但麻雀虽小五脏俱全,代码总量才2千行左右。

图1 Minix文件系统代码统计

Linux系统中文件系统的基本原理是比较简单的,简单的理解就是2次映射的过程。一次是根据文件名找到inode节点,第二次是根据inode节点找到文件存储数据的位置。

Minix的数据布局

在学习任何一个本地文件系统之前,我们好先对其数据的布局有一个整体的认识。这样,我们在理解数据读写逻辑和元数据等代码时才能更容易一些。这个是符合人类认识事物的规律的,因为人类认识事物总是从具体到抽象,从简单到复杂的。对于文件系统磁盘布局是比较具体的内容,代码实现则是比较抽象的内容,因此从磁盘的数据布局开始比较容易一些。

minix文件系统的布局比较简单,如图2是该文件系统的磁盘布局。包含的主要内容为:启动块、超级块、inode位图、zone位图、inode列表和存储数据的zone。需要注意的是minix存储的数据是以zone为单位的(默认为1KB),而不是以磁盘的扇区。


我们在Linux系统下进行格式化的时候,可以看到输出该文件系统的基本信息,其内容如下:

# mkfs.minix /dev/loop0
160 inodes
400 blocks
Firstdatazone=9 (9)
Zonesize=1024
Maxsize=268966912

相关文章