手动恢复 usb 存储设备(移动硬盘)分区表

近来时间较为充裕,所以把很早就想写的两篇技术文章完成,本文就是其中一篇。
每当要开始一篇新的文章时才发现自己有很多话想说,就像我和别人聊天一样,没有话题脑细胞永远处由昏睡状态。
电脑对我来说不是什么新鲜事物了,我对电脑的兴趣从一开始就不局限于玩,而是它能让我找到很多事做,所以它就能帮我做很多事情。又因为他充满着悬念,我就想一个个的解开,其过程中要研究很多的东西,这反而让我忘记了电脑还可以玩。搞累了,无聊了,偶尔会想起电脑其实是个”玩意儿”,这让我重新找到4、5年前我家刚有第一台电脑时的兴奋。这也给我的IT生涯奠定了良好的基础,同时也付出了惨痛的代价,身体开始发胖,视力下降,身体虚弱。并不因为这些我就失去对更高技术的追求,因为技术可以让我兴奋。一直这样不屑的努力,我的技术思路开始形成,在新知识的学习过程中也不需要什么老师,完全自学。学习就是理解思考的过程,这是我学习的指导思想,当然也是初高中学生的指导思想。但我发现它其实是错的,因为它失去了一个大前题:在记忆的基础之上,才可以让理解思考产生更好的效果,而我从高中就开始主导的“记忆是充份建立起知识的关系网,利用现有知识建立起与新知识的联系”这一伟大理论开始动摇。我反而感到小学时“死记硬背”的学习方法是这一切的前提,没有比这更有效的学习方法了。按照以前的思路发现,不停的思考死了大量脑细胞,才理解了,之后马上有了对知识的新见解新思路,可过段时间后,连自己的原创思想都烟消云散了,脑子还是一片空白。现在不得不承认聪明也会过头的,如今我这B样算是费了,虽然报费的过程是轰轰烈烈的,但这不足以动摇我前进的念头。用句话安慰一下自己吧:年轻它也是资本啊!

不耽误您时间了,进入主题:

      本文源于去年春节期间,研究一些启动相关的技术时,想进一步了解一下分区表,把电脑硬盘和移动硬盘的mbr dd出来了,dd回去时搞错了,搞的分区表丢失,因为只是分区表丢失,数据还在,所以想办法恢复。首选当然是diskgen,diskgen可以智以的建立分区表,可以当写入分区表时就出错了,这时diskgen就无能为力了,当然可以去买个转接卡将移动硬盘挂在台式机ide口上,再用diskgen恢复,这还要多掏些银子,还要跑腿多不爽。呵呵只要我们有思路手动就可以搞定,当然思路源于知识,对mbr 分区表 扇区 柱面 磁头 不了解的看一下本文最下面的参考文章吧。

      首先将移动硬盘与计算机连接,安装“矮人dos”之类有diskgen的增强dos环境。
      
      然后硬重启,记着一定要硬重启,当然不是在windows下直接按重启,在自检阶段按重启按钮,这样bios会重新扫描周边硬件设备,从而识别移动硬盘。
之后启动进入矮人dos,不要选加载usb驱动的选项,加载usb驱动反而会导至diskgen无法正常识别移动硬盘,diskgen是可以通过bios来识别移动硬盘。

      一路回车进入dos提示符,然后运行diskgen程序,这时候在diskgen的”硬盘”菜单里会有”第二块硬盘”一项,这里哪块是损坏分区表的硬盘就要自己分辩了,通过容量,分区数量等等都可以判断出来。

      选择移动硬盘后,下面的工作就是扫描fat表了,fat表是fat文件系统用于记录分区使用情况的小数据库。它存储在硬盘的数据区域,没有在mbr里,再说mbr也容不下啊,mbr里存的才是真定的分区表,分区表中存储着每个分区的开始位置结速位置等信息,是指向数据区的指针,第个分区数据区的开始就是fat了。所以跟据扫描到的fat表就可以重建分区表,在diskgen的”工具”菜单中选择重建分区表,会强出提示信息,不用管,点”继续”,又强出一个对面框,这时最好选择”交换方式”,扫描过程中会提示你发现了一个分区,及分区信息,是否要保留,在此要注意,可能因为你之前对硬盘进行过多次分区,每次分区数量和每个分区大小都不一样,而之后这块fat表又没有被数据覆盖,diskgen也会扫描出来,通过回忆分区表损坏之前一直使用的分区情况,来确定是残留的fat,还是以前使用的fat,如果实在想不起来之前的分区情况(不会吧),那就都保留,在之后的工作中测试那个分区是不是可用来确定它是不是之前的正常使用时的fat表。

      扫描完成后,按照常理我们要将分区表写入,由于diskgen无法写入usb设备所以会导至写入失败,我们只好记录下diskgen扫描到的分区数据,然后我们手动编辑分区表。至于怎么保存扫描到的数据,呵呵自己想办法吧,我当时是用数码相机拍下来。如果用笔记下的话,每个分区的各个参数都要记下来,就是系统标志和起始、终止下面数字,之后要用到。
