硬盘分区表的数据结构

         由于工作要求,需要读取硬盘里面的数据,为此需要熟悉硬盘分区表里面的数据,经过查找网上的资料,整理了这篇文章。

         新硬盘使用时需要经过分区然后格式化才能够使用,硬盘经过分区后,分区软件便会写一个主引导扇区,这个扇区位于硬盘的 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)的分区上的操作系统,并将控制权交给活动盘上的操作系统的启动程序。其具体结构如下:

  

        MBR的产生不依赖哪一种操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。主引导区的引导程序也可以全部为0,只是此时的硬盘不能引导起动。不论硬盘所装的什么样的操作系统,其MBR区的分区表的结构是一样的,引导程序在WINDOWS操作系统下基本一样,MSDOS6.22和MSDOS7.0不一样,其内容有所改变,但工作原理是一样的。如果你的电脑C盘安装的是NT操作系统时,其MBR区的引导程序就会和WIN98的不同。 

 

硬盘分区方式 
我们平时说到的分区概念,不外乎三种:主分区、扩展分区和逻辑分区。 
主分区是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。在主分区中,不允许再建立其它逻辑磁盘。 
扩展分区的概念则比较复杂,也是造成分区和逻辑磁盘混淆的主要原因。由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据,如果说逻辑磁盘就是分区,则系统最多只允许4个逻辑磁盘。对于具体的应用,4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念。 
所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。 
需要特别注意的是,由于主分区之后的各个分区是通过一种单向链表的结构来实现链接的,因此,若单向链表发生问题,将导致逻辑磁盘的丢失。

 

硬盘的容量=主分区的容量+扩展分区的容量
扩展分区的容量=各个逻辑分区的容量之和

主分区也可成为“引导分区”,会被操作系统和主板认定为这个硬盘的第一个分区。所以C盘永远都是排在所有磁盘分区的第一的位置上。

除去主分区所占用的容量以外,剩下的容量被认定为扩展分区。通俗的讲就是主分区是硬盘的主人,而扩展分区是这个硬盘上的仆人,主分区和扩展分区为主从关系。

扩展分区如果不再进行分区了,那么扩展分区就是逻辑分区了。如果还需要进行分区操作的话,则所谓的逻辑分区只能从扩展分区上操作。就相当于在仆人中(扩展分区上)进行细分类,分成接电话的(D盘)、扫地的(E盘)、做饭的(F盘)等等。


  而当我们用分区软件建立好逻辑盘之后,需要对其进行格式化,对于不同的系统节构其格式也不同,对于Dos/Win操作系统,格式化会于分区逻辑首扇区建立引导扇区,其后是文件分配表(FAT),再后就是目录表和数据区了。 

       所谓的硬盘分区表,共64个字节,每个分区占16个字节。也就是说不管硬盘有多大,最多也只能有四个主分区(扩展分区也是一个主分区)。
  我们通常使用FDISK分区工具分区时,只分了一个活动分区和一个扩展分区。
  从上面的分区表的内容我们可以看出,这个硬盘一共有3个主分区,两个0B分区(其中一个是隐含的,即在WIN98和其他操作系统中是不可见的)和一个0F扩展分区。
  分区表中的“80 01 01 00 0B FE 7F E6 3F 00-00 00 E8 60 77 00”这一段内容就表示第一个主分区参数。

  其中:
  偏移地址1BEH:80表示当前分区为活动状态(如果该块硬盘不只有一个主分区,那么该位置的80H也可能是00H)
  偏移地址1BF-1C1H:01 01 00表示起始的磁头1柱面1,扇区数0
  偏移地址1C2H:0B 表示该分区是FAT32磁盘格式
  偏移地址1C3H-1C5H:FE 7F E6 表示结束的磁头254D柱面486D扇区数63D
  偏移地址1C6H-1C9H: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就表示该分区为隐含分区。
  其他相关应用说明
  对于Windows操作系统自带的Fdisk分区工具,只能死板的分区,速度很慢,其实这样也有好处,不容易出现误操作。对于PQmagic、DiskGenius、SmartFdisk、DM等分区工具,不对磁盘完整性进行检测,分区速度很快,但正因为其速度快,很容易产生误操作。我们轻轻的按一个回车键,可能我们辛辛苦苦积攒的“好东西”就无影无踪了。当我们不当分区后,这时千万不要再拷贝数据和格式化新的分区。这时我们可以通过KV3000的F6磁盘工具来对整个硬盘寻找“55AA”,在寻找时,我们可以根据该硬盘的全部扇区数,所丢失分区的大小在整个硬盘中的位置,用F3功能输入要搜索的大致范围,找出丢失分区的“扩展分区表”所在的绝对扇区地址,并把它链接入上一个逻辑分区的扩展分区中即可。不过,如果你的硬盘经过多次的分区调整与变换时,使用KV3000的磁盘分区修复功能往往会失效,因为硬盘上的“55AA”标志太多了。
  如果我们在公用的机器上或自己电脑上有重要的文件时,这时我们可以在硬盘上建上个合适的分区(使用主分区相对容易一些,真接对MBR操作就可以了,如果是逻辑分区,就需要计算这个逻辑分区的具体位置),把自己的文件搬移过过去后,用磁盘工具把该分区的属性字节的内容的“0XH“改为”1XH“即可,这时在任何操作系统下这个分区都是不可显出的。
  当我们的硬盘的分区丢失或出现错误时,如果我们有MBR备份就非常方便了,只要把备份的MBR记录恢复就可以了。使用磁盘编辑工具我们可以直接备份任意一个扇区的内容。
  恢复精灵这个软件还是挺好用的,对于网吧和经常玩游戏的朋友还是一个挺不错的系统恢复工具。在上网时被黑客黑了,只要重启一下就一切OK了。但是如果密码丢失,这时你就很难办了,重新分区也是无效的(QDI主板的宙斯盾和捷波主板的恢复精灵都有同样的功能),也没法格式化硬盘,你想存储数据也是不可能的。即使你把硬盘摘下来,挂到别的机子上也没有办法。这时我们就可以先用特殊的软盘启动主机后,再直接用磁盘编辑工具对硬盘分区表进行修改,并用FDISK/MBR恢复主引导区,再用SYS C:传送系统文件来修复活动分区的引导区,这时就彻底去除恢复精灵了。注意在操作过程中一定不要使用硬盘自己启动,直到最后才让硬盘启动。

