ext2文件系统

ext2文件系统

概述

ext2文件系统
ext2文件系统
文件系统中存储的最小单元是块(block),一个块的大小是在格式化时确定的。启动块(Boot Block)的大小为1KB,由PC标准规定,用来存储磁盘分区信息和启动信息,任何文件系统都不能修改启动块。

启动块之后才是ext2文件系统的开始,ext2文件系统将整个分区划分成若干个同样大小的块组(Block Group)。

块组(Block group)

每个块组的组成:

1)超级块

1)超级块(Super Block)描述整个分区的文件系统信息,如inode/block的大小、总量、使用量、剩余量,以及文件系统的格式与相关信息。超级块在每个块组的开头都有一份拷贝(每个块组拥有相同的超级块)。 为了保证文件系统在磁盘部分扇区出现物理问题(运用与灾难恢复)的情况下还能正常工作,就必须保证文件系统的super block信息在这种情况下也能正常访问。所以一个文件系统的super block会在多个block group中进行备份,这些super block区域的数据保持一致。

超级块记录的信息有:

1、block 与 inode 的总量(分区内所有Block Group的block和inode总量);
2、未使用与已使用的 inode / block 数量;
3、block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);
4、filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
5、一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

每个区段与 superblock 的信息都可以使用 dumpe2fs 这个命令查询

2)块组描述符

2)块组描述符表(GDT,Group Descriptor Table)由很多块组描述符组成,整个分区分成多个块组就对应有多少个块组描述符。
每个块组描述符存储一个块组的描述信息,如在这个块组中从哪里开始是inode Table,从哪里开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝。

ext2文件系统

3)块位图

3)块位图(Block Bitmap)用来描述整个块组中哪些块已用哪些块空闲。块位图本身占一个块,其中的每个bit代表本块组的一个block,这个bit为1代表该块已用,为0表示空闲可用。假设格式化时block大小为1KB,这样大小的一个块位图就可以表示1024*8个块的占用情况,因此一个块组最多可以有10248个块。
ext2文件系统

4)索引结点位图

4)inode位图(inode Bitmap)和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。 Inode bitmap的作用是记录block group中Inode区域的使用情况,Ext文件系统中一个block group中可以有16384个Inode,代表着这个Ext文件系统中一个block group最多可以描述16384个文件。

ext2文件系统

5)索引结点表

5)inode表(inode Table)由一个块组中的所有inode组成。一个文件除了数据需要存储之外,一些描述信息也需要存储,如文件类型,权限,文件大小,创建、修改、访问时间等,这些信息存在inode中而不是数据块中。inode表占多少个块在格式化时就要写入块组描述符中。 在Ext2/Ext3文件系统中,每个文件在磁盘上的位置都由文件系统block group中的一个Inode指针进行索引,Inode将会把具体的位置指向一些真正记录文件数据的block块,需要注意的是这些block可能和Inode同属于一个block group也可能分属于不同的block group。我们把文件系统上这些真实记录文件数据的block称为Data blocks。

ext2文件系统
inode记录的文件数据至少有:(都是文件属性与权限描述信息)

1、该文件的访问模式(rwx)
2、该文件的所有者与组(owner/group)
3、该文件的大小
4、该文件创建或状态改变的时间(ctime)
5、最近一次的读取时间(atime)
6、最近修改内容的时间(mtime)
7、定义文件特性的标志(flag),如SetUID等
8、该文件真正内容的指向(Pointer)

Ext2/Ext3文件系统中,采用Inode指针和Data block地址进行直接/间接关联的方式记录文件数据。一个Inode指针要么不对应任何文件的Data block,要么对应一个文件的一个或者多个Data block。

数据块寻址:(ext2是索引式文件系统(indexed allocation))

一个inode占128字节,其中60个字节用于指向存放文件内容的数据块指针。每个指针4字节,那么有15个指针。最后3个指针用分级间接寻址。
ext2文件系统

6)数据块

6)数据块(Data Block)是用来放置文件内容数据的地方。根据不同的文件类型有以下几种情况:
对于普通文件,文件的数据存储在数据块中。
对于目录,该目录下的所有文件名和目录名存储在所在目录的数据块中,除了文件名外,ls -l命令看到的其它信息保存在该文件的inode中。
对于符合链接,如果目标路径名较短则直接保存在inode中,如果较长则分配一个数据块来保存。
设备文件、FIFO和socket等特殊文件没有数据块。