转:手工恢复硬盘分区表记述

今天给同事讲文件系统时,有人提出了疑问,特意找了一片文章来确认

---------------------------------------------

手工恢复硬盘分区表记述

 

手工恢复硬盘分区表记述(zt

想必大家都有过数据丢失的糟糕经历,费尽心力收集的数据,由于病毒破坏、误删除、误格式化、分区软件误操作、存储设备损坏等原因而毁之一旦,真是令人痛心。其实我们只要静下心来学习一点数据恢复方面的浅近知识,遇上这样的倒霉事,只要不是严重的硬件损坏,就能挽回一部分数据,运气不错的话,找回全部数据也是可能的。

      
讨论数据恢复,我们先来看看最简单的情况:单纯的硬盘分区表损毁(非硬件损坏),现象——分区丢失。要重建硬盘分区表,就得搞清楚硬盘分区是如何组织的,下面先介绍相关的背景知识。

一、磁盘寻址方式:CHSLBA

1.CHS
寻址方式

       CHS
Cylinder(柱面)/Head(磁头)/Sector(扇区)的缩写。
      
为什么会有这些参数,这要从早期的磁盘结构说起。很久以前,硬盘的容量还非常小的时候,为了扩大磁盘容量,人们把几个盘片叠加在一起,每个盘面由一个磁头访问,盘面又划分为许多同心圆环,这就是磁道,每条磁道又划分为许多区段,每个区段就称为一个扇区。

      
由此产生了所谓的3D参数(Disk Geometry),即磁头数(Heads)、柱面数(Cylinders,所谓柱面是由半径相同分属不同盘面的若干磁道组成)、扇区数(Sectors),以及相应的寻址方式。见附图:



图片附件: 1.jpg (2006-12-13 20:16, 54.09 K)

其中:

      
磁头数(Heads) 表示硬盘总共有几个磁头,也就是有几面盘片,
      
最大为 255 ( 8 个二进制位存储)
      
柱面数(Cylinders) 表示硬盘每一面盘片上有几条磁道,
      
最大为 1024( 10 个二进制位存储)
      
扇区数(Sectors) 表示每一条磁道上有几个扇区,
      
最大为 63 ( 6个二进制位存储)
      
每个扇区一般是 512个字节,理论上讲这不是必须的,但好象没有取别的值的。

      
所以磁盘最大容量为:
       255 * 1024 * 63 * 512 / 1024 / 1024 = 8032.5 MB

      
      
CHS 寻址方式中,磁头,柱面,扇区的取值范围分别为
       0
Heads - 1 0 Cylinders - 11Sectors (注意是从1开始)
      
只要确定CHS参数,硬盘就指定相应的磁头到相应的磁道和扇区去读写数据。

2.LBA
寻址方式

      
随着硬盘技术的不断发展,其容量也不断增大,现在的硬盘早就超过了8G的容量,那么现代硬盘又是如何寻址的呢?现在的硬盘都采用线性寻址的方式,即把硬盘上所有可用扇区(假定数目为N)从0N - 1按序编号,硬盘读写数据时按扇区号寻址,这就是LBA寻址方式(logic block address),扇区编号也就是该扇区的LBA地址。

      
出于习惯,CHS寻址方式仍被沿用,只是其中参数不再具有实际意义,我们只能把它看作一种逻辑上的磁盘结构划分方式。现代磁盘的柱面数已经突破了1024的限制,最大磁头数和扇区数仍为25563。相对于LBA来说,CHS模式较为直观,所以磁盘编辑器通常采CHS模式来作为磁盘逻辑结构划分方式。


二、MBRMaster Boot Record)、DPTDisk Partition Table)、
      
