Linux EXT2文件系统
0 引言
我们知道,磁盘是用来存储文件的,但是必须要把磁盘格式化为某种格式才能进行存储。文件系统的目的就是组织和管理磁盘文件。在Linux系统中,最常见的是EXT2的文件系统。(EXT2:第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2)。后来又发展出EXT3和EXT4。但是其核心设计并未发生变化,我们这里以EXT2作为演示。
1 基本结构
因为磁盘大小一般是很大的,如果我们一下子将文件的内容和属性进行管理,在使用时可能会非常麻烦,所以EXT2文件系统在格式化的时候一般会包含多个区块群组(如下图的Block group 0,Block group1…),以此进行管理。
1.1 Block group
对于EXT2文件系统来说,硬盘分区首先被分割为一个个的逻辑块(Block),每个Block就是实际用来存储数据的单元,大小相同,Block按照0,1,2,3的顺序编号。EXT2文件系统支持的Block的大小有1024字节,2048字节4096字节,Block的大小在创建文件系统的时候可以通过参数指定。
EXT2的文件系统主要有以下特点:
1.Block的大小与数量在格式化后就不能再改变了(除非重新格式化)。
2.每个Block内最多只能放置一个文件数据。
3.如果文件大于一个Block的大小,则会占用多个Block。
4.如果文件小于一个Block的大小,则剩余的容量不能再使用了。
1.2 Boot group
每个磁盘分区的开头 1024 字节大小都预留为分区的启动扇区,存放引导程序和数据,所以又叫引导块。引导块在第一个 Block,即 Block 0 中存放,但是未必占满这个 Block,原因是 Block 的大小可能大于 1024 字节。
这里是存放开机管理程序的地方,这是个非常重要的设计。因为这样使得我们能够把不同的开机管理程序安装到每个文件系统的最前端,而不用覆盖整颗磁盘唯一的 MBR,这样就能支持多系统启动了。
2 Block group 的组成
如上图所示,每个 Block Group 都由下面几个组成部分:
Superblock(超级块)
Group Description Table(组描述符)
Block bitmap(块位图)
Inode bitmap(inode 位图)
Inode table(inode 表)
Data Blocks(数据块)
2.1 Superblock(超级块)
存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
之所以不把Superblock单独作为一个块放到外面,是因为这个块非常重要,一旦损坏,文件就很难恢复。所以后面几乎每个block group 都包含Superblock。
2.2Group Description Table(组描述符)
Group Description Table 用来描述每个 group 的开始与结束位置的 block 号码,以及说明每个块(superblock、bitmap、inodemap、datablock) 分别介于哪一个 block 号码之间。
2.3 Block bitmap(块位图)
Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
有被占用。
2.4 Inode bitmap(inode 位图)
inode bitmap 与 block bitmap 的功能类似,只是 block bitmap 记录的是使用与未使用的 block 号,而 inode bitmap 则记录的是使用与未使用的 inode 号。
2.5 Inode table(inode 表)
node table 中存放着一个个 inode,inode 的内容记录文件的属性以及该文件实际数据是放置在哪些 block 内,inode 记录的主要的文件属性如下:
该文件的读写权限(rwx)
该文件的拥有者和所属组(owner/group)
该文件的容量
该文件的 ctime(创建时间)
该文件的 atime(最近一次的读取时间)
该文件的 mtime(最近修改的时间)
该文件的特殊标识,比如 SetUID 等
该文件真正内容的指向(pointer)
inode 的数量与大小也是在格式化时就已经固定了的,另外 inode 还有如下特点:
每个 inode 大小均固定为 128 Bytes(新的 ext4 为 256 Bytes)
每个文件都仅会占用一个 inode
文件系统能够创建的文件数量与 inode 的数量相关
系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与使用者是否符合,若符合才能够开始读取 block 的内容
2.6 Data Blocks(数据块)
Data block 是用来存放文件内容的地方,Ext2 文件系统有1K、2K 和 4K 大小的 block。在格式化文件系统时 block 的大小就确定了,并且每个 block 都有编号。需要注意的是,由于 block 大小的差异,会导致文件系统能够支持的最大磁盘容量和最大单个文件的大小并不相同。
3.总结
以上就是Linux EXT2文件系统的基本结构,其EXT3和EXT4基本核心结构也是基于EXT2增强的,有兴趣的小伙伴可以去了解一下。