MBR
MBR占据一个扇区的大小,MBR位于磁盘的第1个扇区,CHS的表示方法是0柱面,0磁头,1扇区;LBA的表示方法就是0扇区。 CPU加电复位后,利用BIOS就会把该MBR加载到内存中,用来引导操作系统的启动。
块(Block)
Ext2
和Ext3
是许多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-节点数 |
4 | 0号块组起始块号 |
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 | 块位图起始地址(块号) |
4 | i-节点位图起始地址(块号) |
4 | i-节点表起始地址(块号) |
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对应一种权限, |
2 | UID的低16位 |
4 | 大小字节数低32位 |
4 | 最后的访问时间 |
4 | i-节点改变时间 |
4 | 删除时间 |
2 | GID的低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 | 未使用 |
2 | UID高16位 |
2 | GID高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 0000 | SGID(设置组ID) |
0000 1000 0000 0000 | SUID(设置用户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-节点是没有名字的,你看的带有名字的文件中的名字其实是存在目录项这个结构中。
字节 | 含义 |
---|---|
4 | i-节点号 |
2 | 目录项长度 |
1 | 名字的长度 |
1 | 文件类型,0x01表示文件;0x02表示目录;0x03表示符号链接 |
变长 | 名字 |