主分区(Primary Partition)、扩展分区(Extended Partition
      
和逻辑分区(Logical Partition


      
硬盘的第一个扇区被称为主引导扇区,习惯上称为MBRCHS参数为001LBA参数为0,它包含了硬盘引导程序和硬盘分区表(DPT),作用十分重要,如果MBR扇区受损,那么系统就无法访问这个磁盘了。

1.MBR引导程序概述

       MBR
扇区的512字节数据中,前446字节(0 to 0x1BD)存放硬盘引导程序代码。电脑从硬盘启动时,系统从硬盘中首先读取MBR引导代码,其流程大致如下:

(1)   
将程序代码由0:7C00H移动到0:0600H(注,BIOSMBR放在0:7C00H处)
(2)   
搜索可引导分区,即80H标志
      
成功:goto 3
      
失败:跳入ROM BASIC
      
无效分区表:goto 5
(3)   
读引导扇区
      
失败:goto 5
      
成功:goto 4
(4)   
验证引导扇区最后是否为0xAA55H
      
失败:goto 5
      
成功:goto 6
(5)   
打印错误进入无穷循环
(6)   
跳到0:7C00H进行下一步启动工作

      
然后MBR引导程序就把系统控制权交给操作系统引导程序。
      
如果MBR损坏硬盘无法访问,可在DOS下输入:
       Fdisk /cmbr X
X = 1,第一块硬盘;X = 2,第二块硬盘),重写主引导记录。


2.
硬盘分区表(DPT

       MBR
扇区的最后66字节除去末尾的标志0xAA55H(所有引导扇区的标志。由于磁盘编辑器中的显示内容是从低址到高址排列的,所以AA55显示为55AA)外,剩余的64字节被称为硬盘分区表。硬盘分区表包含四个项目,每项16字节,代表四个分区的参数。分区表项的各字节含义如下:

偏移                            意义

0            
自举标志(80为活动分区,00为非活动分区)

1            
起始磁头号H

2            
起始扇区号S

3            
起始柱面号CYLCYL的高2位存放在S字节的高2位)

4            
分区格式标志(05DOS Extended06BIGDOS FAT16
                                   07
NTFS0BFAT32
                                   0C: FAT32
(对INT 13H指令使用LBA;
                                   0E: FAT16
(对INT 13H指令使用LBA;
                                   0F: Extended
(对INT 13H指令使用LBA;
                                   82
LINUX Swap83LINUX85LINUX Extended

5            
终止磁头号H

6            
终止扇区号S

7            
终止柱面号CYL

8-11      
本分区之前已用扇区数(当分区表属于扩展分区中的记录时,
            
该值为相对扩展分区首地址的位置)

12-15     
本分区扇区总数


3.
主分区(Primary Partition)、扩展分区(Extended Partition
   
和逻辑分区(Logical Partition

       DPT
中可定义的分区包括主分区和扩展分区。所谓主分区,是指DPT中包含的能够被系统使用的磁盘分区,它是可以设置为活动的,即可以引导操作系统,一个硬盘只能有一个活动分区;而扩展分区并不能被系统使用,它的作用是突破DPT只能定义4个分区的限制。

      
其做法是:让DPT在定义主分区后,将多余容量定义为扩展分区,指定该分区的起始位置,根据起始位置指向硬盘的某一扇区,称作虚拟MBR,在其中定义下一个分区表。如果只有一个分区,就定义该分区,然后结束;如果不止一个分区,就定义一个基本分区和一个扩展分区,扩展分区再指向下一个分区表,在下一个分区表中继续定义分区,直至结束。这样就形成一个分区链,可以描述所有的分区。

      
任何分区表中只能有一个扩展分区,扩展分区不能引导操作系统。位于扩展分区中的可被系统使用的磁盘分区称为逻辑分区,逻辑分区不能设置为活动。由于定义了扩展分区和逻辑分区的概念,windows使用的磁盘盘符可以一直到Z,见下图。



图片附件: 2.jpg (2006-12-13 20:17, 16.02 K)

三、硬盘分区结构实例分析

      
使用磁盘编辑器可以直接访问硬盘数据,一般磁盘编辑器都是以十六进制显示数据。这里推荐使用数据恢复领域内被广泛使用的软件WinHex,这个软件能在windows下直接读写磁盘扇区。打开WinHex,点击工具菜单,选择磁盘编辑器物理媒介“HD0......”,这样整个硬盘的数据就以十六进制的方式显示于编辑框之内。下面就对本人的硬盘分区情况进行分析。

1.MBR
扇区图示



图片附件: 3.jpg (2006-12-13 20:19, 111.02 K)

如图所示,MBR扇区的01bd区段是MBR引导代码,
       1be
1dd一共有32字节代表两个分区表项,末尾0xAA55H是引导扇区的标志。

      
第一分区各项参数为:
       80
0101000CFEFFFF3F000000F8933202
   
      
第一项80,代表该分区是活动的(可以引导操作系统);
      
起始位置是0柱面、1磁头、1扇区;
       0C
代表该分区是FAT32格式;FEFFFF三项代表终止柱面磁头扇区的序号,
      
由于该分区大于8G,所以它的CHS参数已经没有意义;
       3F
000000是该分区首扇区的LBA地址,为0x3FH,等于63
       F8
933202代表该分区的扇区数
      
(由于排列是从低址到高址,扇区数应该是0x23293F8H,为36869112个扇区)。

      
第二分区各项参数为:
       00
00C1FF0FFEFFFF3794320249E8C904
      
      
第一项00,代表该分区是非活动的;
      
起始CHS参数柱面号无效,磁头号0,扇区号10F代表该分区是扩展分区;
       37
943202是该分区首扇区的LBA地址,为0x2329437H,等于36869175
       49
E8C904代表该分区的扇区数,为0x4C9E849H,一共80341065个扇区。


2.
扩展分区首扇区(虚拟MBR)图示

1)第一扩展分区首扇区(虚拟MBR)图示



图片附件: 4.jpg (2006-12-13 20:20, 141.63 K)

如前文所述,由于DPT只能记录4个分区的信息,windows通过扩展分区来记录多于4个分区的信息。DPT中的扩展分区称为第一扩展分区,它的首扇区称作虚拟MBR

      
从示例图上可以看到扩展分区的首扇区之内没有MBR引导代码,只有分区表,一共有两项记录,表示一个逻辑分区和一个扩展分区。
   
      
第一分区各项参数:
       00
01C1FF0BFEFFFF3F00000037167102

      
第一项00,代表该分区是非活动的;
      
起始CHS参数柱面号无效,磁头号1,扇区号10B代表该分区是FAT32文件系统;
       3F
000000是该分区首扇区的LBA地址(相对第一扩展分区首扇区),为63
       37
167102代表该分区的扇区数,一共40965687个扇区。
   
      
第二分区各项参数:
       00
00C1FF05FEFFFF76167102D3D15802

      
第一项00,代表该分区是非活动的;
      
起始CHS参数柱面号无效,磁头号0,扇区号105代表该分区是扩展分区;
       76
167102是该分区首扇区的LBA地址(相对第一扩展分区首扇区);
       D3
D15802代表该分区的扇区数,一共39375315个扇区。

2)第二扩展分区首扇区(虚拟MBR)图示



图片附件: 5.jpg (2006-12-13 20:21, 153.53 K)

如图所示,该扩展分区只包含一个逻辑分区,它的分区表各项参数如下:

       00
01C1FF07FEFFFF3F00000094D15802

      
第一项00,代表该分区是非活动的;
      
起始CHS参数柱面号无效,磁头号是1,扇区号是1
       07
代表该分区是NTFS文件系统;
       3F
000000是该分区首扇区的LBA地址(相对第二扩展分区首扇区),为63
       94
D15802代表该分区的扇区数,一共39375252个扇区。

      
综上所述,该硬盘的分区结构已经搞清楚了,它的主分区表中包括一个主分区(活动的)和第一扩展分区;第一扩展分区中包含一个逻辑分区和第二扩展分区;第二扩展分区包含一个逻辑分区,如图所示。



图片附件: 6.jpg (2006-12-13 20:22, 16.22 K)

3.主分区和逻辑分区首扇区图示

      
如前文所述,该硬盘一共有三个分区,C区为主分区、FAT32格式,D区是逻辑分区、FAT32格式,E区是逻辑分区、NTFS格式。我们就来看看这三个分区的第一扇区各自都有什么特点。

1C区首扇区图示



图片附件: 7.jpg (2006-12-13 20:23, 181.84 K)

C区首扇区结尾标志是0xAA55HCHS参数为011
      
扇区第一行出现MSWIN4.1字样(由于文本显示不正确,“M”被省略掉了),
      
说明该分区是FAT32文件系统,在偏移5259区段还有FAT32字样。

       C
区首扇区内保存着该分区的引导代码,这略去不谈,我们只关注1C23字段。
      
其中1C1F字段是3F000000,这是LBA地址,表示该分区之前有63个扇区;
       20
23字段是F8933202,是该分区的总扇区数。
      
以上这些信息十分重要,对于我们下面手工恢复磁盘分区结构十分关键。

2D区首扇区图示



图片附件: 8.jpg (2006-12-13 20:23, 120.57 K)

D区首扇区结尾标志是0xAA55HCHS参数为X11,扇区第一行出现MSDOS5.0字样
      
(由于文本显示的问题,“M”被省略掉了),
      
说明该分区是FAT32文件系统,在偏移5259区段还有FAT32字样。

       1C
1F字段是3F000000,这是D区的LBA地址,表示该分区之前有63个扇区
      
(相对于扩展分区首扇区而言),2023字段是37167102
      
是该分区的总扇区数。

3E区首扇区图示



图片附件: 9.jpg (2006-12-13 20:24, 151.31 K)

E区首扇区结尾标志是0xAA55CHS参数为X11,扇区第一行出现NTFS字样
      
(由于文本显示的问题,“N”被省略掉了,在磁盘编辑器中是显示完全的),
      
说明该分区是NTFS文件系统。
       28
2F字段是93D1580200000000,是E区可使用的总扇区数,
      
与第二扩展分区表中记录的E区总扇区数相差1。为何相差1呢?那是因为NTFS
      
文件系统的一个特性,它会把分区最后一个扇区用来保存首扇区的备份,这个
      
扇区是保留的,不能被用户使用。一般保留扇区数目为1,但也有大于1的情况,
      
这时NTFS分区首扇区中记录的可用扇区数和分区表中记录的总扇区数相差就不是1了。


4.
总结

      
综上所述,有几点经验值得重视:

1)所有引导扇区的末尾都是0xAA55H

2)硬盘MBR扇区的CHS参数是001
        
所有扩展分区首扇区的CHS参数是X01
        
主分区、逻辑分区的首扇区CHS参数是X11
        
主分区的CHS参数也可以是X01
        
主分区、逻辑分区的首扇区也可能不是1号扇区,这个现象是存在的。

3)所有扩展分区、主分区、逻辑分区终止CHS参数都为:X25463
        
综合(2)、(3)来看,所有分区的大小都是整数柱面,绝对不能跨柱面存在。

4)所有扩展分区一般只包含分区表数据和0xAA55H标志,不含引导代码,有例外。

5)第一扩展分区的LBA地址是相对于MBR而言,而之后的扩展分区的LBA地址计算
      
