硬盘分区结构及windows文件系统结构.docx
- 文档编号:5289327
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:23
- 大小:68.92KB
硬盘分区结构及windows文件系统结构.docx
《硬盘分区结构及windows文件系统结构.docx》由会员分享,可在线阅读,更多相关《硬盘分区结构及windows文件系统结构.docx(23页珍藏版)》请在冰豆网上搜索。
硬盘分区结构及windows文件系统结构
硬盘分区结构及windows文件系统结构
1.关于硬盘分区:
IDE接口硬盘中,不管什么操作系统,都有如下结构:
MBR(MasterBootRecord)及基本分区表
分区1
分区2
......
分区n
MBR和基本分区表共用硬盘的第一个扇区(即0面0道1扇区,以后简称第一扇区MBR),分区表位于扇区的最后66字节,除了最后的2字节55AA外,为4条分区记录,每条分区记录16字节。
各字段含义如下:
偏移
意义
0
自举标志(80为活动分区,00为非活动分区)
1
起始磁头号H
2
起始扇区号S
3
起始柱面号CYL(CYL的高2位存放在S字节的高2位
4
分区格式标志(01:
fat12;05:
extended;06:
fat16;07:
hpfs/ntfs;
0b,0d:
win95fat32;0e:
win95fat16;82:
linuxswap;83:
linux;85:
linuxextended)
5
终止磁头号H
6
终止扇区号S
7
终止柱面号CYL
8-11
本分区之前已用扇区数(当分区表属于扩展分区中的记录时,该值为相对扩展分区首地址的位置)
12-15
本分区扇区总数
(注意:
C/H/S的编址从0/0/1开始)
可以看出,使用C/H/S三维地址时,磁盘的寻址空间最多只有224个扇区,即8GB的容量,当磁盘容量大于8GB时,C/H/S就无法寻址了。
于是采用LBA(logicblockaddress)线性地址来寻址。
在LBA方式下系统把所以的物理扇区都按某种方式或规则看做是一线性编号的扇区,即从0到某个最大值方式排列。
C/H/S到LBA:
LBA=(C-c)*PH*PS+(H-h)*PS+(S-s)
一般情况下c=0,h=0,s=1,PS=63,PH=255,PS表示每磁道多少扇区,PH表示每柱面多少磁道。
LBA到C/H/S:
C=LBA/(PH*PS)+c
H=(LBA/PS)MODPH+h
S=LBAMODPS+s
由于MBR只能记录4个分区的信息,windows通过扩展分区来记录多于4个分区的记录,称做虚拟MBR。
做法是:
让主MBR在定义分区时,将多余容量定义为扩展分区,指定该分区的起始位置,根据起始位置指向硬盘的某一扇区,作为下一个分区表,在该扇区继续定义分区。
如果只有一个分区,就定义该分区,然后结束;如果不止一个分区,就定义一个基本分区和一个扩展分区,扩展分区再指向下一个分区表,在下一个分区表中继续定义分区,直至结束。
这样就形成一个分区链,可以描述所有的分区。
一个分区表的例子:
MBR
8001
01000CFEFFFF3F00-0000FC8A38010000
C1FF83FEFFFF3B8B-38016E9AF6000000
C1FF82FEFFFFA925-2F02E11608000000
C1FF0FFEFFFF8A3C-37026243530755AA
EXT-1:
0001
C1FF0BFEFFFF3F00-0000371671020000
C1FF05FEFFFF7616-71023B8B38010000
0000000000000000-0000000000000000
0000000000000000-00000000000055AA
EXT-2:
0001
C1FF0BFEFFFF3F00-0000FC8A38010000
C1FF05FEFFFFB1A1-A9032CD5FB020000
0000000000000000-0000000000000000
0000000000000000-00000000000055AA
EXT-3:
0001
C1FF0BFEFFFF3F00-0000EDD4FB020000
C1FF05FEFFFFDD76-A5063E15AC000000
0000000000000000-0000000000000000
0000000000000000-00000000000055AA
EXT-4:
0001
C1FF0BFEFFFF3F00-0000FF14AC000000
C1FF05FEFFFF1B8C-510747B701000000
0000000000000000-0000000000000000
0000000000000000-00000000000055AA
EXT-5:
0001
C1FF07FEFFFF3F00-000008B701000000
0000000000000000-0000000000000000
0000000000000000-0000000000000000
0000000000000000-00000000000055AA
(注意:
系统在启动时按照分区链的顺序查找分区,直到找出所有分区,如果分区链形成一个环,就形成所谓硬盘"逻辑锁",导致系统无法启动,软盘也无法启动。
由于windows启动过程在io.sys中决定的,可以查找io.sys,将第一个55AA改成其他数值,程序还没开始查找分区表就结束,就避开了对分区表的检测)
2.关于INT13
2.1通过int13来读取物理扇区的例子:
a100
movax,201
movbx,200
movcx,1
movdx,80
int13
int3
g=100
参数解释:
∙al:
读写扇区数
∙bx:
缓冲区地址
∙dh:
磁头号
∙dl:
设备号(A盘是0,B是1,第一硬盘是80,第二硬盘是81)
∙ch:
柱面号低8位
∙cl:
低6位为要读的起始扇区号,高2位为柱面号的高2位。
2.2扩展INT13:
数据类型约定:
BYTE
1字节整型(8位)
WORD
2字节整型(16位)
DWORD
4字节整型(32位)
QWORD
8字节整型(64位)
磁盘地址数据包DiskAddressPacket(DAP):
DAP是基于绝对扇区地址的,因此利用DAP,Int13H可以轻松地逾
越1024柱面的限制,因为它根本就不需要CHS的概念.
DAP的结构如下:
structDiskAddressPacket
{
BYTEPacketSize; //数据包尺寸(16字节)
BYTEReserved; //==0
WORDBlockCount; //要传输的数据块个数(以扇区为单位)
DWORDBufferAddr; //传输缓冲地址(segment:
offset,在内存中为offset在低地址
如166b:
400在内存中为:
00046b16)
QWORDBlockNum; //磁盘起始绝对块地址(即LBA地址)
};
驱动器参数数据包DriveParametersPacket:
驱动器参数数据包是在扩展Int13H的取得驱动器参数子功能调用中
使用的数据包.格式如下:
structDriveParametersPacket
{
WORDInfoSize; //数据包尺寸(26字节)
WORDFlags; //信息标志
DWORDCylinders; //磁盘柱面数
DWORDHeads; //磁盘磁头数
DWORDSectorsPerTrack; //每磁道扇区数
QWORDSectors; //磁盘总扇区数
WORDSectorSize; //扇区尺寸(以字节为单位)
};
2.2.1)检验扩展功能是否存在
入口:
AH=41h
BX=55AAh
DL=驱动器号
返回:
CF=0
AH=扩展功能的主版本号
AL=内部使用
BX=AA55h
CX=API子集支持位图
CF=1
AH=错误码01h,无效命令
这个调用检验对特定的驱动器是否存在扩展功能.如果进位标志置1
则此驱动器不支持扩展功能.如果进位标志为0,同时BX=AA55h,则
存在扩展功能.此时CX的0位表示是否支持第一个子集,1位表示是否
支持第二个子集.
对于1.x版的扩展Int13H来说,主版本号AH=1.AL是副版本号,
但这仅限于BIOS内部使用,任何软件不得检查AL的值.
2.2.2)扩展读
入口:
AH=42h
DL=驱动器号
DS:
SI=磁盘地址数据包(DiskAddressPacket)
返回:
CF=0,AH=0成功
CF=1,AH=错误码
这个调用将磁盘上的数据读入内存.如果出现错误,DAP的BlockCount
项中则记录了出错前实际读取的数据块个数.
2.2.3)扩展写
入口:
AH=43h
AL
0位=0关闭写校验
1打开写校验
1-7位保留,置0
DL=驱动器号
DS:
SI=磁盘地址数据包(DAP)
返回:
CF=0,AH=0成功
CF=1,AH=错误码
这个调用将内存中的数据写入磁盘.如果打开了写校验选项,但BIOS
不支持,则会返回错误码AH=01h,CF=1.功能48h可以检测BIOS是否
支持写校验.
如果出现错误,DAP的BlockCount项中则记录了出错前实际写入的数
据块个数.
2.2.4)校验扇区
入口:
AH=44h
DL=驱动器号
DS:
SI=磁盘地址数据包(DiskAddressPacket)
返回:
CF=0,AH=0成功
CF=1,AH=错误码
这个调用校验磁盘数据,但并不将数据读入内存.如果出现错误,DAP的
BlockCount项中则记录了出错前实际校验的数据块个数.
2.2.5)锁定/解锁驱动器
入口:
AH=45h
AL
=0锁定驱动器
=1驱动器解锁
=02返回锁定/解锁状态
=03h-FFh-保留
DL=驱动器号
返回:
CF=0,AH=0成功
CF=1,AH=错误码
这个调用用来缩定指定驱动器中的介质.
所有标号大于等于0x80的可移动驱动器必须支持这个功能.如果
在支持可移动驱动器控制功能子集的固定驱动器上使用这个功能调用,将
会成功返回.
驱动器必须支持最大255次锁定,在所有锁定被解锁之前,不能在物理上
将驱动器解锁.解锁一个未锁定的驱动器,将返回错误码AH=B0h.如果锁定一
个已锁定了255次的驱动器,将返回错误码AH=B4h.
锁定一个没有介质的驱动器是合法的.
2.2.6)弹出可移动驱动器中的介质
入口:
AH=46h
AL=0保留
DL=驱动器号
返回:
CF=0,AH=0成功
CF=1,AH=错误码
这个调用用来弹出指定的可移动驱动器中的介质.
所有标号大于等于0x80的可移动驱动器必须支持这个功能.如果
在支持可移动驱动器控制功能子集的固定驱动器上使用这个功能调用,将
会返回错误码AH=B2h(介质不可移动).如果试图弹出一个被锁定的介质
将返回错误码AH=B1h(介质被锁定).
如果试图弹出一个没有介质的驱动器,则返回错误码Ah=31h(驱动器
中没有介质).
如果试图弹出一个未锁定的可移动驱动器中的介质,Int13h会调用Int15h
(AH=52h)来检查弹出请求能否执行.如果弹出请求被拒绝则返回错误码(同
Int15h).如果弹出请求被接受,但出现了其他错误,则返回错误码AH=B5h.
2.2.7)扩展定位
入口:
AH=47h
DL=驱动器号
DS:
SI=磁盘地址数据包(DiskAddressPacket)
返回:
CF=0,AH=0成功
CF=1,AH=错误码
这个调用将磁头定位到指定扇区.
2.2.8)取得驱动器参数
入口:
AH=48h
DL=驱动器号
DS:
SI=返回数据缓冲区地址
返回:
CF=0,AH=0成功
DS:
SI驱动器参数数据包地址,(参见前面的文章)
CF=1,AH=错误码
这个调用返回指定驱动器的参数.
2.2.9)取得扩展驱动器介质更换检测线状态
入口:
AH=49h
DL=驱动器号
返回:
CF=0,AH=0 介质未更换
CF=1,AH=06h介质可能已更换
这个调用返回指定驱动器的介质更换状态.
这个调用与Int13hAH=16h子功能调用相同,只是允许任何驱动器
标号.如果对一台支持可移动介质功能子集的固定驱动器使用此功能,则永远
返回CF=0,AH=0.
简单地将可移动介质锁定再解锁就可以激活检测线,而无须真正更换介质.
2.2.10)Int15h可移动介质弹出支持
入口:
AH=52h
DL=驱动器号
返回:
CF=0,AH=0弹出请求可能可以执行
CF=1,AH=错误码B1h或B3h弹出请求不能执行
这个调用是由Int13hAH=46h弹出介质功能调用内部使用的
(注:
MBR的分区表中,8-11字节——本分区之前已用扇区数,即该分区首扇区的LBA地址。
通过扩展int13即可访问磁盘的任意扇区)
硬盘分区结构及windows文件系统结构二
3.FAT文件系统的结构:
3.1FAT12,FAT16:
DBR--FAT1--FAT2--DFT--DATA
DBR只占1个扇区,DFT为根目录表,根目录下的DIR项数固定,一般为512项,每项占32字节,即DIR占32个扇区
则一个文件的逻辑扇区号:
逻辑扇区号=1+2*FAT占用的扇区数+DIR占用的扇区数+(起始簇号-2)*每簇扇区数
3.2FAT32:
DBR和其后的保留扇区--FAT1--FAT2-DATA
在DBR使用3个扇区,实际只使用第1个扇区,2,3扇区也写入55AA标志,之后有保留扇区,一般为20h或21h,其中第6扇区是DBR的备份。
同时DIR当作文件处理,不在固定位置,也没有固定大小
则文件的逻辑扇区号:
逻辑扇区号=保留扇区数+2*FAT占用扇区数+(起始簇号-2)*每簇扇区数
此时因为DIR不固定,要在BPB中读出DIR的入口簇。
对于一个确定的分区,可通过逻辑地址来访问该分区中的扇区。
逻辑地址从0开始。
在98和dos下可用debug的L命令来访问:
L[address][drive][firstsector][number]
读逻辑盘的扇区,扇区号为逻辑地址,0为DBR即BOOT区
drive按A,B,C,D排序,对应0,1,2,3...
对应W命令:
W[address][drive][firstsector][number]
W若不带参数,或只有地址参数,则按BX:
CX寄存器指出的字节,从内
存向磁盘写入数据。
此时的文件名是此命令前最后一个使用过的文件名
,或者是N命令中指定的文件,如果没有使用过N命令,则使用Debug命
令行中指定的文件。
DBR(dosbootrecord)操作系统可访问的第一个扇区。
包括一个引导程序和BPB(biosparameterblock)的本分区参数记录表。
FAT(fileallocationtable)fat中的记录和磁盘上的簇对应。
FAT2为FAT1的备份。
FAT的格式有多种,其中FAT16是指文件分配表使用16位表示一个簇,FAT12,FAT32同理。
可知FAT16最多能管理65536个簇,而每簇最大32kb,所以FAT16每个分区最大2GB。
(注:
FAT的0,1簇保留,0字节表示磁盘类型,簇号从2开始。
)
DFT(文件目录表)根目录区,只存在FAT12和FAT16中,紧跟在FAT2后。
根目录下的文件和子目录在DFT中都有一个‘目录登记项'每个项占32字节,项数在BPB中说明。
FAT32中DFT无固定位置,把DFT当作一个普通文件处理,在BPB中指出DFT首簇地址。
长文件名规则:
目录项保存该文件的短文件名,长文件名用若干个长文件名目录向保存,长文件名目录项倒序排列在文件短目录项前面,采用双字节unicode内码保存,每项最多13个内码,首字节是顺序字节,指明是长文件名的第几项,11字节为0F,12字节指明类型,13字节为校验和,26,27字节为0。
--------------------------------------------------------------------------
3.3FAT文件系统的的一些参数:
3.3.1FAT16的BPB:
偏移
长度
说明
00
3
JMP指令;跳转到引导程序。
后随一个空操作。
(不属BPB)
03
8
OEM标志(FAT16为MSWIN4.0)
0B
2
每扇区字节数
0D
1
每簇扇区数
0E
2
dos保留扇区数
10
1
FAT数
11
2
根目录项数,如512
13
2
扇区数(小于32M的分区)
15
1
介质描述符
16
2
每FAT扇区数
18
2
每磁道扇区数(逻辑参数)
1A
2
磁头数(逻辑参数
1C
4
隐含扇区(即分区表中的8-11字节——本分区之前已用扇区数)***
20
4
扇区数(即分区表中的12-15字节)
24
1
BIOS设备号(hex:
HD=8x)
25
1
未使用
26
1
扩展引导标记
27
4
卷序列号(随机)
2B
11
卷标,分区标识,如:
WIN98
36
8
文件系统格式:
FAT16
3.3.2FAT32的BPB:
偏移
长度
说明
00
3
JMP指令
03
8
OEM标志(FAT32为MSWIN4.1)
0B
2
每字节扇区数
0D
1
每簇扇区数
0E
2
dos保留扇区数,FAT32中一般是32
10
1
FAT数
11
2
根目录项数,一般为0,未使用
13
2
扇区数(小于32M的分区,FAT32中不再使用)
15
1
介质描述符
16
2
每FAT扇区数(FAT32下不用)
18
2
每磁道扇区数(逻辑参数)
1A
2
磁头数(逻辑参数)
1C
4
隐含扇区(即分区表中的8-11字节——本分区之前已用扇区数)***
20
4
扇区数(即分区表中的12-15字节)
24
4
每FAT扇区数
28
2
标记
2A
2
版本
2C
4
根目录首簇地址
30
2
DBR占用的扇区数
32
2
备份DBR地址
34
12
保留
40
1
BIOS设备号(hex:
HD=8x)
41
1
未使用
42
1
扩展引导标记
43
4
卷序列号(随机)
47
11
卷标,分区标识,如:
WIN2000
52
8
文件系统格式:
FAT32
3.3.3磁介质描述符:
十六进制
说明
F8
硬盘
F9
双面5in软盘(15扇区高密度)双面3in软盘
FA
双面3inRAM虚拟盘
FC
单面5in软盘(9扇区高密度)双面8in盘
FD
双面5in盘(9扇区低密度)
FE
单面8in盘(单、双密度)单面5in盘(8扇区低密度)
FF
双面5in盘(8扇区低密)
3.3.4FAT中每个簇号可取的表项值及含义:
表项值(12位)
表项值(16位)
表项值(32位)
簇描述含义
000H
0000H
00000000H
未使用的簇
002H-FEFH
0002H-FFEFH
00000002H-FFFFFFEFH
已分配的簇(可见簇号从2开始)
FF0H-FF6H
FFF0H-FFF6H
FFFFFFF0H-FFFFFFF6H
保留
FF7H
FFF7H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬盘分区 结构 windows 文件系统
![提示](https://static.bdocx.com/images/bang_tan.gif)