硬盘信息.docx
- 文档编号:11471615
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:29
- 大小:289.82KB
硬盘信息.docx
《硬盘信息.docx》由会员分享,可在线阅读,更多相关《硬盘信息.docx(29页珍藏版)》请在冰豆网上搜索。
硬盘信息
硬盘结构及其分区简介
(版本/日期)
目录
背景知识简介:
2
硬盘结构简介:
2
基本INT13H调用简介:
2
扩展INT13H调用简介:
3
磁盘分区简介:
4
BOOTSECTOR简介4
分区表结构简介4
扩展分区简介5
硬盘分区类型6
如何找到一个逻辑分区7
逻辑分区简介:
8
FAT16FAT32NTFS逻辑分区BOOTSECTOR8
FAT16FAT32逻辑分区组成结构12
NTFS逻辑分区组成结构13
背景知识简介:
硬盘结构简介:
很久以前,硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘.也就是硬盘盘片的每一条磁道都具有相同的扇区数.由此人们定义硬盘参数为(CHS)参数,即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应的寻址方式。
其中:
磁头数表示硬盘总共有几个磁头,也就是有几面盘片,最大为255(用8个二进制位存储);
柱面数表示硬盘每一面盘片上有几条磁道,最大为1023(用10个二进制位存储);
扇区数(Sectors)表示每一条磁道上有几个扇区,最大为63(用6个二进制位存储);
每个扇区一般是512个字节,理论上讲这不是必须的,但好象没有取别的值的;
所以磁盘最大容量为:
255*1023*63*512/1048576=8024GB(1M=1048576Bytes)
或硬盘厂商常用的单位:
255*1023*63*512/1000000=8414GB(1M=1000000Bytes)
在CHS寻址方式中,磁头,柱面,扇区的取值范围分别为0到Heads–1,0到Cylinders-1,1
到Sectors(注意是从1开始)
在老式硬盘中,由于每个磁道的扇区数相等,所以外道的记录密度要远低于内道,因此会浪费
很多磁盘空间(与软盘一样)。
为了解决这一问题,进一步提高硬盘容量,人们改用等密度结构生产
硬盘。
也就是说,外圈磁道的扇区比内圈磁道多。
采用这种结构后,硬盘不再具有实际的3D参数,
寻址方式也改为线性寻址,即以扇区为单位进行寻址。
为了与使用3D寻址的老软件兼容在硬盘控
制器内部安装了一个地址翻译器。
由它负责将老式3D参数翻译成新的线性参数。
这也是为什么现
在硬盘的3D参数可以有多种选择的原因(不同的工作模式,对应不同的3D参数,如LBA,LARGE,NORMAL)。
基本INT13H调用简介:
BIOSINT13H调用是BIOS提供的磁盘基本输入输出中断调用,它可以完成磁盘(包括硬盘和
软盘)的复位,读写,校验,定位,诊断,格式化等功能.它使用的就是CHS寻址方式,因此最大识能访问8GB左右的硬盘
INT13H调用中
AH=功能号
AL=扇区数
CH,CL=磁头号,扇区号
DH,DL=磁头号,驱动器号
ES:
BX=数据缓冲区地址
功能号AH:
0软盘系统复位
1读软盘状态只有AH有效返回AL=状态字节
2读磁盘成功AH=0失败AH=错误代码
3写磁盘成功AH=0失败AH=错误代码
4检验磁盘扇区(ES:
BX不设置)成功AH=0失败AH=错误代码
5格式化磁道(ES:
BX=磁道地址CH,CL不设置)成功AH=0失败AH=错误代码
8取磁盘参数(只需设置AH,DL返回值方在CH,CL,DH中)成功AH=0
失败AH=错误代码
扩展INT13H调用简介:
为了支持大于8G的硬盘,现在的主板BIOS提供了扩展INT13H调用,它使用的是线性寻址方
式。
功能号AH:
41H检测是否支持扩展INT13H调用BX=55AAHAH=0支持
42H读磁盘扇区
DL=磁盘号
DS:
SI=调用结构的地址
调用结构:
disk_addr_pktstruc
packet_sizedb16;结构长度通常为161字节
reserveddb0;保留必须为01字节
block_countdw?
;读取扇区数目2字节
buffer_addrdd?
;缓冲区地址4字节高2字节段址低2
节字偏移
block_numdq?
;读取的绝对扇区起始号8字节
disk_addr_pktends
成功AH=0失败AH=错误代码。
43H写磁盘扇区
DL=磁盘号
DS:
SI=调用结构的地址
调用结构与读磁盘相同
成功AH=0失败AH=错误代码。
48H取得磁盘参数
DL=磁盘号
DS:
SI=结果缓冲区
结构如下
info_sizedw26缓冲区长度26
flagsdw?
磁盘状态标志字
cylindersdd?
磁盘逻辑柱面数
headsdd?
磁盘逻辑磁头数
sec_per_trackdd?
磁盘逻辑每道扇区数
sectorsdq?
磁盘总扇区数
sector_sizedw?
磁盘每扇区字节数
AH=0失败AH=错误代码
磁盘分区简介:
BOOTSECTOR简介
BootSector也就是硬盘的第一个扇区,它由MBR(MasterBootRecord),DPT(DiskPartition
Table)和BootRecordID三部分组成。
MBR又称作主引导记录占用BootSector的前446个字节(0to0x1BD),存放系统主引导程序
(它负责从活动分区中装载并运行系统引导程序).DPT即主分区表占用64个字节(0x1BEto0x1FD),记录了磁盘的基本分区信息,主分区
表分为四个分区项,,每项16字节,分别记录了每个主分区的信息(因此最多可以有四个主分区).
BootRecordID即引导区标记占用两个字节(0x1FEand0x1FF),对于合法引导区,它等于0xAA55
,这是判别引导区是否合法的标志。
BOOTSECTOR的具体结构如下图所示:
BOOTSECTOR结构图
分区表结构简介
分区表由四个分区项构成,每一项长度为16个字节,分区表结构如下图所示:
分区表结构图
扩展分区简介
由于主分区表中只能分四个分区,无法满足需求,因此设计了一种扩展分区格式.基本上说,
扩展分区的信息是以链表形式存放的,但也有一些特别的地方.
首先,主分区表中要有一个基本扩展分区项,所有扩展分区都隶属于它,也就是说其他所有扩展
分区的空间都必须包括在这个基本扩展分区中.对于DOS/Windows来说,扩展分区的类型为0x05(EXTENDX).除基本扩展分区以外的其他所有扩展分区则以链表的形式级联存放,后一个扩展分区的数据项记录在前一个扩展分区的分区表中,但两个扩展分区的空间并不重叠.扩展分区类似于一个完整的硬盘,必须进一步分区才能使用.但每个扩展分区中只能存在一个其他分区.此分区在DOS/Windows环境中即为逻辑盘.因此每一个扩展分区的分区表(同样存储在扩展分区的第一个扇区中)中最多只能有两个分区数据项(包括下一个扩展分区的数据项).
扩展分区的分区表存放在该分区的第一个扇区中它的结构与硬盘的BOOTSETOR基本相同,
只是没有主引导纪录,即该扇区的0-0X1BD的数据是无效的,另外它的分区表只有前面两项是有效
的。
他的最后两个字节也是合法性检测标志即55AA
下面是扩展分区的结构示意图
扩展分区的结构示意图
硬盘分区类型
0未使用分区项
1DOS12一种fat表为12位的分区主要用于早期小硬盘和部分软盘
2xenix一种linux分区
4D0S16早期硬盘分区方法,分区表项为16位,最大支持32M分区大小
5EXTEND扩展分区的一种该分区的起始扇区为前面的第一个EXTENDX分区起始扇区+该分
区的相对偏移
6BIGDOS即FAT16分区分区表为16位,每簇最大为32K,最大分区为2G
7NTFS分区
BFAT32分区分区表为32位
CFAT32X分区与FAT32基本相同
EBIGDOSX即FAT16分区扩展分区表为16位,每簇最大可以超过32K
FEXTENDX扩展分区的一种,起始扇区为该分区的相对偏移或者前面的前面的第一个
EXTENDX分区起始扇区+该分区的相对偏移;
如何找到一个逻辑分区
前面介绍了硬盘的分区结构,下面主要讲解如何找到一个硬盘的逻辑分区
首先读取硬盘BOOTSECTOR,读取该硬盘的分区表例如下面是一个15G硬盘
的BOOTSECTOR
0X00033C08ED0BC007CFB-5007501FFCBE1B7C3.....|.P.P....|
0X010BF1B065057B9E501-F3A4CBBDBE07B104...PW...........
0X02030386E007C09751383-C510E2F4CD188BF58n.|.u..........
0X03083C610497419382C-74F6A0B507B4078B...It.8,t.......
0X040F0AC3C0074FCBB07-00B40ECD10EBF288..<.t...........
0X0504E10E84600732AFE-4610807E040B740BN..F.s*.F..~..t.
0X060807E040C7405A0B6-0775D28046020683.~..t....u..F...
0X07046080683560A00E8-21007305A0B607EBF...V...!
.s.....
0X080BC813EFE7D55AA74-0B807E100074C8A0..>.}U.t..~..t..
0X090B707EBA98BFC1E57-8BF5CBBF05008A56.......W.......V
0XA000B408CD1372238A-C1243F988ADE8AFC.....r#..$?
.....
0XB043F7E38BD186D6B1-06D2EE42F7E23956C..........B..9V
0X0C00A77237205394608-731CB80102BB007C.w#r.9F.s......|
0X0D08B4E028B5600CD13-73514F744E32E48A.N..V...sQOtN2..
0X0E05600CD13EBE48A56-0060BBAA55B441CDV......V.`..U.A.
0X0F013723681FB55AA75-30F6C101742B6160.r6..U.u0...t+a`
0X1006A006A00FF760AFF-76086A0068007C6Aj.j..v..v.j.h.|j
0X110016A10B4428BF4CD-136161730E4F740B.j..B....aas.Ot.
0X12032E48A5600CD13EB-D661F9C3496E76612..V.....a..Inva
0X1306C69642070617274-6974696F6E207461lidpartitionta
0X140626C65004572726F-72206C6F6164696Eble.Errorloadin
0X15067206F7065726174-696E672073797374goperatingsyst
0X160656D004D69737369-6E67206F70657261em.Missingopera
0X17074696E6720737973-74656D0000000000tingsystem.....
0X1800000000000000000-0000000000000000................
0X1900000000000000000-0000000000000000................
0X1A00000000000000000-0000000000000000................
0X1B000000000002C4463-DEBBC476008001.....,Dc...v....
0X1C0010006FE3F0C3F00-00008E2F03000000....?
.?
..../....
0X1D0010D0FFEFFFFCD2F-0300D56CBC010000......./...l....
0X1E00000000000000000-0000000000000000................
0X1F00000000000000000-00000000000055AA..............U.
一个硬盘的BOOTSECTORS数据
其中红色部分是主引导纪录(MBR)
蓝色和浅绿色是分区表数据一共是4个分区项和显然后两个分区表项是未用的。
最后两个字节是合法性标志。
对于第一个分区表项可以知道该分区是一个活动分区,分区类型是0X0C(FAT16)分区
分区相对扇区起始地址是0x3f(63)分区大小是0x32F8E(208782个扇区大小大概为100M
由于这是柱分区该分区的起始扇区号就为0x3f;
对于第二个分区表项可以知道该分区的分区类型是0x0F(EXTENDX)分区,起始扇区地址是
0X32FCD(208845)分区大小是0X1BC6CD5(29125845)个扇区。
读取扇区0X32FCD取出扩展分区得的分区表项
0001010D07FEBF0A3F0000003F047D00
0000810B05FEFF097E047D003F823E00
00000000000000000000000000000000
00000000000000000000000000000000
取出第一个分区表项知道该分区是类型是7(NTFS分区)分区大小是0X7D043F
分区相对扇区号为0x3f可以算出分区的起始扇区是0X32FCD+0X3F=0X3300C
取出第二个分区表项知道该分区是类型是5(EXTEND分区)分区大小是0X3E823F
分区相对扇区号为0X7D047E可以算出分区的起始扇区是0X32FCD+0X7D047E=0X80344B
读取扇区0X80344B取出扩展分区得的分区表项
0001810b0bfeff083f00000000823e00
0000c10a05feffffbd86bb0057a70001
00000000000000000000000000000000
00000000000000000000000000000000
取出第一个分区表项知道该分区是类型是0b(fat32分区)分区大小是0X3e8200
分区相对扇区号为0x3f可以算出分区的起始扇区是0X32FCD+0x7d047e+0X3F=0X80348a
取出第二个分区表项知道该分区是类型是5(EXTEND分区)分区大小是0X100a757
分区相对扇区号为0Xbb86bd可以算出分区的起始扇区是0X32FCD+0Xbb86bd=0Xbbe68a
读取扇区0Xbbe68a取出扩展分区得的分区表项
0001c10a07feffff3f00000018a70001
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
取出第一个分区表项知道该分区是类型是7(NTFS分区)分区大小是0X100a718
分区相对扇区号为0x3f可以算出分区的起始扇区是0X32FCD+0xbbe68a+3f=0Xbeb6c9
逻辑分区简介:
FAT16FAT32NTFS逻辑分区BOOTSECTOR
逻辑分区的BOOTSECTOR的第一个扇区它由以下部分组成
跳转指令
硬盘分区类型的文本字符名
分区参数块
扩展的分区参数块
启动指令块
合法性标志55AA
对于不同的分区类型这些块的内容与意义是不同的下面是FATFAT32NTFS各分区的BOOTSECTORD的内容语义的略图
FAT16分区BOOTSECTOR结构图[
FAT32分区BOOTSECTOR结构图[
NTFS分区BOOTSECTOR结构图
FAT16FAT32逻辑分区组成结构
FAT16和FAT32的分区组成结构比较类似其基本如下:
FAT16FAT32逻辑盘结构图
其中FAT16的根目录区是固定大小的紧跟在FAT表后,而FAT32的根目录区可以是不固定大小的
在BOOTSECTOR中提供了根目录区的第一个簇的簇号。
每一个目录项占20个字节这些字节的定义如下
0-A文件名第一个字节为E5表示该目录项已被删除,为0表示未用,为2E表示是当前目录或者根目录。
B是文件属性BIT0文档BIT1只读文件BIT2系统文件BIT3隐藏文件BIT4目录BIT5卷标
0X10-0X13文件创建日期
0X14-0X15文件或目录起始簇号高16位(对FAT16无效为0000)。
0X16-0X19文件更改日期
0X1A-0X1B文件或目录起始簇号低16位。
0X1C-0X1F文件大小(对目录该项为0)
整个磁盘空间是按簇划分,在BOOTSECTOR中记录了每个簇的大小参数。
FAT表是用来记录整个磁盘空间的使用与分配情况的它的结构是一种链式结构。
他每16个字节或者32个字节表示一个簇。
例如我们在FAT16分区找到第121簇的使用情况
过程如下:
假设该分区大小为2G,起始扇区为63,FAT表为255个扇区,根目录有0X100个入口,每簇大小为64个扇区,隐含扇区为1个。
该簇在FAT表中的位置为:
A=121*2=241;B=A%512;IF(B!
=0);B=1;
C=63+1+A/512+B;
读取扇区C到缓冲区取第A%512/2个字即为该扇区的下一个扇区,如果为0表示该扇区未用,
为FFFF表示该扇区为最后一个扇区。
其他的表示有下一个扇区。
该簇的物理磁盘扇区号是63+1+255*2+0X100*20/512+(121-2)*64
读于一个FAT32分区,要找到121簇的使用情况
假设该分区大小为4G,起始扇区为200048,FAT表为3997个扇区,每簇大小为8个扇区,根目录起始簇号为2,隐含扇区为32个。
该簇在FAT表中的位置为:
A=121*4=241;B=A%512;IF(B!
=0);B=1;
C=20048+32+A/512+B;
读取扇区C到缓冲区取第A%512/4个双字即为该扇区的下一个扇区,如果为0表示该扇区未用,
为FFFFFFFF表示该扇区为最后一个扇区。
其他的表示有下一个扇区。
该簇的物理磁盘扇区号是20048+32+3997*2+(121-2)*8
经过上面的介绍我们就比较清楚整个FAT16FAT32分区的寻址方式
例如读取文件C:
\WINDOWS\SYSTEM.INI
首先找到逻辑盘C的起始扇区,然后读出他的根目录区,在根目录区中找到WINDOWS子目录项,
找到目录项中该子目录的起始簇,在FAT表中找到以该簇为起始簇的簇链,读出这些簇的所在的扇区内容然后找到文件名为SYTEM.INI的目录项,取得它的起始簇号,读出该簇为起始簇的簇链的所有扇区内容即可。
NTFS逻辑分区组成结构
NTFS分区的结构比FAT16和FAT32复杂。
整个NTFS分区也是和FAT分区一样以簇为基本的的存储结构,但NTFS分区把整个分区的全部扇区都作为簇来划分,而FAT分区的BOOTSECTOR
FAT表,根目录(FAT32除外),作为另外的部分它的起始簇是在这些扇区之后的。
NTFS分区的结构大概如下;
BOOTSECTOR记录了MFT表的起始簇号,通过BOOTSECTOR找到MFT的起始扇区,(方法
是磁盘起始扇区+簇号*每簇扇区数)。
MFT表是由很多个MFT记录构成,每个MFT记录表示一个文件的信息,MFT表将整个文件系统的内容,都当成文件来处理包括它自己本身。
MFT表记录将文件的所有信息都当成属性来处理。
下面是MFT记录的头结构说明。
起始长度意义
04MFT记录标志FILE
42修复校验偏移(Offsettofixupusually2C)
62修复数据长度,包含第一个字节
88LSN
102序列号
起始长度意义
122链节个数(有多少个文件名链节在这个实际文件上)
142第一个属性的起始于该MFT记录得哪一个字节
162BIT0表示该记录中有属性值存于记录外,BIT1表示该记录中
存有文件目录
184该记录的有效字节数(记录头+所有属性长度和)
1C4该记录的长度
208高
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬盘 信息