都是以第一扩展分区的位置为基准。

6)主分区、逻辑分区的首扇区常常带有FAT32NTFS之类的字符串,
        MSWIN4.1
MSDOS5.0FAT32分区的标志,MSDOS5.0还可能是
        FAT16
分区的标志。引导扇中保存有该分区的大小数据,对于NTFS
        
分区来说,引导扇中记录的分区扇区数和分区表中记录的数据相差个位数,
        
通常是1。这对我们找回丢失的分区十分关键。

7)似乎第一扩展分区类型是0F,之后的扩展分区为05类型,主分区为FAT32格式,
        
类型为0C,逻辑分区若为FAT32格式则为0B类型。


四、硬盘分区表恢复实战经历

1.
使用工具软件自动恢复硬盘分区

      
这里选用深山红叶的硬盘分区表管理软件进行操作,为了截图方便,整个过程都在虚拟机中进行。

1)首先查看一下硬盘的分区情况,有三个分区,C区是活动的主分区,NTFS格式,DE是逻辑分区,FAT32格式,接着用分区软件把硬盘所有分区删除,如图。



图片附件: 10.jpg (2006-12-13 20:25, 73.27 K)



图片附件: 11.jpg (2006-12-13 20:26, 58.58 K)

2)打开硬盘分区表修复与管理软件Partition Table Doctor 3.0,点击操作菜单,选重建分区表-交互模式,软件自动搜索,找到三个分区,如图。



