erofs 镜像布局分析

以下参考 Core on-disk format

EROFS硬盘布局由Super block + inode区 + data区三部分组成。

由于是只读文件系统,所有存储的文件大小都是已知的,因此相对于其他文件系统省去了inode bitmapdata bitmap的开销,节约空间。

#Super Block

Superblock 大小为128字节,位于分区开始的第1024字节处,兼容以前的boot sector。Superblock 里面保存根目录的inode_number

#Inode

Inode按照固定位置紧密存放,一个inode的物理地址计算为 inode_start + inode_number * 32

Inode 有两种大小:

  • Compact版本 32字节;
  • Extended版本 64字节;

Inode 有三种数据布局:

  • FLAT_PLAIN:内容全部保存在i_u所指向的block中;
  • FLAT_INLINE:整块的内容全部保存在i_u所指向的block中,剩余的部分保存在inode metadata后面;
  • CHUNK_BASED:数据被分成多个chunks,每个chunk按照PLAIN方式布局数据;