相关内容:

硬盘主引导扇区 = 硬盘主引导记录(MBR)+ 硬盘分区表(DPT)
  --------------------------------------------------------------
  物理位置:0面0道1扇区(clindyer 0, side 0, sector 1)
  大小: 512字节
  其中:MBR 446字节(0000--01BD),DPT 64字节(01BE--01FD),结束标志2字节(55 AA)
  功能:MBR通过检查DPT分区信息引导系统跳转至DBR;
  读取: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>PHYSICAL DISK-—HARD DISK,
  然后, 在OBJECT菜单中选择DISK PARTITION TABLE即可读取, 并使用TOOLS菜单中的WRITE OBJECT TO 选项存入指定文件备份;
  写入: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>FLOOPY DISK, 选择备份的DPT
  文件, 然后使用TOOLS菜单中的WRITE OBJECT TO——>PHYSICAL SECTOR 选项写入001
  (clindyer 0, side 0, sector 1);
  
  详解:
  000H--08AH MBR启动程序(寻找开机分区)
  08BH--0D9H MBR启动字符串
  0DAH--1BCH 保留("0")
  1BEH--1FDH 硬盘分区表
  1FEH--1FFH 结束标志(55AA)
  
  活动分区主引导扇区(DBR)
  --------------------------
  物理位置:1面0道1扇区(clindyer 0, side 1, sector 1)
  大小: FAT16 1扇区 512字节
  FAT32 3扇区 1536字节