图片附件: 12.jpg (2006-12-13 20:27, 40.93 K)



图片附件: 13.jpg (2006-12-13 20:27, 64.99 K)

3)在文件菜单中选择保存,于是丢失的分区又回来了,如图。



图片附件: 14.jpg (2006-12-13 20:28, 57.36 K)

2.使用磁盘编辑器手工恢复磁盘分区表

   
有朋友可能会问,既然有软件能自动恢复,为何还要费时费力地手动恢复呢?其实手动恢复的过程虽然繁琐,却能让我们对磁盘分区的结构有清楚的了解,再说软件虽好却不够智能,遇到比较复杂的情况就无能为力了,这时只能借助磁盘编辑器手动恢复,我们只要了解了原理,在实际情况中就能游刃有余。

1)打开硬盘分区表修复与管理软件Partition Table Doctor 3.0,点击扇区编辑扇区,弹出十六进制磁盘编辑器,首先显示的是硬盘主引导扇区,CHS001,如图。



图片附件: 15.jpg (2006-12-13 20:29, 109.41 K)

从图上可以看到,主分区表已经被清空,说明删除分区的操作其实就是清除分区表中的相关项,只要正确地填写出分区表数据,那么丢失的分区就找回来了。

2)恢复C分区:

   
移动扇区至011位置,这是C区的首扇区。



