Linux文件系统

EXT2文件系统

Linux最传统的磁盘文件系统使用的是EXT2(Linux second extended file system)。本文将介绍该系统的结构。

文件系统特性

Linux操作系统的文件除了文件实际内容外还包括很多属性,比如说文件权限和文件拥有者等等。文件系统会将这两部分内容分别存放在不同的区块,权限与属性放置在iNode中,至于实际数据则放置在data block区块中。另外,还有一个超级区块(superblock)会记录文件系统的整体信息,包括iNode和block的总量、使用量、剩余量等。

区块群组

文件系统在一开始就将iNode和block规划好了,除非重新格式化(或利用reize2fs等指令变更文件系统大小),否则iNode和block固定后就不再变动。但是如果文件系统很大的话,将所有的iNode和block放置在一起会提升管理难度,降低效率。
所以EXT2文件系统在个时候后分区为区块群组(block group)。每个区块群组都有独立的iNode、block、superblock系统。如下图所示。
Linux文件系统
在整体的规划中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序,用来引导程序的启动。

以下介绍每个区块群组的六个主要内容

data block(资料区块)

data block 是用来放置档案内容数据的地方,这EXT2文件系统中所支持的block的大小有1k、2k以及4k三种。在格式化时block的大小就固定了,且每个block都有编号,以方便block记录。

在使用该文件系统时,有一些基本限制。 比如:
原则上,block的大小与数量在格式化之后就不能改变,除非重新格式化
每个block内最多只能存放一个文件的内容
如果文件大小大于一个block的大小,则该文件会占用多个block
如果文件大小小于一个block的大小,则剩余空间会被浪费。

iNode table (iNode 表格)

iNode 的大小和数量也是在格式化时便固定的了。此外,
每个iNode 的大小均固定为128字节。
每个档案只占用一个iNode,
因此,文件系统能够建立的文件数量与iNode数量有关。
系统读取文件时需要先找到iNode,并分析用户是否拥有权限,若符合权限的要求才能开始读取。

每一个iNode的大小只有128字节,所能直接记录的block数量有限,所以本系统将一个iNode记录block号码的区域定义为12个直接,一个间接,一个双间接和一个三间接记录区。如图所示:
Linux文件系统
这样的话就可以用很小的空间记录很大的文件了。

superblock(超级区块)

superblock是用来记录整个filesystem相关信息的地方,没有superblock就没有filesystem。他记录的信息主要有:
block与iNode总量
未使用和已使用的iNode/block的数量
block与iNode的大小(block为1,2,4k,iNode为128字节)
filesystem的挂载时间、最近一次写入数据时间、最近一次检测磁盘的时间等文件系统的相关信息。
一个valib bit数值,若此文件系统已被挂载,则valib bit 为0,否则为1

另外,每个block group 内都有可能含有superblock,其作用是为第一个block group内的superblock做备份。

Filesystem Description (文件系统描述说明)

这个区段可以描述每个block group的开始于结束的block号码,以及说明每个区段(superblock,bitmap,iNodemap,datablock)分别介于拿一个block号码之间。

block bitmap(区块对照表)

本区域的作用是记录那些block是空的,以辅助系统查找空的block来使用。

iNode bitmap(iNode 对照表)

与block bitmap功能类似,用来记录那些iNode是空的。