FAT 文件系统总结
MBR:Master Boot Record (主引导记录)
DBR:DOS Boot Record (DOS引导记录,位于分区引导扇区)
BPB:BIOS Parameter Block (BIOS参数块)
FAT:File Allocation Table (文件分配表)
Sector:扇区
Cluster:簇
一、 硬盘组织结构
下面是一个包含 4 个分区的硬盘结构示意图,其中分为 3 个基本分区和一个扩展分区。
二、 FAT 文件系统结构
FAT 文件系统是由按照如下顺序排列的几个部分组成的:
0 – Reserved Region
1 – FAT Region
2 – Root Directory Region (FAT32没有这部分)
3 – File and Directory Data Region
FAT 系统的数据存储采用小端(Little Endian)方式,注意到这一点很重要,在使用大 端(Big Endian)的系统中,读取多字节数据的时候必须要经过转换,否则,读取到的数据是不正确的。
例如:一个 32-bit 数据 0x12345678 在 FAT 中的保存方式如下图所示:
三、 主引导扇区
硬盘主引导扇区 = 硬盘主引导记录(MBR)+ 硬盘分区表(DPT) MBR:扇区内偏移地址 0 ~ 0x1BD
DPT:扇区内偏移地址 0x1BE ~ 0x1FD,其中又分为 4 个分区表:
第一个分区表:0x1BE ~ 0x1CD
第二个分区表:0x1CE ~ 0x1DD
第三个分区表:0x1DE ~ 0x1ED
第四个分区表:0x1EE ~ 0x1FD
每个分区表的信息如下表所示:
|
|
分区表信息
|
|
|
|
|
|
字节位移
|
字段长度
|
字段名和定义
|
|
|
|
|
|
0x00
|
BYTE
|
引导指示符(Boot Indicator),指明该分区是否
|
|
是活动分区,0x80=活动分区,0x00=非活动分区
|
|
|
|
|
0x01
|
BYTE
|
开始磁头(Starting Head)
|
|
|
|
|
|
0x02
|
6Bits
|
开始扇区(Starting Sector),只用了0~5位。后
|
|
面的两位(第6位和第7位)被开始柱面字段所使用
|
|
|
|
|
|
|
|
|
|
|
开始柱面(Starting Cylinder),除了开始扇区
|
|
0x03
|
10Bits
|
字段的最后两位外,还使用了1位来组成该柱面
|
|
|
|
值。开始柱面是一个10位数,最大值为1023
|
|
0x04
|
BYTE
|
系统ID(System ID),定义了分区的类型,详见
|
|
下表
|
|
|
|
|
0x05
|
BYTE
|
结束磁头(Ending Head)
|
|
|
|
|
|
0x06
|
6Bits
|
结束扇区(Ending Sector),只使用了0~5位。最
|
|
后两位(第6、7位)被结束柱面字段所使用
|
|
|
|
|
|
|
结束柱面(Ending Cylinder),除了结束扇区字
|
|
0x07
|
10Bits
|
段最后的两位外,还使用了1位,以组成该柱面
|
|
|
|
值。结束柱面是一个10位的数,最大值为1023
|
|
0x08
|
DWORD
|
相对扇区数(Relative Sectors),从该磁盘的开
|
|
始到该分区的开始的位移量,以扇区来计算
|
|
|
|
|
0x0C
|
DWORD
|
总扇区数(Total Sectors),该分区中的扇区总
|
|
数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
分区标志类型值及其含义
|
|
|
|
|
|
|
|
|
|
|
|
类型值
|
含义
|
类型值
|
含义
|
|
|
|
(HEX)
|
(HEX)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0
|
空。DOS或windows不允许
|
5C
|
Priam Edisk
|
|
|
|
使用,视为非法
|
|
|
|
|
|
|
|
|
|
1
|
FAT12
|
61
|
Speed Stor
|
|
|
|
2
|
XENIX root
|
63
|
GNU HURD or Sys
|
|
|
|
3
|
XENIX usr
|
64
|
Novell Netware
|
|
|
|
6
|
FAT16分区小于32M时为
|
65
|
Novell Netware
|
|
|
|
0x04
|
|
|
|
|
|
|
|
|
|
7
|
HPFS / NTFS
|
70
|
Disk Secure Mult
|
|
|
|
8
|
AIX
|
75
|
PC/IX
|
|
|
|
9
|
AIX bootable
|
80
|
Old Minix
|
|
|
|
0A
|
OS/2 Boot Manage
|
81
|
Minix/Old Linux
|
|
|
|
0B
|
Win95 FAT32
|
82
|
Linux swap
|
|
|
|
0C
|
Win95 FAT32
|
83
|
Linux
|
|
|
|
0E
|
Win95 FAT16
|
84
|
0s/2 hidden C:
|
|
|
|
0F
|
Win95 Extended(大于 8GB)
|
85
|
Linux extended
|
|
|
|
10
|
OPUS
|
86
|
NTFS volume set
|
|
|
|
11
|
Hidden FAT12
|
87
|
NTFS volume set
|
|
|
|
12
|
Compaq diagmost
|
93
|
Amoeba
|
|
|
|
14
|
Hidden FAT16<32MB
|
94
|
Amoeba BBT
|
|
|
|
16
|
HiddenFAT16
|
A0
|
IBM Thinkpad hidden
|
|
|
|
17
|
Hidden HPFS/NTFS
|
A5
|
BSD/386
|
|
|
|
18
|
AST Windows swap
|
A6
|
Open BSD
|
|
|
|
1B
|
Hidden FAT32
|
A7
|
NextSTEP
|
|
|
|
1C
|
Hidden FAT32 partition
|
B7
|
BSDI fs
|
|
|
|
(using LBA-mode INT 13
|
B8
|
BSDI swap
|
|
|
|
|
extensions)
|
|
|
|
|
|
|
|
|
|
1E
|
Hidden LBA VFAT partition
|
BE
|
Solaris boot partition
|
|
|
|
24
|
NEC DOS
|
C0
|
DR-DOS/Novell DOS
|
|
|
|
secured partition
|
|
|
|
|
|
|
|
|
|
3C
|
Partition Magic
|
C1
|
DRDOS/sec
|
|
|
|
40
|
Venix 80286
|
C4
|
DRDOS/sec
|
|
|
|
41
|
PPC Perp Boot
|
C6
|
DRDOS/sec
|
|
|
|
42
|
NTFS动态分区
|
C7
|
Syrinx
|
|
|
|
4D
|
QNX4.x
|
DB
|
CP/M/CTOS
|
|
|
|
4E
|
QNX4.x 2nd part
|
E1
|
DOS access
|
|
|
|
4F
|
QNX4.x 3rd part
|
E3
|
DOS r/0
|
|
|
|
50
|
OnTrack DM
|
E4
|
Speedstor
|
|
|
|
51
|
OnTrack DM6 Aux
|
EB
|
BeoS fs
|
|
|
|
52
|
CP/M
|
F1
|
SpeedStor
|
|
|
|
53
|
OnTrack DM6 Aux
|
F2
|
DOS 3.3+secondary
|
|
|
|
partition
|
|
|
|
|
|
|
|
|
|
54
|
OnTrack DM6
|
F4
|
SpeedStor
|
|
|
|
55
|
EZ-Drive
|
FE
|
LAN step
|
|
|
|
56
|
Golden Bow
|
FF
|
BBT
|
|
|
|