硬盘分区结构及windows文件系统结构

上传人:ji****72 文档编号:38037575 上传时间:2018-04-26 格式:DOC 页数:17 大小:297.50KB
返回 下载 相关 举报
硬盘分区结构及windows文件系统结构_第1页
第1页 / 共17页
硬盘分区结构及windows文件系统结构_第2页
第2页 / 共17页
硬盘分区结构及windows文件系统结构_第3页
第3页 / 共17页
硬盘分区结构及windows文件系统结构_第4页
第4页 / 共17页
硬盘分区结构及windows文件系统结构_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《硬盘分区结构及windows文件系统结构》由会员分享,可在线阅读,更多相关《硬盘分区结构及windows文件系统结构(17页珍藏版)》请在金锄头文库上搜索。

1、硬盘分区结构及硬盘分区结构及 windows 文件系统结构文件系统结构详细解析硬盘分区信息参数定义详细解析硬盘分区信息参数定义2006 年 10 月 17 日 星期二 11:26 http:/ IDE 接口硬盘中,不管什么操作系统,都有如下结构:MBR(Master Boot Record)及基本分区表分区 1分区 2.分区 nMBR 和基本分区表共用硬盘的第一个扇区(即 0 面 0 道 1 扇区,以后简称第一扇区 MBR),分区表位于扇区的最后 66 字节,除了最后的 2 字节 55AA 外,为 4 条分区记录, 每条分区记录 16 字节。 各字段含义如下: 偏移意义0自举标志(80 为活动

2、分区,00 为非活动分区)1起始磁头号 H2起始扇区号 S3起始柱面号 CYL(CYL 的高 2 位存放在 S 字节的高 2 位)4分区格式标志(见下表)5终止磁头号 H6终止扇区号 S7终止柱面号 CYL8-11本分区之前已用扇区数(当分区表属于扩展分区中的记录时,该值为相对扩展分区首地址的位置)12-15 本分区扇区总数(注意:注意:C/H/S 的编址从 0/0/1 开始)分区格式标志意义01fat1205extended06fat1607hpfs/ntfs0b,0dwin95 fat320ewin95 fat1682linux swap83linux85linux extended可以看

3、出,使用 C/H/S 三维地址时,磁盘的寻址空间最多只有 224个扇区,即 8GB 的 容量,当磁盘容量大于 8GB 时,C/H/S 就无法寻址了。 于是采用 LBA(logic block address)线性地址来寻址(即 08-0F 字节标注扇区数)。在 LBA 方式下系统把所有的物理扇区都按某种方式或规则看做是一线性编号的扇区,即从 0 到某个最大值方式排列。(按此方法容易知道,磁盘寻址空间最大为 2TB,或需转换成 GPT) 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 表示

4、每磁道多少扇区,PH 表示每柱 面多少磁道。(也有 PH=240 的) LBA 到 C/H/S: C=LBA/(PH*PS)+c H=(LBA/PS)MOD PH +h S=LBA MOD PS + s 由于 MBR 只能记录 4 个分区的信息,windows 通过扩展分区来记录多于 4 个分区的 记录,称做虚拟 MBR。 做法是: 让主 MBR 在定义分区时,将多余容量定义为扩展分区,指定该分区的起始位置,根 据起始位置指向硬盘的某一扇区,作为下一个分区表,在该扇区继续定义分区。如果只有 一个分区,就定义该分区,然后结束;如果不止一个分区,就定义一个基本分区和一个扩 展分区,扩展分区再指向下

5、一个分区表,在下一个分区表中继续定义分区,直至结束。这 样就形成一个分区链,可以描述所有的分区。 一个分区表的例子: +00+01+02+03+04+05+06+07+08+09+0A+0B+0C+0D+0E+0F1B080011C001000CFEFFFF3F000000FC8A380100001D0C1FF83FEFFFF3B8B38016E9AF60000001E0C1FF82FEFFFFA9252F02E11608000000MBR1F0C1FF0FFEFFFF8A3C37026243530755AA+1B00001+1C0C1FF0BFEFFFF3F00000037167102000

