FAT 文件系统上的第一个数据扇区到底在哪里?

问题描述 投票:0回答:1

我不太明白 FAT 格式的磁盘(尤其是 FAT-12 和 FAT-16)上的第一个数据扇区应该位于哪里。我已经阅读了 FAT 系统的 Microsoft 文档,其中提供了两个公式来计算 FAT 文件系统上的第一个数据扇区:

但是,每当我使用它们时,它们总是给我错误的结果,更准确地说,得到的扇区总是比应有的扇区多 1(我怀疑这是因为

BPB_BytsPerSec
- 1)。

举个例子,我在我拥有的 FAT-12 磁盘映像上尝试了这个,与计算相关的值是:

  • 每个扇区的字节数:512
  • 每个簇的扇区数:1
  • 保留扇区数:1
  • FAT 数量:2
  • 每个 FAT 的扇区数:9
  • 根目录条目数:224

因此,使用此数据,第一个 FAT 位于 0x200,第二个 FAT 位于 0x1400。根目录必须位于 0x2600。根目录的长度为224*32 = 7168 = 0x1C00。因此,根目录的第一个目录应该位于 0x4200(又名扇区 33,因为第一个扇区是扇区 0),这是正确的结果,因为我转储了磁盘映像的内容,并且第一个目录确实位于扇区33。 使用微软给出的公式,假设第一个四舍五入,给出了根目录使用的15个扇区,因此第一个数据扇区应该是1 + 18 + 15 = 34,第一个目录应该位于0x4400 ,这是不正确的。

出了什么问题,或者我不明白什么? 任何帮助将不胜感激,因为我真的很困惑。

filesystems low-level fat low-level-io fat16
1个回答
0
投票

由于我也在 reddit 上发布了同样的问题并且首先得到了回答,所以我认为我至少能做的就是在这里分享答案(参见:https://www.reddit.com/r/filesystems/comments/ 1br2bar/where_exactly_is_the_first_data_sector_on_a_fat/)。

简而言之,我正在对一个已经为我进行舍入的公式进行舍入,因此在进行计算时我显然得到了一个额外的扇区。因此,您不应该对 RootDirSectors 的公式进行舍入,而应实际将其舍入,因为舍入是通过添加

BPB_BytsPerSec
- 1 项来完成的。

© www.soinside.com 2019 - 2024. All rights reserved.