Linux文件IO之ext文件系统

引言

EXT是Linux比较通用的文件系统,全称延伸文件系统,又称扩展文件系统。其中ext2是ext文件系统版本中第一个商用文件系统版本,后续的ext3和ext4都是在此基础上优化。

1 基础知识

1.1 基础概念

  • 磁盘扇区
    磁盘分为一个个扇面,每个扇面又分为一圈圈磁道,每个磁道再分为一个个扇区。扇区是磁盘读写的最小单元,一般为512个字节大小。
  • 数据区块
    在Linux系统层面,文件的最小单元不是一个扇区,而是将相邻扇区组合成一个块。一般一个块大小为4K,刚好为一个物理页的大小。

1.2 磁盘分区

在这里插入图片描述
所有磁盘都有一个MBR头和至多4个主分区组成。MBR叫主引导记录,位于磁盘第一个扇区。用于检查分区表是否正确以及确定哪个分区为引导分区,启动时由BIOS把该分区引导块的启动程序调入内存加以执行;各个分区段是具体文件系统所占扇区,例如ext2文件系统格式就定义在各个分区中,此外各个分区头部还包含引导块。如下图:
在这里插入图片描述
注:引导块大小为1K,即两个扇区。

2 Ext2文件系统

ext2文件系统将分区中文件系统段分割成一个个块组。
在这里插入图片描述
注:块组大小默认为128M,格式化的时候可以修改
对于每个块组又按如下方式分割:
在这里插入图片描述
注:红色的部分一般只存在于块组0中,后续块组中可能没有、或者只是一份拷贝。

  • 超级块
    超级块记录整个文件系统的信息,包括所有块组中的逻辑块和inode总数、所有块组中的逻辑块和inode空闲数量、每个块组中的逻辑块和inode总数、mount时间等信息。
  • 组描述符表
    组描述符表存储每个块组的信息,包括块组中数据块和inode总数、数据块和inode空闲数量、数据块和inode表的起始偏移等信息。
  • 数据块位图
    数据块位图记录该块组中每个数据块是否被占用。每个数据块对应一个bit位,bit为1表示该数据块已使用。
  • inode位图
    与数据块位图类似,它对inode表中每个inode项是否被使用进行标识。
  • inode表
    inode表是该块组中所有inode数据组成的集合。每个文件有且仅有一个inode节点,每个inode节点占128个字节。
  • 数据块区
    文件是以块为单位存储数据,一般以4K为一个块,即连续8个扇区。数据块区是一组连续的数据块组成。

3 目录与文件

在Linux中,一切皆文件,所以目录本质上也是一个文件。在ext2文件系统中,目录也作为一个文件,只不过目录的数据块存储的是子目录/文件的名称和相应的inode号。

  • 数据块寻址
    在inode中除了记录文件的相关信息,还包括文件占用的数据块的索引。每个inode包括15个数据块索引,如下图:
    在这里插入图片描述
    注:图中b表示一个数据块大小。
    如上图,如果以默认4K大小的数据块划分,那么一个文件最大可存储2TB数据,其中不大于48K大小的文件寻址最快。特别地,数据块还可以按1K或2K大小划分。
  • 目录项存储
    每个目录本质上也是一个文件,它也有一个inode节点,然后在分配的数据块中存储子目录或文件的相关信息,即目录项。如下图:
    在这里插入图片描述
    其中,inum为子目录/文件的inode序号;rec_len为下一个目录项起始位置偏移;name_len为子目录/文件的名称的字符长度;file_type表示文件类型,区分是子目录还是文件;name表示子目录/文件的名称。
    注:特别地,每个分区的inode号为2的文件表示分区的根目录。

猜你喜欢

转载自blog.csdn.net/fs3296/article/details/106757249