Ext文件系统

620 阅读8分钟

MBR

MBR占据一个扇区的大小,MBR位于磁盘的第1个扇区,CHS的表示方法是0柱面,0磁头,1扇区;LBA的表示方法就是0扇区。 CPU加电复位后,利用BIOS就会把该MBR加载到内存中,用来引导操作系统的启动。

块(Block)

Ext2Ext3是许多Linux操作系统发行版本的默认文件系统,一般情况下将其统称位ExtX,ExtX基于UFS(Unix File System)。

ExtX将整个文件系统划分为许多个块(Block),用块作为数据的存储单元。块由若干个连续的扇区组成,通常为2个扇区,4个扇区或者8个扇区,这个值的大小会记录在位于文件系统2~3号扇区的超级块中。

所有的块都被赋予一个地址,地址由0开始编号,0号块起始于文件系统的第一个扇区。

ExtX的基本布局信息存储在一个称为“超级块”的结构中,第一个超级块位于文件系统的2号扇区,占据2个扇区的大小。前2个扇区用来存放引导程序,称为引导扇区。如果没有引导程序则保留不用的。通常情况下,只有0号块组的超级块信息被文件系统使用。

  • 当块大小是1024字节时,0号块是引导程序块或者保留块,超级块起始于1号块。
  • 当块大小是2048字节时,超级块起始于0号块,位于9号块的后两个扇区。
  • 当块大小是4096字节时,超级块起始于0号块,位于2~3号扇区。

超级块(Super Block)

超级块位于文件系统的1024字节处,占据1024字节大小,含有一些配置信息,如块大小、块总数等。

超级块数据结构

字节数含义
4文件系统总的i-节点数
4文件系统总块数
4为文件系统预保留的块数
4空闲块数
4空闲i-节点数
40号块组起始块号
4每个块占用的字节数,假设该值为n,则块大小为2的n次方再乘以1024个字节
4片段大小(与块大小字段完全相同),在UFS文件系统中,为了减少存储数据时文件尾部浪费的空间,将一个块有划分成若干个片段。ExtX文件系统来源与UFS,也在超级块中保留了这个字段,但ExtX并不支持将块划分成片段,因此,片段大小总是与块大小相等
4每个块组所含块数
4每个块组所含片段数
4每块组i-节点数
4最后挂载时间
4最后写入时间
2最大挂载数
2签名标志“53EF”
2文件系统状态,0x0001表示文件系统正常,0x0002表示有错误,0x0004表示恢复了孤立的i-节点
2错误处理方式,1表示继续运行,2表示以只读方式重新挂载文件系统,3表示紧急处理
2次版本级别
4最后进行一致性检查时间
4一致性检查间隔时间
4创建本文件系统的操作系数,0表示Linux,1表示GNU Hurd,2表示Masix,3表示FreeBSD,4表示Lites
4主版本级别,0表示初始版本,1表示动态版本
2默认UID保留块
2默认GID保留块
2第一个非保留i-节点
2每个i-节点结构的大小
2本超级块所在的块组号
4兼容特征标志
4非兼容特征标志
4只读兼容特征标志
16文件系统ID
16卷名
64最后挂载路径
4位图使用运算法则
1文件再分配块数
1目录再分配块数
2未使用
16日志ID
4日志i-节点
4日志设备
4孤立i-节点表头
788未使用

组描述符表

组描述符数据结构

字节数含义
4块位图起始地址(块号)
4i-节点位图起始地址(块号)
4i-节点表起始地址(块号)
2该块组中的空闲块数
2该块组中的空闲i-节点数
2该块组中的目录数
2填充
12未用

块位图

文件内容保存在块中,块的分配情况记录在块位图中。 每个块组都有一个描述本组内所有块的分配情况的块位图结构。 块位图占用一个块的空间。 块位图中的每个bit对一个一个块,如果某个块已经配分配使用,则与该块对应的块位图的bit位被置位1,未使用的是0。

i-节点位图

与块位图类似,注意i-节点号的编号与其他结构的由0开始编号不同,它是由1开始编号,即整个文件系统内的所有i-节点由1开始编号,第一个i-节点为“1号i-节点”。

i-节点表与i-节点

一个文件或者一个目录对应着一个i-节点

i-节点数据结构

字节数含义
2文件模式(类型及权限),0~9bit表示权限,每个bit对应一种权限,
2UID的低16位
4大小字节数低32位
4最后的访问时间
4i-节点改变时间
4删除时间
2GID的低16位
2链接数
4扇区数
4标志
4未使用
4第1个直接块指针
4第2个直接块指针
4第3个直接块指针
4第4个直接块指针
4第5个直接块指针
4第6个直接块指针
4第7个直接块指针
4第8个直接块指针
4第9个直接块指针
4第10个直接块指针
4第11个直接块指针
4第12个直接块指针
4一个一级间接块指针
4一个二级间接块指针
4一个三级间接块指针
4时代号(NFS)
4扩展属性块(文件ACL)
4大小字节数高32位(目录ACL)
4片段地址
1片段索引号
1片段大小
2未使用
2UID高16位
2GID高16位
4未使用

文件模式

文件模式占用2字节,一共16位,可以分为3组。

  • 0~8bit:权限标志。 权限分为读、写和执行三种, |权限值(二进制)|含义| |:----|:----| |0000 0001 0000 0000|属主可读| |0000 0000 1000 0000|属主可写| |0000 0000 0100 0000|属主可执行| |0000 0000 0010 0000|组用户可读| |0000 0000 0001 0000|组用户可写| |0000 0000 0000 1000|组用户可执行| |0000 0000 0000 0100|其他用户可读| |0000 0000 0000 0010|其他用户可写| |0000 0000 0000 0001|其他用户可执行|

  • 9~11bit:用来定义可执行文件和目录

值(二进制)含义
0000 0010 0000 0000驻留位,如果是可执行文件,设置1表示该程序关闭后其代码仍然驻留在内存中,如果是目录,表示只有文件的属主才能删除该目录中的文件
0000 0100 0000 0000SGID(设置组ID)
0000 1000 0000 0000SUID(设置用户ID)
  • 12~15bit:描述文件类型 |值(二进制)|含义|值(二进制)|含义| |:----|:----|:----|:--| |0001 0000 0000 0000|管道|1000 0000 0000 0000|正常文件| |0010 0000 0000 0000|字符设备|1010 0000 0000 0000|动态链接| |0100 0000 0000 0000|目录|1100 0000 0000 0000|套接字| |0110 0000 0000 0000|块设备|||

目录项

一个i-节点代表一个文件,目录也是文件,普通文件会将数据存储到块中,目录也一样,只不过目录存的是目录项这个结构,i-节点是没有名字的,你看的带有名字的文件中的名字其实是存在目录项这个结构中。

字节含义
4i-节点号
2目录项长度
1名字的长度
1文件类型,0x01表示文件;0x02表示目录;0x03表示符号链接
变长名字