📄 dosbootrecord.txt
字号:
= 文档 =
题 目: Dos Boot Record
类 型: 不详
作 者: Frank_Xu
来 源: 不详
--------------------------------------------------------------------------------
活动分区主引导扇区(DBR)
用FORMAT命令对磁盘格式化时产生
物理位置:0柱面1磁头1扇区(Cylinder 0, Head 1, Sector 1)
大小: FAT16 1扇区 512字节 FAT32 3扇区 1536字节
功能:包含机器CMOS等信息(0000--0059), 核对该信息并引导指定的系统文件,如NTLDR等;
详解: (DEBUG- L 200 2 0 1)
Boot Sector and BPB Structure
名称 偏移 大小 描述
BS_jmpBoot
00H
3
跳到引导代码的指令. 可为EBxx90和E9xxxx两种,xx表示任意允许的8bit值的字节.
BS_OEMName
03H
8
OEM名字字符串,设定该串或许最少地引起兼容性问题.
BPB_BytsPerSec
0BH
2
每扇区字节数,该值可为512,1024,2048或4096.
BPB_SecPerClus
0DH
1
每分配单元的扇区数,值为2的n次方,范围1~128.
BPB_RsvdSecCnt
0EH
2
在开始处保留区域的保留扇区数.该值不能为0.对于FAT32,其值为32.
BPB_NumFATs
10H
1
卷中FAT数据结构的个数,对任何类型的FAT卷,其值永远为2个
BPB_RootEntCnt
11H
2
对于FAT12/FAT16卷,在根目录的32字节的目录个数.对FAT32,永远设定为0.
BPB_TotSec16
13H
2
卷中的扇区的数量(用16bit表示),如果为0,则BPB_TotSec32必须为非零.
对于FAT32,必须为0.
BPB_Media
15H
1
介质标志字: 0xF8表示不可移动介质,0xF0表示可移动介质
BPB_FATSz16
16H
2
对于FAT12/FAT16,表示第一个FAT占用的扇区数;对于FAT32卷必须为0.
BPB_SecPerTrk
18H
2
对于中断13,每磁道的扇区数
BPB_NumHeads
1AH
2
对于中断13,磁头的数量.
BPB_HiddSec
1CH
4
包含FAT卷的分区的隐含扇区的数量
BPB_TotSec32
20H
4
卷中扇区的数量,用4Byte表示.
Fat12 and Fat16 Structure Starting at Offset 36
名称 偏移 大小 描述
BS_DrvNum
24H
1
中断13的驱动器号.
BS_Reserved1
25H
1
用于NT系统(保留),对于FAT卷,永远为0.
BS_BootSig
26H
1
扩展的引导签名
BS_VolID
27H
4
卷序列号
BS_VolLab
2BH
11
卷标,用11个字节记录在根目录下.
BS_FilSysType
36H
8
字符串FAT12/FAT16/FAT,用8Byte表示.
FAT32 Structure Starting at Offset 36
名称 偏移 大小 描述
BPB_FATSz32
24H
4
FAT1占用扇区数量 [仅为FAT32介质定义,在FAT12/FAT16上不存在.]
BPB_ExtFlags
28H
2
b0~b3为0表示活动FAT,b4~b6保留,b7为0表示FAT是在运行时被镜象到所有FATs,b7为1时表示仅有一个活动FAT. b8~b15保留.
BPB_FSVer
2AH
2
高字节表示主版本号,低字节表示副版本号.
BPB_RootClus
2CH
4
设定根目录第一个簇的簇数量. 通常为2但不是必需为2.
BPB_FSInfo
30H
2
在FAT32卷保留区的FSINFO结构中的扇区数.通常为1
BPB_BkBootSec
32H
2
如果非零,则说明在卷保留区中引导记录拷贝的扇区数
BPB_Reserved
34H
12
保留未来扩展用.(用0填充)
BS_DrvNum
40H
1
驱动器号[FAT32与FAT16唯一不同处就是字段位于引导扇区的偏移位置不同]
BS_Reserved1
41H
1
保留.
BS_BootSig
42H
1
扩展的引导签名
BS_VolID
43H
4
卷标序列号
BS_VolLab
47H 11
卷标
BS_FilSysType
52H
8
永远设定为"FAT32"字符串
03EH -- 19DH
DOS启动程序
19EH -- 1E5H
开机字符串
1E6H -- 1FDH
文件名(IO.SYS, MSDOS.SYS)
1FEH -- 1FFH
结束标记(55AA)
隐藏扇区(Hidden Secotrs)
文件分配表FAT
FAT16
0C1H1S,占1Sector
0C1H2S, 根据逻辑盘容量变化
FAT32
0C1H1S开始,占32Sectros
0C1H33S, 根据逻辑盘容量变化
DBR(Dos Boot Record)是操作系统引导记录区的意思。它通常位于硬盘的0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB (Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区跟目录前两个文件是不是操作系统的引导文件(以DOS为例,即是Io.sys和Msdos.sys)。如果确定存在,就把其读入内存,并把控制权交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数,分配单元的大小等重要参数。
FAT16系统中,此扇区包含BPB (BIOS Parameter Block)表,描述逻辑盘结构组成,包含隐藏扇区数目(从0-1-1开始计算)、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录表项最大值等。
FAT32系统中,BPB表的偏移与FAT16不同,但表项基本相同。整个隐藏扇区部分都作为逻辑盘的描述区域。
文件分配表FAT(File Allocation Table)
在DBR之后的是我们比较熟悉的FAT区。在解释文件分配表的概念之前,我们先来谈谈簇(cluster)的概念。文件占用磁盘空间时,基本单位不是字节而是簇。簇的大小与磁盘的规格有关,一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……
由于FAT对于文件管理的重要性,所以FAT有一个备份,即在原FAT的后面再建一个同样的FAT。初形成的FAT中所有项都标明为"未占用",但如果磁盘有局部损坏,那幺格式化程序会检测出损坏的簇,在相应的项中标为"坏簇",以后存文件时就不会再使用这个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存放簇号。FAT的格式有多种,最为常见和为读者所熟悉的是FAT16和FAT32,其中FAT16是指文件分配表使用16位数字,由于16位分配表最多能管理65536(即2的16次方)个簇,也就是所规定的一个硬盘分区。
由于每个簇的存储空间最大只有32KB,所以在使用FAT16管理硬盘时,每个分区的最大存储容量只有(65536×32 KB)即2048MB,也就是我们常说的2G。现在的硬盘容量是越来越大,由于FAT16对硬盘分区的容量限制,所以当硬盘容量超过2G之后,用户只能将硬盘划分成多个2G的分区后才能正常使用,为此微软公司从Windows 95 OSR2版本开始使用FAT32标准,即使用32位的文件分配表来管理硬盘文件,这样系统就能为文件分配多达4294967296(即2的32次方)个簇,所以在簇同样为32KB时每个分区容量最大可达65G以上。此外使用FAT32管理硬盘时,每个逻辑盘中的簇长度也比使用FAT16标准管理的同等容量逻辑盘小很多。由于文件存储在硬盘上占用的磁盘空间以簇为最小单位,所以某一文件即使只有几十个字节也必须占用整个簇,因此逻辑盘的簇单位容量越小越能合理利用存储空间。所以FAT32更适于大硬盘。
计算公式:
每个扇区长度=512字节
总簇数=逻辑盘容量/簇容量
总簇数=FAT表长度(字节)/每个表项长度(字节)-2
FAT表长度=逻辑盘容量/簇容量*每个表项长度
FAT表的开始由介质描述符+一串"已占用"标志组成:
FAT16硬盘----F8 FF FF 7F
FAT32硬盘----F8 FF FF 0F FF FF FF 0F
每个有效的FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
文件目录表FDT(File Directory Table),即根目录(DIR)区,又称为ROOT区
紧跟在FAT2的下一个扇区,长度为32个扇区(256个表项),记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。
如果支持长文件名,则每个表项为64个字节,其中,前32个字节为长文件链接说明;后32个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为32个字节的属性说明。
数据(DATA)区
数据区是真正意义上的数据存储的地方,位于DIR区之后,占据硬盘上的大部分数据空间。
本文档相关资料请到文档来源处查找...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -