|
深入浅出硬盘分区表
硬盘分区结构解说
硬盘刚买来使用时需要经过分区然后格式化才能够使用,硬盘经过分区后,分区软件便会写一个主引导扇区,这个扇区位于硬盘的 0 磁道 0 柱面第1扇区(即0区)(注意:该扇区为隐含扇区,0道0面的全部扇区均为隐含扇区,普通的磁盘访问命令无法直接访问,同时该磁道的其他62个扇区也是隐含的,因此有引多系统引导程序就把自己的程序代码放在其他隐含扇区,有些引导区病毒也把自己的代码放在其他隐含扇区。)。在该扇区512字节中,硬盘的主引导记录区MBR (Main Boot Record)只占用了前 446 个字节(偏移 000H-- 偏移 1BDH ),另外的 64个字节(偏移 1BEH-- 偏移 1FDH )是硬盘分区表DPT(Disk Partition Table ) , 最后两个字节 "55 AA" (偏移 1FEH-偏移 1FFH )是分区结束标志。
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有活动标志(80H)的分区上的操作系统,并将控制权交给活动盘上的操作系统的启动程序。其具体结构如下:
[/url]

MBR的产生不依赖哪一种操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。主引导区的引导程序也可以全部为0,只是此时的硬盘不能引导起动。不论硬盘所装的什么样的操作系统,其MBR区的分区表的结构是一样的,引导程序在WINDOWS操作系统下基本一样,MSDOS6.22和MSDOS7.0不一样,其内容有所改变,但工作原理是一样的。如果你的电脑C盘安装的是NT操作系统时,其MBR区的引导程序就会和WIN98的不同。
每个硬盘都只能有一个主引导区,扩展分区表可以有多个。
而当我们用分区软件建立好逻辑盘之后,需要对其进行格式化,对于不同的系统节构其格式也不同,对于Dos/Win操作系统,格式化会于分区逻辑首扇区建立引导扇区,其后是文件分配表(FAT),再后就是目录表和数据区了
DOS 引导扇区在Dos下可以用Debug方便读出
C:\>DEBUG
-L 100 2 0 1
;读C盘0扇区到内存当前段的100H处
-D ;显示DOS 引导扇区内容
而主引导扇区属于隐含扇区,不在Dos分区范围之内,所以需要通过几句Masm语句实现,下面是硬盘的MBR扇区内容:
[url=http://www.ezikao.com.cn/uploadimages/200372914412421289.jpg]

分析硬盘分区表的内容定义:
其中从地址地03BE处的80开始到地址03FD处结尾,其间就是所谓的硬盘分区表,共64个字节,每个分区占16个字节。也就是说不管硬盘有多大,最多也只能有四个主分区(扩展分区也是一个主分区)。
我们通常在WIN98下使用FDISK分区工具分区时,只分了一个活动分区和一个扩展分区。
从上面的分区表的内容我们可以看出,这个硬盘一共有3个主分区,两个0B分区(其中一个是隐含的,即在WIN98和其他操作系统中是不可见的)和一个0F扩展分区。
分区表中的“80 01 01 00 0B FE 7F E6 3F 00-00 00 E8 60 77 00”这一段内容就表示第一个主分区参数。
其中:
偏移地址BEH:80表示当前分区为活动状态(如果该块硬盘不只有一个主分区,那么该位置的80H也可能是00H)
偏移地址BF-C1H:01 01 00表示起始的磁头1柱面1,扇区数0
偏移地址C2H:0B 表示该分区是FAT32磁盘格式
偏移地址C3H-C5H:FE 7F E6 表示结束的磁头254D柱面486D扇区数63D
偏移地址C6H-C9H:3F 00 00 00表示该硬盘有0000003FH(63D)个隐含扇区(也就是硬盘主引导区所在的0道0面的全部扇区)
偏移地址CAH-CDH:E8 60 77 00表示该分区的全部扇区数(7760E8H=7823592D)
注意:
1)分区表中的内容全部是十六进制,并且高位在前,低位在后。
2)偏移地址C2H表示的分区类型常用的,04,05,06,0B,0C,0F,07等,如果把其前面的0改为1即,14,15,16,1B,1C,1F,17就表示该分区为隐含分区。
其他相关应用说明
1. 找回误操作或病毒破坏丢失的分区
对于WIN操作系统自带的Fdisk分区工具,只能死板的分区,速度很慢,其实这样也有好处,不容易出现误操作。对于Pqmagic,Diskman,SmartFdisk,DM等分区工具,不对磁盘完整性进行检测,分区速度很快,但正因为其速度快,很容易产生误操作。我们轻轻的按一个回车键,可能我们辛辛苦苦积攒的“好东西”就无影无踪了。当我们不当分区后,这时千万不要再拷贝数据和格式化新的分区。这时我们可以通过KV3000的F6磁盘工具来对整个硬盘寻找“55AA”,在寻找时,我们可以根据该硬盘的全部扇区数,所丢失分区的大小在整个硬盘中的位置,用F3功能输入要搜索的大致范围,找出丢失分区的“扩展分区表”所在的绝对扇区地址,并把它链接入上一个逻辑分区的扩展分区中即可。不过,如果你的硬盘经过多次的分区调整与变换时,使用KV3000的磁盘分区修复功能往往会失效,因为硬盘上的“55AA”标志太多了。
2. 隐藏有重要文件的分区
如果我们在公用的机器上或自己电脑上有重要的文件时,这时我们可以在硬盘上建上个合适的分区(使用主分区相对容易一些,真接对MBR操作就可以了,如果是逻辑分区,就需要计算这个逻辑分区的具体位置),把自己的文件搬移过过去后,用磁盘工具把该分区的属性字节的内容的“0XH“改为”1XH“即可,这时在任何操作系统下这个分区都是不可显出的。
3. 手动备份MBR和DBR扇区内容
当我们的硬盘的分区丢失或出现错误时,如果我们有MBR备份就非常方便了,只要把备份的MBR记录恢复就可以了。使用磁盘编辑工具我们可以直接备份任意一个扇区的内容。
4. 去除恢复精灵的密码
恢复精灵这个软件还是挺好用的,对于网吧和经常玩游戏的朋友还是一个挺不错的系统恢复工具。在上网时被黑客黑了,只要重启一下就一切OK了。但是如果密码丢失,这时你就很难办了,重新分区也是无效的(QDI主板的宙斯盾和捷波主板的恢复精灵都有同样的功能),也没法格式化硬盘,你想存储数据也是不可能的。即使你把硬盘摘下来,挂到别的机子上也没有办法。这时我们就可以先用特殊的软盘启动主机后,再直接用磁盘编辑工具对硬盘分区表进行修改,并用FDISK/MBR恢复主引导区,再用SYS C:传送系统文件来修复活动分区的引导区,这时就彻底去除恢复精灵了。注意在操作过程中一定不要使用硬盘自己启动,直到最后才让硬盘启动。
深入浅出硬盘分区表
人们在使用电脑时,有时由于异常操作,有时由于病毒侵袭,会导致某个分区消失或硬盘无法启动。究其原因,就是硬盘分区表受损。硬盘分区表可以说是支持硬盘正常工作的骨架.操作系统正是通过它把硬盘划分为若干个分区,然后再在每个分区里面创建文件系统,写入数据文件.本文主要讲述的是分区表的位置,结构以及各个分区表是如何链接起来的.当掌握了这些知识后,即使分区表受到破坏,一样也可以根据残存的数据手工修复分区表,从而修复分区。
一.分区表的位置及识别标志
分区表一般位于硬盘某柱面的0磁头 1扇区.而第1个分区表(也即主分区表)总是位于
(0柱面,1磁头,1扇区),剩余的分区表位置可以由主分区表依次推导出来.分区表有64个字节,占据其所在扇区的[441-509]字节.要判定是不是分区表,就看其后紧邻的两个字节(也即[510-511])是不是 "55AA",若是,则为分区表.
二.分区表的结构
分区表由4项组成,每项16个字节.共4×16 = 64个字节.每项描述一个分区的基本信息.每个字节的含义如下:
分区表项含义
字节
含义
0
Activeflag.活动标志.若为0x80H,则表示该分区为活动分区.若为0x00H,则表示该分区为非活动分区.
1,2,3
该分区的起始磁头号,扇区号,柱面号磁头号 -- 1字节, 扇区号 -- 2字节低6位,柱面号 -- 2字节高2位 + 3字节
4
分区文件系统标志:
分区未用: 0x00H.
扩展分区: 0x05H, 0x0FH.
FAT16分区: 0x06H.
FAT32分区: 0x0BH, 0x1BH, 0x0CH, 0x1CH.
NTFS分区: 0x07H.
5,6,7
该分区的结束磁头号,扇区号,柱面号,含义同上.
8,9,10,11
逻辑起始扇区号。表示分区起点之前已用了的扇区数.
12,13,14,15
该分区所占用的扇区数.
分区表项有几个字节比较重要,下面分别阐述之: 1、(1,2,3)字节
磁头号由(1)字节8位表示,其范围为(0 -- 28 - 1),也即(0 磁头-- 254磁头)。
扇区号由(2)字节低6位表示,其范围为(0 -- 26 - 1),由于扇区号从1开始,所以其范围是(1扇区-- 63扇区)。
柱面号由(2)字节高2位 + (3)字节,共10位表示,其范围为(0 --2 10 - 1),也即(0 柱面-- 1023柱面)。
当柱面号超过1023时,这10位依然表示成1023,需要注意。
(5,6,7)字节含义同上。
2、(8, 9, 10, 11)字节
如果是主分区表,则这4 个字节表示该分区起始逻辑扇区号与逻辑0扇区(0柱面,0磁头,1扇区)之差。如果非主分区表,
则这4 个字节要么表示该分区起始逻辑扇区号与扩展分区起始逻辑扇区号之差,要么为63。详细情况在后面有所阐述。
注意: 1、扇区上的字节是按左边低位,右边高位的顺序排列的。所以在取值时,需要把字节再反一下,让高位字节在左边,低位字节在右边,
这一点在读取逻辑起始扇区号和分区大小时需要注意。举个例子:第一项的逻辑起始扇区为(3F 00 00 00),转换为十进制前要先反一下字
节顺序,为(00 00 00 3F)然后在转换为十进制,即63 .同理分区大小为(3F 04 7D 00),先反为(00 7D 04 3F)再转换为十进制,
即8193087。
2、逻辑扇区号与(柱面,磁头,扇区)的相互转换:
令L = 逻辑扇区号,C = 柱面号,H = 磁头号,S = 扇区号。
每道扇区数 = 63
每柱面磁头数 = 255
每柱面扇区数 = 每道扇区数* 每柱面磁头数
= 63 × 255
= 16065
柱面号下标从0开始。磁头号[0 -- 254],扇区号[1 -- 63]。
逻辑扇区号下标也从0开始。
(柱面,磁头,扇区)转换成逻辑扇区号的公式为:
L = C×16065 + H ×63 + S - 1 ;
比如(1柱面,1磁头,1扇区),其逻辑扇区号为:
L = 1×16065 + 1×63 + 1 - 1
= 16128
逻辑扇区号转换成(柱面,磁头,扇区) 公式为:
C = L / 16065
H = (L % 16065) / 63
S = (L % 16065) % 63 + 1
比如逻辑扇区号 16127:
C = 16127 / 16065 = 1
H = (16127 % 16065) / 63 = 0
S = (16127 % 16065) % 63 + 1 = 63
即(1柱面,0磁头,63扇区)
3、分区表上有四项,每一项表示一个分区,所以一个分区表最多只能表示4个分区。主分
区表上的4项用来表示主分区和扩展分区的信息。因为扩展分区最多只能有一个,所以硬盘
最多可以有四个主分区或者三个主分区,一个扩展分区。余下的分区表是表示逻辑分区的。
这里有必要阐述一点:逻辑区都是位于扩展分区里面的,并且逻辑分区的个数没有限制。
4、分区表所在扇区通常在(0磁头,1扇区),而该分区的开始扇区通常位于(1磁头,1扇区),中间隔了63 个隐藏扇区。
三.分区表链的查找
分区表链实际上相当于一个单向链表结构。第一个分区表,也即主分区表,可以有一项 描述扩展分区。而这一项就相当于指针,指向扩展分区。然后我们根据该指针来到扩展分 区起始柱面的0头1扇区,找到第二个分区表。对于该分区表,通常情况下:第一项描述了 扩展分区中第一个分区的信息,第二项描述下一个分区,而这第二项就相当于指向第二个分 区的指针,第三项,第四项一般均为0。我们可以根据该指针来到扩展分区中第二个分区起 始柱面的0头1扇区,找到第三个分区表。以此类推,只到最后一个分区表。而最后一个分 区表只有第一项有信?余下三项均为0.相当于其指针为空.所以只要找到了一个分区表就可 以推导找出其后面所有分区表。不过该分区表前面的分区表就不好推导出来了。但令人高兴 的是这个链表的头节点,也即主分区表的位置是固定的位于(0柱面, 0磁头, 1扇区)处, 我们可以很轻易的找到它,然后把剩下的所有分区表一一找到。
以笔者的硬盘为例:一个主分区(C盘), 一个扩展分区.扩展分区中有两个逻辑分区(D盘,E盘)其分区表链示意图如下:

图一 分区表链示意图
(一).读取(0柱面,0磁头,1扇区)处C盘的主分区表: [80 01 01 00 0B FE 7F FD 3F 00 00 00 3F 04 7D 00 ]
[00 00 41 FE 0F FE FF FF 7E 04 7D 00 1F 2C B4 00 ]
[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]第一项:
(80)(01 01 00)(0B)(FE 7F FD )(3F 00 00 00 )(3F 04 7D 00)
描述的是C盘的情况。
1.(80):表示C盘为活动分区。即系统会从C盘启动。
2.(01 01 00):表示C盘的起始扇区为(0柱面,0磁头,1扇区)。
3.(0B):表示C盘的文件系统为FAT32。
4.(FE 7F FD):
(FE) 16 = (254) 10 (7F) 16 = (0111 1111) 2 (FD) 16 = (1111 1101) 2
磁头号:(254) 10;
扇区号:(11 1111) 2 = (63) 10.
柱面号:(01 1111 1101) 2 = (509) 10
故C盘结束扇区为(509柱面,254磁头,63扇区)。
5.(3F 00 00 00):
反向,(00 00 00 3F) 16 = (63) 10,为C盘起始逻辑扇区号与逻辑0扇区号之差。表示C盘前面已有63个扇区,这63个扇区为系统隐藏扇区。
6. (3F 04 7D 00):
反向,(00 7D 04 3F) 16 = (8193087) 10。表明C盘有8193087个扇区。即(0柱面,1磁头,1扇区)至(509柱面,254磁头,63扇区)
共有8193087个扇区。
第二项:
(00)(00 41 FE)(0F)(FE FF FF)(7E 04 7D 00)(1F 2C B4 00)
描述的是扩展分区的情况。
1. (00): 表示该分区不是活动分区。
2. (00 41 FE):
(00) 16 = (0) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2
磁头号:(0) 10;
扇区号:(00 0001) 2 = (1) 10.
柱面号:(01 1111 1110) 2 = (510) 10
所以扩展分区的起始扇区为(510柱面,0磁头,1扇区)。
3. (0F): 表示该分区为扩展分区。
4. (FE FF FF):
(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2;
磁头号:(254) 10;
扇区号:(11 1111) 2 = (63) 10.
柱面号:(11 1111 1111) 2 = (1023) 10
但这是不准确的,因为当柱面号的真实值超过1023时,表示柱面号的10位也依然是1023。
5. (7E 04 7D 00):
反向,(00 7D 04 7E) 16 = (8193150) 10. 表示扩展分区的起始扇区号为8193150,即(510 柱面,0磁头,1扇区)。这是真实准确的,
我一般都用这一项来定位分区起点。
6. (1F 2C B4 00):
反向, (00 B4 2C 1F) 16 = (11807775) 10. 表示扩展分区共有11807775个扇区。通过上面得到的起点和分区的大小,
可以推导出扩展分区的结束位置:8193150 + 11807775 = 20000925号扇区,即(1244 柱面,254磁头,63扇区)。
二.查找D盘分区表 根据上面的信息,第二个分区表,也即D盘分区表在(510柱面,0磁头,1扇区)处。读取该扇区,得到分区表如下: [00 01 41 FE 0B FE FF 7B 3F 00 00 00 BF A3 5D 00 ]
[00 00 C1 7C 05 FE FF FF FE A3 5D 00 21 88 56 00 ]
[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
第一项:
(00)(01 41 FE)(0B)(FE FF 7B)(3F 00 00 00 )(BF A3 5D 00)
描述的是D盘的情况。
1.(00):表示D盘不是活动分区。
2.(01 41 FE):
(01) 16 = (1) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2.
磁头号:(1) 10;
扇区号:(00 0001) 2 = (1) 10.
柱面号:(01 1111 1110) 2 = (510) 10;
故D盘开始扇区为(510柱面,1磁头,1扇区)。
3.(0B):表示D盘的文件系统为FAT32。
4.(FE FF 7B):
(FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (7B) 16 = (0111 1011) 2.
磁头号:(254) 10;
扇区号:(11 1111) 2 = (63) 10.
柱面号:(11 0111 1011) 2 = (891) 10
故D盘结束扇区为(891柱面,254磁头,63扇区)。
5.(3F 00 00 00):
反向,(00 00 00 3F)16 = (63)10,为D盘起始逻辑扇区号(510柱面,1磁头,1扇区)与扩展分区起始逻辑扇区号
(510柱面,0磁头,1扇区)之差。表示D盘前面已有63个扇区,这63个扇区为系统隐藏扇区。
6. (BF A3 5D 00):
反向,(00 5D A3 BF) 16 = (6136767) 10。表明D盘有6136767个扇区。
通过上面得到的起点和分区的大小,可以推导出D盘的结束位置:8193150 + 63 + 6136767 = 14329980号扇区。
即(891柱面,254磁头,63扇区)。与上面的正好吻合。
第二项:
(00)(00 C1 7C)(05)(FE FF FF)(FE A3 5D 00)(21 88 56 00)
描述的是E盘的情况。
1. (00): 表示E盘不是活动分区。
2. (00 C1 7C):
(00) 16 = (0) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2
磁头号:(0) 10
扇区号:(00 0001) 2 = (1) 10
柱面号:(11 0111 1100) 2 = (892) 10
所以E盘的起始扇区为(892柱面,0磁头,1扇区)。
3. (05): 表示E盘的在扩展分区里面。
4.(FE FF FF):
(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2
磁头号:(254) 10
扇区号:(11 1111) 2 = (63) 10
柱面号:(11 1111 1111) 2 = (1023) 10
但这是不准确的,原因同上。
5.(FE A3 5D 00):
反向,(00 5D A3 FE) 16 = (6136830) 10. 这一项非常重要,它定位了E盘分区表所在扇区。其值为E盘分区表所在扇区号
与扩展分区起始扇区号之差。所以,E盘分区表所在扇区号为:
8193150 + 6136830 = 14329980。即(892柱面,0磁头,1扇区)。
6.(21 88 56 00):
反向,(00 56 88 21) 16 = (5670945) 10.表示E盘共有11807775个扇区。通过上面得到的起点和分区的大小,可以推导出E
盘的结束位置:14329980 + 5670945 = 20000925号扇区,即(1244 柱面,254磁头,63扇区)。
三.查找E盘分区表 根据上面的信息,第三个分区表,也即E盘分区表在(892柱面,0磁头,1扇区)处。读取该扇区,得到分区表如下: [00 01 C1 7C 0B FE FF FF 3F 00 00 00 E2 87 56 00]
[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
该分区表第二项全为0,说明没有下一个分区表了。该分区表就是分区表链的最后一个节点。
第一项:
(00)(01 C1 7C)(0B)(FE FF FF)(3F 00 00 00 )(E2 87 56 00)
该项与D盘分区表的第二项描述的都是E盘的情况,但它们在某些细节上又有所区别。
1.(00):表示E盘不是活动分区。
2.(01 C1 7C):
(01) 16 = (1) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2.
磁头号:(1) 10
扇区号:(00 0001) 2 = (1) 10
柱面号:(11 0111 1100) 2 = (892) 10
故E盘起始扇区为(892柱面,1磁头,1扇区)。
3.(0B):表示E盘的文件系统为FAT32。
4.(FE FF FF):
(FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2.
磁头号:(254) 10;
扇区号:(11 1111) 2 = (63) 10.
柱面号:(11 1111 1111) 2 = (1023) 10
但这是不准确的,原因同上。
5.(3F 00 00 00):
反向,(00 00 00 3F) 16 = (63) 10.这一项与D盘分区表相应项有所不同.为E盘起始逻辑
扇区号(892柱面,1磁头,1扇区)与(892柱面,0磁头,1扇区)之差。表示E盘前面已有63个扇区, 这63个扇区为系统隐藏扇区。
操作系统无法对这些扇区进行读写,所以可以把自己的秘密信息写在这里.
6. (E2 87 56 00):
反向,(00 56 87 E2) 16 = (5670882) 10。表明E盘有5670882个扇区。而D盘分区表相应项为5670945. 5670945 - 5670882 = 63.
正好等于63个隐藏扇区.这是因为D盘分区表描述的是(892柱面,0磁头,1扇区) 到 (1244 柱面,254磁头,63扇区) 之间的扇区数。
而E盘分区表描述的是(892柱面, 1磁头,1扇区) 到 (1244 柱面,254磁头,63扇区) 之间的扇区数。
□ 阅读全文(2) | 回复(0) | 引用通告(0) | 编辑
上一篇:DOS未公开命令与参数
发表评论:
昵称:
密码: (游客无须输入密码)
主页:
标题:
验证码:

深入浅出硬盘分区表
DOS未公开命令与参数
小绝招测试你的杀毒软件
上网不用防火墙!一招克死所有病毒
教你如何提高酒量
Disk Edit的使用
主引导扇区释疑
AWARD BIOS设置手
6
5
|
|