Linux Ext2

Ext2文件系统结构(inode & block):

inode存放文件的用户权限,属性,以及记录文件数据使用到的block编号,一个inode大小为 128 bytes;
block负责存放文件的实际数据,大小有 1KB,2KB 和 4KB 可选;

  • 每一个文件对应唯一的一个inode节点;
  • 每一个inode下面可以有一个或多个block节点,取决于文件的大小;
  • block节点一旦确定大小(有 1KB,2KB 和 4KB 可选)则无法改变(除非格式化该文件系统);
  • 一个block仅能对应单个文件(单个inode),如:单个文件大小为1KB,而block大小为4K,会造成磁盘空间的浪费(3KB无法为其他文件所用);
    Linux Ext2

当单个文件内容增大时,使用的block数量也会随之增加,然而inode仅仅能存放 32个block的编号(inode中一个编号占 4 bytes,故 128 / 4 = 32 个);
尽管采用4KB大小的block存放文件数据,则32 * 4K = 128KB,这对于大多数文件来说,是远远不够的;

而Linux规定一个inode只能对应一个文件,所以不能申请更多的inode进行存放文件数据,因此该inode会指定其中的几个block作为存储其他block编号的容器;

假设当前使用的是 1KB 的block存放文件数据,则inode可以将其中的一个block作为inode的扩容区,即1KB全都用来存放其他block的编号,则可以多出 1024bytes / 4bytes = 256 个编号存放空间,而每个编号对应一个 1KB 大小的block,则文件大小可在原来基础上大致增大 256 * 1KB = 256KB的大小 (称之为一层间接);

而存储编号的block中指定的block也可以继续用于存储编号,则又可扩容 256 * 256 * 1KB = 65536KB(二层间接);一般来说,为了控制block数量,到了三层间接(即 256^3 * 1KB) 后就不再扩展了,这也是出于文件系统的IO性能考虑;


FAT文件系统: 没有inode,block的编号由上一个block存储,不能一次性取出全部相关的block,性能上不如ext2
Linux Ext2


当inode数量过多时,为了便于文件系统的管理,将inode及block分成对对应的blockgroup;

  • Boot Sector: 启动扇区,安装引导装载程序,每个文件系统都有一个,用于制造多重引导环境;
  • Superblock:大小为1KB,用于记录所有分组的inode和block数量,大小以及使用情况(已用和未用的);
    各种时间(最后一次写入磁盘时间,最后一次检验磁盘时间fsck,文件挂载时间等);
    validbit --> 为0代表文件系统已挂载, 为1则表示文件系统未挂载;
    因此Superblock存放于第一个分组的最前端,其他分组可能也存在Spuerblock,作为Superblock的备份使用;
  • 文件系统描述(FIle System Description): 记录每个group内block的开始与结束编号;
  • 块对照表(block bitmap) : 记录group内block 的使用情况,写入时能快速找到未被使用的block,删除数据后将block置为未使用;
  • inode对照表(inode bitmap): 同理,记录group内各inode的使用情况
  • inode table: inode所在的区域,每个inode存在:1.用户权限(rwx);2.文件所有者(owner/group);3.文件大小;4.文件创建或修改时间(ctime);5.最近一次读取时间(atime);6.最近修改时间(mtime);7.文件特性(SUID,GUID等);8.内容指向(即指向block的pointer)
  • data block: block所在区域;

Linux Ext2

上一篇:《MySQL技术内幕:InnoDB存储引擎第2版》——2.2 InnoDB存储引擎的版本


下一篇:控制文件自动备份篇