📄 fat文件系统原理(二).htm
字号:
size=3>厂商标志和os版本号</FONT></TD>
<TD align=middle width="7%" bgColor=#00ff00> </TD></TR>
<TR>
<TD align=middle width="14%"><FONT size=3>0x0B</FONT></TD>
<TD align=middle width="30%"><FONT
size=3>53个字节</FONT></TD>
<TD align=middle width="25%"><FONT size=3>BPB</FONT></TD>
<TD align=middle width="7%" bgColor=#ff0000> </TD></TR>
<TR>
<TD align=middle width="14%"><FONT size=3>0x40</FONT></TD>
<TD align=middle width="30%"><FONT
size=3>26个字节</FONT></TD>
<TD align=middle width="25%"><FONT
size=3>扩展BPB</FONT></TD>
<TD align=middle width="7%" bgColor=#ff00ff> </TD></TR>
<TR>
<TD align=middle width="14%"><FONT size=3>0x5A</FONT></TD>
<TD align=middle width="30%"><FONT
size=3>420个字节</FONT></TD>
<TD align=middle width="25%"><FONT
size=3>引导程序代码</FONT></TD>
<TD align=middle width="7%" bgColor=#000000> </TD></TR>
<TR>
<TD align=middle width="14%"><FONT
size=3>0x01FE</FONT></TD>
<TD align=middle width="30%"><FONT size=3>2个字节</FONT></TD>
<TD align=middle width="25%"><FONT
size=3>有效结束标志</FONT></TD>
<TD align=middle width="7%"
bgColor=#66ccff> </TD></TR></TBODY></TABLE>
<P><FONT color=#c0c0c0></FONT>图9给出了winhex对图8
DBR的相关参数解释:<BR> <IMG height=721
src="FAT文件系统原理(二).files/2004420123411621.gif" width=392
border=0><BR><FONT color=#c0c0c0><SPAN
style="FONT-WEIGHT: 700; BACKGROUND-COLOR: #ffff00"><BR></SPAN></FONT>
根据上边图例,我们来讨论DBR各字节的参数意义。
<BR>
MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令。这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。<BR>
跳转指令之后是8字节长的OEM ID,它是一个字符串, OEM
ID标识了格式化该分区的操作系统的名称和版本号。为了保留与MS-DOS的兼容性,通常Windows
2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS
5.0”,在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。通常在被Windows
95格式化的磁盘上OEM ID字段出现“MSWIN4.0”,在被Windows 95 OSR2和Windows
98格式化的磁盘上OEM ID字段出现“MSWIN4.1”。<BR>
接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。通常称之为BPB(BIOS Parameter
Block),BPB一般开始于相同的位移量,因此,标准的参数都处于一个已知的位置。磁盘容量和几何结构变量都被封在BPB之中。由于引导扇区的第一部分是一个x86跳转指令。因此,将来通过在BPB末端附加新的信息,可以对BPB进行扩展。只需要对该跳转指令作一个小的调整就可以适应BPB的变化。图9已经列出了项目的名称和取值,为了系统的研究,针对图8,将FAT32分区格式的BPB含义和扩展BPB含义释义为表格,见表4和表5。</P>
<TABLE id=table4 width="59%" border=1>
<TBODY>
<TR>
<TD align=middle colSpan=4><FONT size=2>表4
FAT32分区的BPB字段
</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>字节位移</FONT></TD>
<TD align=middle width="11%"><FONT
size=2>字段长度(字节)</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>图8对应取值</FONT></TD>
<TD align=middle width="49%"><FONT
size=2>名称和定义</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x0B</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0200</FONT></TD>
<TD align=middle width="49%"><FONT size=2>扇区字节数(Bytes
Per Sector)
硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x0D</FONT></TD>
<TD align=middle width="11%"><FONT size=2>1</FONT></TD>
<TD align=middle width="14%"><FONT size=2>0x08</FONT></TD>
<TD align=middle width="49%"><FONT size=2>每簇扇区数(Sectors
Per Cluster),一簇中的扇区数。由于FAT32文件系统只能跟踪有限个簇(最多为4 294 967
296个),因此,通过增加每簇扇区数,可以使FAT32文件系统支持最大分区数。一个分区缺省的簇大小取决于该分区的大小。本字段的合法十进制值有1、2、4、8、16、32、64和128。Windows
2000的FAT32实现只能创建最大为32GB的分区。但是,Windows
2000能够访问由其他操作系统(Windows
95、OSR2及其以后的版本)所创建的更大的分区</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x0e</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0020</FONT></TD>
<TD align=middle width="49%"><FONT size=2>保留扇区数(Reserved
Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为32</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x10</FONT></TD>
<TD align=middle width="11%"><FONT size=2>1</FONT></TD>
<TD align=middle width="14%"><FONT size=2>0x02</FONT></TD>
<TD align=middle width="49%"><FONT size=2>FAT数(Number of
FAT) 该分区上FAT的副本数。本字段的值一般为2</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x11</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0000</FONT></TD>
<TD align=middle width="49%"><FONT size=2>根目录项数(Root
Entries)只有FAT12/FAT16使用此字段。对FAT32分区而言,本字段必须设置为
0</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x13</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0000</FONT></TD>
<TD align=middle width="49%"><FONT size=2>小扇区数(Small
Sector)(只有FAT12/FAT16使用此字段)对FAT32分区而言,本字段必须设置为0</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x15</FONT></TD>
<TD align=middle width="11%"><FONT size=2>1</FONT></TD>
<TD align=middle width="14%"><FONT size=2>0xF8</FONT></TD>
<TD align=middle width="49%"><FONT size=2>媒体描述符( Media
Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS
FAT16磁盘,在Windows 2000中未被使用</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x16</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0000</FONT></TD>
<TD align=middle width="49%"><FONT
size=2>每FAT扇区数(Sectors Per
FAT)只被FAT12/FAT16所使用,对FAT32分区而言,本字段必须设置为0</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x18</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x003F</FONT></TD>
<TD align=middle width="49%"><FONT size=2>每道扇区数(Sectors
Per Track)
包含使用INT13h的磁盘的“每道扇区数”几何结构值。该分区被多个磁头的柱面分成了多个磁道</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x1A</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x00FF</FONT></TD>
<TD align=middle width="49%"><FONT size=2>磁头数(Number of
Head) 本字段包含使用INT 13h的磁盘的“磁头数”几何结构值。例如,在一张1.44MB
3.5英寸的软盘上,本字段的值为 2</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x1C</FONT></TD>
<TD align=middle width="11%"><FONT size=2>4</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0000003F</FONT></TD>
<TD align=middle width="49%"><FONT size=2>隐藏扇区数(Hidden
Sector)
该分区上引导扇区之前的扇区数。在引导序列计算到根目录的数据区的绝对位移的过程中使用了该值。本字段一般只对那些在中断13h上可见的媒体有意义。在没有分区的媒体上它必须总是为0</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x20</FONT></TD>
<TD align=middle width="11%"><FONT size=2>4</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x007D043F</FONT></TD>
<TD align=middle width="49%"><FONT size=2>总扇区数(Large
Sector) 本字段包含FAT32分区中总的扇区数</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x24</FONT></TD>
<TD align=middle width="11%"><FONT size=2>4</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x00001F32</FONT></TD>
<TD align=middle width="49%"><FONT
size=2>每FAT扇区数(Sectors Per
FAT)(只被FAT32使用)该分区每个FAT所占的扇区数。计算机利用这个数和
FAT数以及隐藏扇区数(本表中所描述的)来决定根目录从哪里开始。该计算机还可以从目录中的项数决定该分区的用户数据区从哪里开始</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x28</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT size=2>0x00</FONT></TD>
<TD align=middle width="49%">
<P align=left><FONT size=2>扩展标志(Extended
Flag)(只被FAT32使用)该两个字节结构中各位的值为:<BR>位0-3:活动
FAT数(从0开始计数,而不是1).<BR>
只有在不使用镜像时才有效<BR>位4-6:保留<BR>位7:0值意味着在运行时FAT被映射到所有的FAT<BR>
1值表示只有一个FAT是活动的<BR>位8-15:保留</FONT></P></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x2A</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0000</FONT></TD>
<TD align=middle width="49%"><FONT size=2>文件系统版本(File
ystem
Version)只供FAT32使用,高字节是主要的修订号,而低字节是次要的修订号。本字段支持将来对该FAT32媒体类型进行扩展。如果本字段非零,以前的Windows版本将不支持这样的分区</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x2C</FONT></TD>
<TD align=middle width="11%"><FONT size=2>4</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x00000002</FONT></TD>
<TD align=middle width="49%"><FONT size=2>根目录簇号(Root
Cluster Number)(只供FAT32使用)
根目录第一簇的簇号。本字段的值一般为2,但不总是如此</FONT></TD></TR>
<TR>
<TD align=middle width="11%"><FONT size=2>0x30</FONT></TD>
<TD align=middle width="11%"><FONT size=2>2</FONT></TD>
<TD align=middle width="14%"><FONT
size=2>0x0001</FONT></TD>
<TD align=middle width="49%"><FONT size=2>文件系统信息扇区号(File
System Information SectorNumber)(只供FAT32使用)
FAT32分区的保留区中的文件系统信息(File System Information,
FSINFO)结构的扇区号。其值一般为1。在备份引导扇区(Backup Boot
Sector)中保留了该FSINFO结构的一个副本,但是这个副本不保持更新</FONT></TD></TR>
<TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -