Filesystems FAT16文件系统
我正在构建一个类似于FAT的文件系统。 它具有以下设置: |MBR | FAT区|数据区| 因此,如果给定扇区大小(以字节为单位的扇区大小)、集群大小(以扇区为单位的集群大小)和磁盘大小(以集群为单位的磁盘大小),我如何计算FAT区域的长度 我知道MBR从集群0开始,FAT区域从集群1开始。但是我不知道我可以用什么信息来计算脂肪区域的长度 此外,根目录从数据区域的第一个集群开始,因此如何计算根目录的长度?这就是FAT12(MSDOS 6.22)软盘映像的外观:Filesystems FAT16文件系统,filesystems,fat,Filesystems,Fat,我正在构建一个类似于FAT的文件系统。 它具有以下设置: |MBR | FAT区|数据区| 因此,如果给定扇区大小(以字节为单位的扇区大小)、集群大小(以扇区为单位的集群大小)和磁盘大小(以集群为单位的磁盘大小),我如何计算FAT区域的长度 我知道MBR从集群0开始,FAT区域从集群1开始。但是我不知道我可以用什么信息来计算脂肪区域的长度 此外,根目录从数据区域的第一个集群开始,因此如何计算根目录的长度?这就是FAT12(MSDOS 6.22)软盘映像的外观: 左上角是根目录的NC/VC样式
- 左上角是根目录的NC/VC样式视图
- 左下角是解码信息
- 右边是扇区的曲面图
- 高亮显示的绿色扇区是MSODS.SYS文件
- 头部-使用的表面侧数
- 磁道-每个磁头的磁道数
- 扇区-每条轨道的扇区数
- cluster-群集的大小
- 扇区大小是驱动器的最小单位
- 集群大小是FAT表的最小单位
- 所以
wherecluster=N*sector
N={1,2,3,4,…}
- 驱动器大小为
磁头*磁道*扇区*扇区大小
- 现在FAT表必须覆盖数据可用的整个区域(整个绿色/灰色内容)
- 确切地说,每个集群需要1个值
- 此值是关于以下内容的编码信息:
- 下一个群集文件将继续
- 这是文件的最后一个群集
- 该集群是为系统保留的、空闲的、坏的、未匹配的等等
- 因此,首先需要确定每个值要使用多少位
- 例如,8位值将每个驱动器的cca限制为250个群集
- 这不算太多
- 这也限制了最大文件数和由于集群大小而造成的空间浪费
- 某些系统(如FAT)不包括整个驱动器区域(仅包括数据区域)
- 因此,只有第一个和最后一个逻辑集群/扇区之间的区域存储在FAT中
- 这样可以节省一些空间,并为数据释放更多的集群索引
- 脂肪可以是固定大小(如FAT12、MDO等)
- 所以FAT表应该包含所有可能的条目,即2^FAT\u条目\u位
- 对于12位FAT12,它是2^12=4096个条目
- 到单扇区配合
楼层(512*8/12)=341个
条目
- 因此,对于您的FAT,您需要
ceil(4096/341)=12个
扇区
- 或变量
- 在这种情况下,它的长度应该像MBR一样编码
- 真正的问题是你知道集群的大小还是脂肪的大小
- 因此,请使用以下方法之一:
FAT\u条目=(驱动器大小保留)/群集大小
cluster\u size=(驱动器大小保留)/FAT\u条目
- 保留的区域不包括在FAT中(现在设为0)
- 现在将FAT条目设置为
(2字节)16位
- 并且具有大小为
2heads*1024track*64sectprs*512Byte=64MByte的驱动器
- 并希望拥有
群集\u size=4096字节
- 所以
FAT_条目=64*1024*1024/4096=16*1024
- 现在只需计算is所需的扇区/集群数量,如上例所示