FAT12 文件系统格式描述

一、FAT12 Spec
http://www.disc.ua.es/~gil/FAT12Description.pdf

一些要点描述:
FAT12, "12"是指FAT的条目的长度为12bits

当使用FAT12作为软盘文件系统时:
扇区  - 基本存储单位, 512 Bytes
簇 - 多个扇区组成簇, 对于软盘来说,一个簇中只有一个扇区

整个软盘的结构如下:
Boot Sector + FAT tables + Root Directory + Data Area

对于1.44MBytes的软盘来说,总共有2880个扇区
Boot Sector:位于0号扇区
FAT tables:  由FAT1/FAT2,其中FAT1和FAT2完全相同,共占2 * 9 = 18扇区,从1 ~ 18号扇区
Root Directory: 目录结构区,共占14个扇区,从19 ~ 32号扇区,每条目录占32Bytes,这样,最大能支持14 * 512 / 32 = 224个目录或文件
Data Area:数据区,共2861个扇区,从19 ~ 2879号扇区

二、Boot sector:结构分析
============================================================================================
Offset    Length     Default value            Data
============================================================================================
        11                                  name
11        2             512                   Byte per sector
13        1              1                    Sectors per cluster
14        2              1                    Number of reserved sectors
16        1              2                    Number of FATs
17        2             224                   Maximum number of root directory entires
19        2             2880                  Total sector count
21        1             0xF0                  软盘类型,高密度,双面
22        2              9                    Sectors per FAT
24        2              18                   Sectors per track
26        2              2                    Number of heads
28        4              0                    Hidden sector count
32        4              0                    Total sector count for FAT32 (0 for FAT12 and FAT16)
36        2              0                    Number of driver
38        1              0x29                 Boot signature, which indicates the following three fields in the boot sector are present
39        4                                   Volume id
43        11             "NO NAME  "          Volume label
54         8             "FAT12   "           File system type(e.g. FAT12, FAT16)
62        ...                                 Data or Boot code
510        2              0xAA55              Boot sector flag
============================================================================================
也就是说头部占用62Bytes

如何根据上面的结构计算FAT所在扇区位置:
FAT 起始扇区号 = 保留扇区个数 [28] + 隐藏扇区个数 [14]
FAT1 起始扇区号 = FAT 起始扇区号
FAT2 起始扇区号 = FAT 起始扇区号 + 每个FAT占用的扇区数 [22]

根目录起始扇区号 = FAT 起始扇区号 + 每个FAT占用的扇区数 [22] * FAT 个数 [16]
根目录占用扇区数 = 最大根目录条目数[17] * 32 / 每个扇区的字节数 [11]

数据起始扇区号 = 根目录起始扇区号 + 根目录占用扇区数

三、FAT 结构
Val                  Meaning
==================================
0x00                 Unused
0xFF0-0xFF6          Reserved cluster
0xFF7                Bad cluster
0xFF8-0xFFF          Last cluster in a file
others               Number of the next cluster in the file
==================================
一个条目占12 比特
FAT表中的每一条对应一个数据区的一个簇号。。
譬如数据区起始扇区号=33
FAT表的头2个条目为保留
FAT表共有条目数= 每个FAT占用的扇区数 [22] * 每个扇区的字节数 [11] * 2 / 3 = 9 * 512 * 2 /3 = 3 * 1024 = 3072

数据区起始扇区对应的FAT条目索引为2,即第3条条目,而该条目中的值则根据上表来解释。。
数据区的扇区号 = FAT表的索引号 - 2 + 33

四、根目录的结构
每条目录为32Bytes
============================================================================================
Offset    Length      Description
============================================================================================
          8         文件名   (如果第一个字节为0xE5,则表示该目录条未使用;如果第一个字节为0x00,则表示,该条目及后面所有的条目都没有被使用)
          3         文件扩展名
11          1         文件属性 (bit0 - readonly, bit1 - hidden, bit2 - system, bit3 - volume label, bit4 - subdirectory, bit5 - archive, bit6 - unused, bit7 - unused)
12          2         Reserved
14          2         创建时间
16          2         创建日期
18          2         最后访问日期
20          2         Igore in FAT12
22          2         最后写时间
24          2         最后写日期
26          2         起始簇号 (即对应的FAT表的索引号)
28          4         文件大小(字节为单位)
============================================================================================

注意:
文件名和文件扩展名都不包含NULL结束字符;

五、文件分配举例
三个文件
AAAA.txt   100 bytes
BBBB.txt   1400 bytes
CCCC       目录

ROOT[0].[26] = 3
ROOT[1].[26] = 2
ROOT[2].[26] = 5
FAT[0] = 0xFF8 -> 对应的为目录区
FAT[1] = 0xFFF
FAT[2] = 4 -> BBBB.txt (1) -> 33号扇区
FAT[3] = 0xFF8 -> AAAA.txt -> 34号扇区
FAT[4] = 6 -> BBBB.txt (2) -> 35号扇区
FAT[5] = 0xFF8 -> 目录 -> 36号扇区
FAT[6] = 0xFF8 -> BBBB.txt (3) -> 37号扇区


From:http://blog.sina.com.cn/s/blog_541e0ada0100ltvg.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值