功能:包含机器CMOS等信息(0000--0059), 核对该信息并引导指定的系统文件, 如NTLDR等;
  读取: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>LOGICAL DISK-—DISK C,
  然后, 在OBJECT菜单中选择BOOT RECORD即可读取, 并使用TOOLS菜单中的
  WRITE OBJECT TO 选项存入指定文件备份;
  写入: 使用NORTON DISKEDIT, 在OBJECT菜单中选择DRIVE——>FLOOPY DISK, 选择备份的DBR
  文件, 然后使用TOOLS菜单中的WRITE OBJECT TO——>PHYSICAL SECTOR 选项写入011
  (clindyer 0, side 1, sector 1);
  
  详解:
  
  000H--002H 3 BYTE的跳转指令(去启动程序, 跳到03EH)
  003H--03DH BIOS参数区
  03EH--19DH DOS启动程序
  19EH--1E5H 开机字符串
  1E6H--1FDH 文件名(IO.SYS, MSDOS.SYS)
  1FEH--1FFH 结束标记(55AA)
  
  硬盘分区表(DPT)
  ---------------------
  偏移地址   字节数 含义分析   
  01BE        1   分区类型:00表示非活动分区:80表示活动分区;其他为无效分区。   
  01BF~01C1     3   *分区的起始地址(面/扇区/磁道),通常第一分区的起始地址开始于1面0道1扇区,因此这三字节应为010100
  01C2        1   #分区的操作系统的类型。
  01C3~01C5     3   *该分区的结束地址(面/扇/道)   
  01C6~01C9     4   该分区起始逻辑扇区   
  01CA~01CD    4   该分区占用的总扇区数   
  注释: * 注意分区的起始地址(面/扇区/磁道)和结束地址(面/扇/道)中字节分配:   
  00000000 01000001 00010101
  ~~~~~~~~ ==^^^^^^ ========   
  ~ 面(磁头) 8 位
  ^ 扇区 6 位
= 磁道 10 位
  
  # 分区的操作系统类型(文件格式标志码)   
  4---DOS FAT16< 32M
  5---EXTEND
  6---DOS FAT16>32M
  7---NTFS(OS/2)
  83---LINUX>64M   
  DPT 总共64字节(01BE--01FD), 如上所示每个分区占16个字节, 所以可以表示四个分区, 这也就是为什么一个磁盘的主分区和扩展分区之和总共只能有四个的原因。

  
  逻辑驱动器
  -----------
  扩展分区的信息位于以上所示的硬盘分区表(DPT)中, 而逻辑驱动器的信息则位于扩展分区的起始扇区, 即该分区的起始地址(面/扇区/磁道)所对应的扇区, 该扇区中的信息与硬盘主引导扇区的区别是不包含MBR, 而16字节的分区信息则表示的是逻辑驱动器的起始和结束地址等。 
  所以, 在磁盘仅含有一个主分区, 一个扩展分区(包含多个逻辑驱动器)的情况下, 即使由于病毒或其他原因导致硬盘主引导扇区的数据丢失(包括DPT), 也可以通过逻辑驱动器的数据来恢复整个硬盘。
  例如: 以下是一个硬盘的分区情况:
  道 面 扇 道 面 扇 起始扇(逻辑) 结束扇 总共扇区
  MBR 0 0 1 - - - - - -
  C 0 1 1 276 239 63 63 4,188,239 4,188,177
  扩 277 0 1 554 239 63 4,188,240 8,391,599 4,203,360
  D 277 1 1 554 239 63 4,188,303 8,391,599 4,203,297  
  
  如果主分区表损坏, 则可以通过手工查找扩展分区表中所包含的逻辑驱动器数据, 在本例中就是D盘所对应的数据, 然后将其起始扇(逻辑)减去63就是所对应的扩展分区的起始扇(逻辑), 将其起始地址(面/扇区/磁道)改为0面就是扩展分区的起始地址. 然后通过扩展分区就可以得到主分区C的信息, 然后就可以使用FDISK/MBR命令和手工填写分区表恢复整个硬盘。  
  实际使用这种方法比较麻烦, 如果知道每个分区的大小, 则可以通过使用PQ MAGIC 5 将磁盘重新分区为原来大小(注意: 千万不能应用, 我们只是通过它来获得数据), 并查看INFO来获得以上数据, 记录以后取消该分区操作, 然后使用NORTON DISK2000手工修改DPT表, 恢复整个硬盘。  
  该例所对应的分区表数据:  
  80 01
  01 00 06 EF 7F 14 3F 00 00 00 11 E8 3F 00 00 00
  41 15 05 EF BF 2A 50 E8 3F 00 60 23 40 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 55 AA
  
  扩展分区表数据:
  00 01
  41 15 07 EF BF 2A 8F E8 3F 00 21 23 40 00
  
  注意: 逻辑起始扇区和总共分区数是左边为低位, 如该例的扩展分区的起始地址为50 E8 3F 00转换十进制时要先变为00 3F E8 50, 总共占用分区数60 23 40 00要先变为00 40 23 60, 同理当手工填写该值时也要进行高低位转换。

 

(未完待续)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值