剩下的工作就可以在windows下完成了。

进入windows运行PTEDIT32(本文下方可以下载),PTEDIT32界面如下

      在分区表在扇区 0 (柱面0,磁头0,扇区1) 区域里的编号1-4就是硬盘分区表中可以容纳的四个分区的数据。这就用到我们从diskgen里获得的参数。在分区表编辑器的”硬盘”下拉列表中选择移动硬盘,将从diskgen获得的第一个分区参数填入编号1中,其中类型处填的就是diskgen的”系统标志”的参数,这是标识分区文件系统类型的,而起始柱面、磁头扇区和终止柱面、磁头、扇区对号入座就行了。

      这样就只剩下”扇区之前”(就是此分区之前的扇区数)和”扇区”两项没填了,这两项无法从diskgen中得到,要通过这些已知的参数计算得来。

一般的柱面、磁头、扇区之间有如下关系:

1柱面 有 255 磁头(当然这是不可能的硬盘里装不下的,只是逻辑的寻址方式)
1磁道 有 63 扇区
1柱面x磁头数=磁道数
磁道数x 每磁道扇区数=扇区数
扇区数=1柱面x磁头数x每磁道扇区数
(这个公式只是个人意见,很多人把磁道看做柱面,我觉得这样理解起来会有问题,而且会不明不白的出来这个公式很容易让人没有头绪)

以上图为例,让我们看看”扇区之前”和”扇区”处的值是如何来的
因为所有硬盘的第一个分区都是从 0 柱面 1磁头 1扇区 开始的前面有63个扇区保留使用,如第一个扇区存储MBR等,所以第一个分区的”扇区之前”就是63了。

”扇区”处的值其实是此分区的总扇区数。计算公式如下
( 结束柱面号 – 起始柱面号 + 1 )*255*63-63=分区总扇区数(这就是上面扇区总数的公式)

(652-0+1)X255X63-63=10490382

“ ( 结束柱面号 – 起始柱面号 + 1 )”:这是计算此分区的柱面总数,其中为要加1呢,因为柱面号的值是编号,而不是表示一个具体的数,编号是从0开始的所以要加1,这个学过计算机的都懂吧。为什么要减63,前面不是有63个扇区保留使用吗。
填写完所有资料后第一个分区就可以出现了,点 分区表编辑器 的保存更改,修这些信息写入分区表,取出移动硬盘,重新插上,是不是发现了一个分区呢,点击进去是不是原来的资料。这里注意一下,如果点击该盘提示格试化单万别格,格试化了就全完了,这说明这个分区是以前留下的,不是正常使用的分区。
因为在分区表中柱面是用10位2进制来表示(参看参考文章),所以最大是1023,如果柱面数参过1023,就填1023就可以了,操作系统会跟据其它值来定位分区

一般的硬盘都是1个主分区其它都是逻辑分区,逻辑分区是包含在扩展分区里的,扩展分区是解决只能分四个主分区的不足。如果你的移动硬盘也是这样的结构那个在 分区表编辑器的 第2或3或4个分区处写入扩展分区的参数就会看到扩展分区下的所有逻辑分区。这个也是我的推论,我没试。当时我只在第一个分区处依次填入几个分区的参数,可以查看分区后把里面的数据复制出来,然后把整个硬盘重新分了一下区。采用什么方法,看个人喜好了。

ok 全文结束, 本人水平很有限,有问题欢迎讨论!

PTEDIT32下载
PTEDIT32.rar

参考文章
分析mbr中的分区表,手工计算每个分区大小
硬盘的DOS管理结构 转贴的人都很不仗义,找不到原创链接自己去搜吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注


Verify Code   If you cannot see the CheckCode image,please refresh the page again!