学习笔记5
第十一章 EXT2文件系统
11.1 EXT2文件系统
Linux一直将EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,他将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的EXT3文件系统与EXT2文件系统相同。EXT3的最新扩展时EXT4。EXT4的主要变化是磁盘块的分配。在EXT4中,块编号为48位。EXT4是分配连续的磁盘块,称为区段。
11.2 EXT2文件系统数据结构
11.2.1 通过mkfs创建虚拟磁盘
在Linux下,命令
mke2fs [-b blksize -N ninodes] device nblocks
在设备上创建有一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。设备可以是真实设备,也可以是虚拟磁盘文件。如果未指定blksize,则默认块大小为1KB.如果未指定ninoides,mke2fs将根据nblocks计算一个默认的ninodes数。得到的EXT2文件系统可在Linux中使用。
11.2.2 虚拟磁盘布局

Block#0:引导块 B0是引导块,文件系统不会使用它。它用来容纳一个引导程序,从磁盘引导操作系统
Block#1:超级块,用于容纳关于整个文件系统的信息
Block#2:块组描述符块,EXT2将磁盘块分成几个组,每组用一个块组描述符结构体描述
Block#8:块位图,用来表示某种项的位序列
Block#9:索引节点位图,用来代表一个文件的数据结构
Block#10:索引节点块,每个文件都用一个128字节的独特索引节点结构体表示
目录条目:目录包含dir_entry结构
-
超级块
![]()
大多数超级块字段的含义都非常明显。只有少数几个字段需要详细解释。
s_first_data_block:0表示4KB块大小,1表示1KB块大小。它用于确定块组描述符的起始块,即s_first_data_block+1。 s_log_block_size:确定文件块大小,为1KB*(2**s_log_block_size),例如:0表示1KB块大小,1表示2KB块大小,2表示4KB块大小等。最常用的块大 小是用于小文件系统的1KB和用于大文件系统的4KB。 s_mnt_count:已挂载文件系统的次数。当挂载计数达到max_mnt_count时,fsck会话将被迫检查文件系统的一致性。 s_magic:标识文件系统类型的幻数。EXT2/3/4文件系统的幻数是0xEF53. -
块组描述符块
![]()
由于一个虚拟硬盘(FD)只有1440个块,B2就只包含一个块组描述符。其余的都是0。在有大量块组的硬盘上,块组描述符可以跨越多个块。块组描述符可
以跨越多个块。块组描述符中最重要的字段是bg_block_bitmap、bg_inode_bitmap和bg_inode_table,它们分别指向块组的块位图、索引节点位图和索
引节点起始块。对于Linux格式的EXT2文件系统,保留了块3到块7.所以,bmap=8,imap=9,inode_table=10。 -
索引(开始)节点
![]()
在i_mode字段中,前4位指定了文件类型,接下来三位ugs表示文件的特殊用法。最后9位是用于文件保护的rwx权限位。
i_size字段表示文件大小(以字节为单位)。各时间字段表示自1970年1月1日0时0分0秒以来经过的秒数。所以,每个时间字段都是一个非常大的无符号整
数。可借助以下库函数将它们转换为日历形式:char *ctime(&time_field)将指针指向时间字段,然后返回一个日历形式的字符串
-
数据块
紧跟在索引节点块后面的是文件存储数据块。



浙公网安备 33010602011771号