6、0+1D0C1FF05FEFFFF761671023B8B38010000+1E000000000000000000000000000000000EXT-1+1F0000000000000000000000000000055AA+1B00001+1C0C1FF0BFEFFFF3F000000FC8A38010000+1D0C1FF05FEFFFFB1A1A9032CD5FB020000+1E000000000000000000000000000000000EXT-2+1F0000000000000000000000000000055AA+1B00001+1C0C1FF0BFEFFFF3F000

7、000EDD4FB020000+1D0C1FF05FEFFFFDD76A5063E15AC000000+1E000000000000000000000000000000000EXT-3+1F0000000000000000000000000000055AA+1B00001+1C0C1FF0BFEFFFF3F000000FF14AC000000+1D0C1FF05FEFFFF1B8C510747B701000000+1E000000000000000000000000000000000EXT-4+1F0000000000000000000000000000055AA+1B00001+1C0C1F

8、F07FEFFFF3F00000008B701000000+1D000000000000000000000000000000000+1E000000000000000000000000000000000EXT-5+1F0000000000000000000000000000055AA(注意:系统在启动时按照分区链的顺序查找分区,直到找出所有分区,如果分区链形成 一个环,就形成所谓硬盘“逻辑锁“,导致系统无法启动,软盘也无法启动。由于 windows 启动过程在 io.sys 中决定的,可以查找 io.sys,将第一个 55AA 改成其他数值,程序还没 开始查找分区表就结束,就避开了对分区表的检

9、测) - 2.关于关于 INT 132.1 通过 int 13 来读取物理扇区的例子:a100 mov ax,201 mov bx,200 mov cx,1 mov dx,80 int 13 int 3 g=100参数解释:al:读写扇区数bx:缓冲区地址dh:磁头号dl:设备号(A 盘是 0,B 是 1,第一硬盘是 80,第二硬盘是 81)ch:柱面号低 8 位cl:低 6 位为要读的起始扇区号,高 2 位为柱面号的高 2 位。2.2 扩展 INT 13: 数据类型约定:BYTE1 字节整型(8 位) WORD2 字节整型(16 位) DWORD4 字节整型(32 位) QWORD8 字节整

10、型(64 位) 磁盘地址数据包 Disk Address Packet (DAP):DAP 是基于绝对扇区地址的, 因此利用 DAP, Int13H 可以轻松地逾 越 1024 柱面的限制, 因为它根本就不需要 CHS 的概念.DAP 的结构如下:struct DiskAddressPacketBYTE PacketSize; / 数据包尺寸(16 字节)BYTE Reserved; / =0WORD BlockCount; / 要传输的数据块个数(以扇区为单位)DWORD BufferAddr; / 传输缓冲地址(segment:offset,在内存中为 offset 在 低地址如 166b

11、:400 在内存中为:00 04 6b 16)QWORD BlockNum; / 磁盘起始绝对块地址(即 LBA 地址); 驱动器参数数据包 Drive Parameters Packet:驱动器参数数据包是在扩展 Int13H 的取得驱动器参数子功能调用中 使用的数据包. 格式如下:struct DriveParametersPacketWORD InfoSize; / 数据包尺寸 (26 字节)WORD Flags; / 信息标志DWORD Cylinders; / 磁盘柱面数DWORD Heads; / 磁盘磁头数DWORD SectorsPerTrack; / 每磁道扇区数QWORD

12、Sectors; / 磁盘总扇区数WORD SectorSize; / 扇区尺寸 (以字节为单位); 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 位

13、表示是否 支持第二个子集. 对于 1.x 版的扩展 Int13H 来说, 主版本号 AH = 1. AL 是副版本号, 但这仅限于 BIOS 内部使用, 任何软件不得检查 AL 的值. 2.2.2) 扩展读 入口: AH = 42h DL = 驱动器号 DS:SI = 磁盘地址数据包(Disk Address Packet) 返回: CF = 0, AH = 0 成功 CF = 1, AH = 错误码 这个调用将磁盘上的数据读入内存. 如果出现错误, DAP 的 BlockCount 项中则记录了出错前实际读取的数据块个数. 2.2.3) 扩展写 入口: AH = 43h AL 0 位 = 0

14、 关闭写校验 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 = 磁盘地址数据包(Disk Addr

15、ess Packet) 返回: 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 = 46

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号