图片附件: 16.jpg (2006-12-13 20:29, 110.65 K)

从图上可以看到该分区是NTFS系统,
   
大小是7FE25D00,实际大小还要再加上1,为80E25D00

   
移动扇区至001位置,填写1BE1CD字段。
   
由于该分区小于8G,所以CHS参数要填写正确。
   
起始CHS参数是011,终止CHS参数是38225463
   
终止柱面号可以这样计算:
   
(终止柱面号 + 1X 255 X 63 分区总扇区数 + 分区之前的总扇区数。

   
于是C分区的分区表参数如下:            
    80
01010007FE7F7E3F00000080E25D00
   
填写完毕,保存。



图片附件: 17.jpg (2006-12-13 20:30, 106.47 K)

3)恢复第一扩展分区:
   
第一扩展分区首扇区的LBA地址应为63 + C分区扇区总数,
   
BFE25D006152895)。
   
起始CHS参数应为:38301,终止CHS参数为104325463
   
(此处柱面号大于1023,填写分区表时按1023计)。

   
扩展分区大小为10618965个扇区,换算为十六进制为5508A200
   
再移至硬盘主引导扇区,编辑1CE1DD字段,输入:
    00
00417F0FFEFFFFBFE25D005508A200,保存。



图片附件: 18.jpg (2006-12-13 20:31, 108.5 K)

4)恢复D分区:
   
把磁盘编辑器移动至38311扇区,这就是D区首扇区。



图片附件: 19.jpg (2006-12-13 20:32, 110.02 K)

由图可知该分区是FAT32格式,大小是80E25D00

   
移动扇区至38301位置,此处为第一扩展分区首扇区。先在末尾填上55AA标志。
   
起始CHS参数为38311,终止CHS参数为76525463
   
于是D分区的分区表参数如下:     
    00
01417F0BFEBFFD3F00000080E25D00
   
填写1BE1CD字段,保存。



图片附件: 20.jpg (2006-12-13 20:32, 104.35 K)

5)恢复E分区:
   
第二扩展分区首扇区位于76601
    LBA
地址为D区扇区数 + 63,等于BFE25D00
   
把磁盘编辑器的当前扇区移到这里,发现分区表依然完好,如图所示。



图片附件: 21.jpg (2006-12-13 20:33, 105.6 K)

这样的话剩下的过程就很容易了,从分区表中可以获知E区大小是57254400
   
由此可知第二扩展分区大小为E区扇区数 + 63,等于96254400

   
把磁盘编辑器移至38301,即第一扩展分区首扇区,
   
编辑1CE1DD
    00
0081FE05FEFFFFBFE25D0096254400,保存。



图片附件: 22.jpg (2006-12-13 20:34, 107.32 K)

至此大功告成,如图所示,丢失的分区已经全部找回。

 

http://wenku.baidu.com/view/a4bf0bb91a37f111f1855bd6.html

转载于:https://www.cnblogs.com/4admin2root/articles/2633321.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值