第十一章
主要内容:EXT2文件系统及其数据结构
-
什么是EXT2文件系统
EXT2第二代扩展文件系统second extended filesystem,缩写为ext2,是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。ext2 的经典实现为LINUX内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至linux核心2.6版时,扩展到可支持32TB。其他的实现包括GNU Hurd,Mac OS X ,Darwin ,BSD。ext2为数个LINUX发行版的默认文件系统,如Debian、Red Hat Linux等。
其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86 电脑系统中,簇最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统的容量上限为 16384GB。
但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,实际上能使用的文件系统容量最多也只有 2048GB。
至于Ext3文件系统,它属于一种日志文件系统,是对ext2系统的扩展。它兼容ext2,并且从ext2转换成ext3并不复杂。
-
EXT2文件系统数据结构
1、通过mkfs创建虚拟磁盘 ,在Linux下命令:
mke2fs[-b blksize -N ninodes] device nblocks
在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。
2、虚拟磁盘布局
- 上述EXT2文件系统的布局如图所示
3、超级块
- Block#1:超级块(在磁盘分区中字节偏移量为1024) B1是超级块,用于容纳整个文件系统的信息。
s_first_data_block : 0表示4KB块大小,1表示 1KB块大小。它用于确定块组描述符的起始块,即s_first_data_block +1。
s_log_block_size :确定文件块大小,为1KB*(2**s_log_block_size),例如:0表示lKB块大小,1表示2KB块大小,2表示4KB块大小等。最常用的块大小是用于小文件系统的1KB和用于大文件系统的4KB.
s_mnt_count : 已挂载文件系统的次数。当挂载计数达到max_mnt_count时,fsck 会话将被迫检查文件系统的一致性。
s_magic:标识文件系统类型的幻数。EXT2/3/4文件系统的幻数是0xEF53。
4、块组描述符
Block#2:块组描述符块(硬盘上的s_first_data_block+1) EXT2将磁盘块分成几个组。每个组有8192个块(硬盘上的大小为32K)。每组用一个块组描述符结构体来描述。
5、块和索引节点位图
Block#8:块位图
Block#9:索引节点位图
6、索引节点
Block#10:索引(开始)节点 每个文件都用一个128字节的唯一索引节点结构体表示。
7.数据块
紧跟在索引节点块后面的是文件存储数据块。
问题:Ext2文件系统的特点?
Ext2文件系统的特点:
支持可变块长:创建文件系统时根据预期的文件平均长度来选择最佳的块大小
支持快速符号链接:短路径名的符号链接直接存放在inode中
精巧复杂的文件更新策略使系统崩溃的影响减到最少
支持不可变(immutable)的文件(不能修改、删除和更名)和仅追加(append-only)的文件