# EXT2 文件系统
## EXT2 文件系统
- Linux 一直使用 EXT2 作为默认文件系统。
- 版本有EXT2、EXT3、EXT4。(EXT4分配连续的磁盘块区,称为区段)
## EXT2文件系统数据结构
### 通过mkfs 创建虚拟磁盘
- 语法:```mke2fs [-b blksize -N ninodes] device nblocks```
用意:在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。
- 语法:```dd if=/dev/zero of=vdisk bs-1024 count=1440```
``` mke2fs vdisk 1440```
用意:可在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440个大小为1KB的块。
### 虚拟磁盘布局
- EXT2文件系统的布局如图所示。
- Block#0:引导块 B0是引导块,文件系统不会使用它。它用来容纳一个引导程序,从磁盘引导操作系统。
### 超级块
- Block#1:超级块(在硬盘分区中字节偏移量为1024) B1是超级块,用于容纳整个文件系统的信息。下文说明了超级块结构中的一些重要字段。见下图
### 块组描述符
Bock#2:块组描述符块eXT2将磁盘块分成几个组。每个组有8192个块(硬盘上的大小为32K)每组用一个块组描述符结构体来描述。
由于一个虚拟软盘(FD)只有1440个块,B2就只包含一个块组描述符。其余的都是0在有大量块组的硬盘上,块组描述符可以跨越多个块。
块组描述符中最重要的字段是bgblock bitmap、 bg inode bitmap和 bg inode table,它们分别指向块组的块位图、索引节点位图和索引节点起始块。
### 块和索引节点位图
- Block #8:块位图( Bmap )( bg _ block _ bitmap )位图是用来表示某种项的位序列,例如磁盘块或索引节点。位图用于分配和回收项。在位图中,0位表示对应项处于 FREE 状态,1位表示对应项处于 IN _ USE 状态。一个软盘有1440个块,但是 Block #0未被文件系统使用。所以,位图只有1439个有效位。无效位被视作 IN _ USE ,设置为1。
- Block #9:索引节点位图( Imap )( bg _ inode _ bitmap )一个索引节点就是用来代表一个文件的数据结构。EXT2文件系统是使用有限数量的索引节点创建的。各索引节点的状态用B9的 Imap 中的一个位表示。在EXT2 FS 中,前10个索引节点是预留的。所以,空EXT2 FS 的 Imap 以10个1开头,然后是0。无效位再次设置为1。
### 索引节点
索引(开始)节点每个文件都用一个128字节(EXT4中是256字节)的唯一索引节点结构体表示。下面列出了主要索引节点字段。block[15]数组包含指向文件磁盘块的指针,这些磁盘块有
- 直接块: i block[0]至 i block[,指向直接磁盘块。
- 间接块: i block[12]指向一个包含256个块编号(于1 KB BLKSIZE)的磁盘块,每个块编号指向一个磁盘块。
- 双重间接块: i block[13指向一个指向256个块的块,每个块指向256个磁盘块。
- 三重间接块: i block[11是三重间接块。对于“小型”EXT2文件系统,可以忽略它。
苏格拉底挑战 1