前言
windows:
- FAT
- exFAT
- NTFS
linux:
- EXT2/3/4
mac:
- HFS
- HFS+
- APFS
扇区是对硬盘而言,是物理层的,块和簇是对文件系统而言,是逻辑层的。磁盘控制器是用来映射两层的。
文件系统是什么?
- 文件系统是一系列规定或者约定,可以视为物理磁盘和分区到操作系统之间的桥梁,操作系统通过这系列的规定来明确文件数据结构和保存文件的方法。也因如此,文件系统要在操作系统对存储模块进行交互之前就建立好,也就是硬盘或者分区的初始化。
文件系统的管理效率
在Windows下,FAT,FAT32和NTFS 文件系统中叫做簇(cluster);在Linux下如Ext4等文件系统中叫做块(block),以下仅称为簇。
簇是分区中文件系统管理的最小单位,通常一个簇/块包含2的n次方个扇区。扇区是磁盘读写的最小单元,通常一个扇区为512B大小。
簇作为分区中文件系统管理的最小单位,也就意味着,一个文件占用的大小也就是簇的整数倍,不够一个簇的也占用一个簇,剩下的空间就空闲出来。因此在划分族大小时也需要考虑文件大小,否则容易造成空间浪费。
磁盘控制器除了读取数据、控制磁头等作用外,还有的功能就是映射扇区和磁盘块的关系。
文件系统类型
FAT结构
FAT结构:
DBR
DBR(DOS Boot Record)位于分区的0号扇区,包含了一些重要的分区属性,如分区大小、簇号大小、根目录条目数、文件系统版本等信息。用于引导BIOS加载操作系统。头部的EB 58 90是FAT32的标志。FAT16:EB 5C 90,NTFS:EB 52 90。可以通过搜索该标志跳转到相应文件系统的DBR。
注:DBR备份一般位于该分区的6号扇区(分区起始偏移+6号分区)
这里需要提一下,别混淆了DBR和MBR,MBR主引导记录是记录整个磁盘的信息的,里面包含着分区表;DBR引导扇区是记录分区信息的,每个分区都有自己的DBR,可以理解为MBR的下级。
FAT表
FAT表,管理簇链,记录文件和目录在磁盘上的分配情况,每个条目记录了下一个簇号的索引,通过这种方式可以追踪文件和目录的存储位置。当要读取或写入文件时,系统根据FAT表中的信息找到关联的簇,从而实现文件的顺序访问。要注意的是一个FAT结构有两个完全一样的FAT表。
参考文章:FAT32系统文件详解
0号表项:分区所在的介质类型。
1号表项:文件系统的肮脏标志,文件系统被方法卸载或磁盘表面存在错误时有所表示。
2号表项:根目录所在簇号
注意:0和1号表项均不与实际的物理地址对应,2号表项开始才与物理地址对应。2号表项物理地址为FAT2表后紧跟着的那个簇!3号在2号表项紧跟着的一个簇。由于使用了链式的簇分配方式,因此可能会出现簇的碎片化问题,即文件的簇不一定是连续的
数据区起始扇区号 = 保留扇区数 + 每个FAT表大小扇区数 × FAT表个数
总结理解:FAT表从2号表项起就是该分区所有文件所在的簇链集合。FAT表记录了每个簇的状态和下一个簇的索引,每个簇在FAT表中占用一个条目。FAT表的大小限制了文件系统所能支持的最大簇数量,进而限制了文件系统能够管理的最大磁盘容量。
目录项
目录项用来记录文件/目录名、时间戳、文件属性、文件大小、起始簇号等信息。每32个字节代表一个文件/目录,在一般十六进制查看器里就是两行一个文件/目录。
各属性所在位置:
文件碎片化
文件碎片化是指文件在存储设备上的数据分散在多个非连续位置上的情况,它可以发生在任何类型的存储设备上,包括硬盘驱动器、固态硬盘和闪存驱动器等。当文件碎片化发生时,读取文件会变得更加复杂,会降低文件读取速度和系统性能。
小结
创建文件系统时做了一下工作(初始化):
1、将分区均匀划分为N个簇
2、为簇创建管理结构,就是FAT表
3、创建目录项,往往是空表
4、更新FAT表项,反映已占用的簇
5、写入文件
文件删除
删除文件后,操作系统不再将该文件视为可见文件,只是将文件的存储空间标记为可重用。然而,直到新的数据占用了该文件的存储空间之前,文件内容仍然可以通过特殊的恢复软件进行恢复。要彻底删除文件还需要对源文件所在位置进行填充。