急!急!!急!!!硬盘分区被破坏求救!!!200分求救(200分)

同病相联呀.我昨晚也搞丢了.7G的书....跟大量源码.....[:(]
To: 各位帅哥有没有人可以救回被两次格式化的数据.呀.....
dream40@etang.com
 
对硬盘的内部参数不是很了解,但是曾经用DISKMAN恢复过数据。
试试看吧。
 
对不起,这几日受了风寒,竟卧床不起。以致于没时间上线来看贴子,不知大家竟如此关心此问题,谢谢了!

现在我基本知道是我的分区表信息中的目录指针数据出了问题(是不是?),先让大家看看如下一篇文章:KV3000修复硬盘数据之三十二(40G硬盘修复)(1)

////////////////////////////////////////////

KV3000修复硬盘数据之三十二(40G硬盘修复).doc
2002-06-03 16:17:24
  
   因4月26日CIH发作,使许多用户的硬盘上的数据丢失,在这里提供一种用KV3000硬盘救护箱功能手动修复硬盘分区表和BOOT表
的方法。本文以修复思路为主,虽然以被CIH破坏的硬盘为例,但修复硬盘的思路大同小异,因此其他硬盘的修复仍可采用本文的思
路。
  本文例子:40G硬盘,分三个区,文件格式FAT32。
  现象:4月26日被CIH破坏。用户使用其它软件修复过,只能找到C盘,但C盘数据均为乱码,同时,其他分区不存在。这说明硬
盘分区表不正确。
修复方法如下:

一、将出问题的硬盘挂在一台正常的计算机上。开机进入CMOS设置,检测硬盘,若能检测到,可以进行下步操作;若检测不到,说
明硬盘的电路板有问题,这时就需要换一块与该硬盘同型号的电路板再进行下步操作,否则,该硬盘便无法恢复。

  二、用干净的引导盘(软盘)启动计算机,此时会在DOS下,用DOS命令检查硬盘状态(关于DOS命令可参考相关书籍)。如果的
确出现本文例子中出现的"现象",则可采用手动方法恢复。
手动恢复工具:KV3000F6功能-硬盘急救箱。

  三、进入KV3000的F6急救箱后可看到第0扇区的情况。此扇区就是平常所说的"硬盘分区表"。此表中从"80"到"55AA"之间的参数
记录了硬盘的基本情况;再按下F2可查看BOOT区。
  本文例子如下:(表一为硬盘分区表;表二为BOOT区I/0表)

表一:

  8001 0100BFE 7F7E3F00
  000080E2 5D000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000
  00000000 000055AA

表二:(标准表的第13字节开始)

02102000 02000000  00F80000 3F00FF00 3F000000
62A9B400 142D0000 00000000 02000000 01000600

  (注:数"字节"以表中的两个数为一个"字节",表中开始的字节为第"0字节",以后以此类推,如表一中的"80"为第"0字节","5D"
为第"14字节"。)
  由表一可以看出,"80"和"55AA"都存在,从第12到第15字节表示了C盘的扇区数(也称作C盘大小)。把这个数换算成十进制以备后
用;
80E25D00 高低换位→ 005DE280 换算为十进制(用F7)→ 6152832

四:用F6(搜索硬盘分区表),再按下F2=search logical Hard,Disk partition (搜索逻辑硬盘分区表),可检测到该硬盘的逻辑
分区的情况:

Hard Disk Total Sector Total Bytes Partition Table Sector
D:19.008G 37126152  19008589824  6152895
E:19.008G 37126152 19008589824  43279110

(表三)

  可以看到,此表中与D相对应的Partition Table Sector:6152895。用这个数减掉63:6152895-63=6152832,与换算出的C盘扇区
数相同(第三步中算出的)。这说明0扇区中表示C盘扇区数正确,而且D盘的分区表位置也正确。将6152895换算成十六进制数以备后用:
6152895 换算为十六进制(用F7)→ 005DE2BF 高低换位→ BFE25D00

  五、核实逻辑分区表正确性:
  1、查找逻辑分区:按表三中的Partition Table Sector 找到6152895(D盘分区表所在扇区)和43279110(E盘分区表所在扇区),
并记下两扇区的数据,如下:
  D:
  0001 417F0BFE BF853F00 00000880  36020000  81860FFE
  FF120663 94024780  36020000  00000000 00000000 00000000
  00000000 00000000  00000000  00000000  000055AA
  (表四)
  E:
  0001 81860BFE FF123F00 00000880 36020000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000  00000000 00000000 000055AA
  (表五)
  可以看到,D盘分区表中表示的E盘起始位置(第18-19字节)和结束位置(第21-23字节):"8186";"FEFF12"与E盘分区表的起始
位置(第2-3字节)"8186"和结束位置"FEFF12"(第6-8字节)相同。
  2、计算:此步中需要计算核对部分数据:
  表四:
  第12-15字节:表示了D盘扇区数:"08803602" 高低换位→ "02368008" 换算为十进制(用F7)→ 37126152,此数与表三中D:Total
Sector37126152相同,说明12-15字节正确。
  第24-27字节:表示E盘分区表所在扇区:"06639402" 高低换位→ "02946306" 换算为十进制(用F7)→ 43279110,此数与表三中E:
Partition Table Sector:4327110相同,说明24-27字节正确。
  第28-31字节(表示D盘之后所有逻辑分区的总扇区数。本例中D盘之后仅有E盘,因此这里表示的是E盘的扇区总数):
  "47803602" 高低换位→ "02368047" 换算为十进制(用F7)37126215。再看表三中E:Table Sector 37126152;该数加63为37126215。
可以看到表四中换算出的数与表三中计算出来的数相同。说明表四的28-31字节也正确
(注:63是DOS在分区时,在每个分区之前保留了63个扇区,这个数较固定)
  表五:第12-15字节,表示E扇区数:"08803602" 高低换位→ "02368008" 换算为十进制(用F7)→ 37126152。此数与表三中E:
Total Sector:37126152相同。说明表五中的第12-15字节正确。
至此,由计算可得出如下结论:查看到的D、E分区表是正确的。所以之后,可以根据D、E的分区表信息,手动写到C盘分区表的相应位
置,便可恢复逻辑分区的数据。

  六、手动修改C盘的硬盘分区表:
  工具:KV3000中硬盘急救箱(F6)里的F5=Edit(编辑功能)。
  现在,再回到表一,从第16字节开始到第31字节均为零。这就是为什么只有C盘而找不到D、E的原因。现在只要将正确的参数写到相
应的位置即可恢复D、E。
  从表四记下必要参数;
  第2-3字节:D盘起始位置,写到表一中第18-19字节处;
  第5-7字节:D盘结束位置,写到表一中第21-23字节处;
  将第四步所得的D盘分区表位置:BFE25D00写入表一第24-27字节;
  D+E总扇区数=37126152+371261852+63×2=74252430 换算为十六进制(用F7)→ 046D008E 高低换位→ 8E006D04
  在表一的第20字节处写入"0F",表示逻辑分区的分区格式。"0F"表示FAT32。
  这样,填写后表一第16至第31字节处,结果如下:
  0000 417F0FFE BF85BFE2 5D8E006D 04000000
这时,重新启动计算机后,D、E的数据全部恢复。

  七、恢复C盘数据:
  1、看表二中第20-23字节"62A9B400"表示了C盘的扇区数,比较与表一中第12-15字节"80E25D00"不符,因表一中的数已证明是正
确的,因此,表二中的数据是错误的,可按表一中的数据改过来:即把"62A9B400"改为"80E25D00"。
  2、查找目录区:用F4=Search功能,在ASCII Value:栏中输入"command",回车后,光标会移到Starting Sector,输入"1"回车,
开始查找。找到后,出现"Found"字样。按下回车查看该页是否为目录区。若是则记下该页扇区数,若不是则继续查找。目录区最明显的
特征是可看到原来C盘中的所有目录名,汉字为乱码。本文例子的目录区在第19625扇区。需做如下计算:(扇区数-63-32)/2=
(19625-63-32)/2=9765 换算为十六进制(用F7)→ 2625 高低换位→ 2526。将所得到的"2526"与表二中第24-25字节"142D"
比较,发现表二中该数错误。此时将"142D"改为"2526"。(FAT32如上计算,FAT16有所不同。)
3、重写FAT表:(用正常的FAT2表重写被破坏的FAT1表),按下F4=Search,用TAB键切换到Hex Codes,键入0000F8FFFF0F(FAT表前几
个字节)回车,输入"1"回车。找到后记下扇区数。查看该页,在该页的左上方开始处可看到"F8FFFF0F"几个字节,否则,要继续查找。
本文例子:FAT2位于第9860处。退出该"查找"界面,用F3功能翻到第9860扇区。再用Ctrl+F10(写扇区功能)。在To Write Sector 0-[ ]
输入"95"回车;跳至Write Sector Count 输入"1500"回车,再按两次"N",一次"Y"。
  在完成以上步骤后,重新用软盘启动计算机,此时C、D、E盘被认可,数据安全恢复。再用SYS C:传上系统,硬盘完全恢复。
  下面,我们总结一下修复步骤:

  检测硬盘→查看硬盘状态→分析可能原因→检查各分区分区表及I/O表参数是否正确→检测逻辑分区→修改出错的部分→修改I/0表中
错的目录区指针→用正确的FAT2表覆盖FAT1表→重启,数据恢复→传系统→杀毒→备份数据(注:第一二步中若检测不到硬盘或无法查看
硬盘信息,则说明硬件有问题或硬盘已物理损坏)
  几点说明:
  1、硬盘分区表、I/0表、目录区、FAT表均记录了硬盘的许多信息,如果该表中的参数出现错误,可能造成各式各样的情况。因此若
对硬盘逻辑和物理结构或表中的数据不熟悉的情况下,千万不要随意改动。
  2、在操作过程中,若没有确实的把握,请将被改动的地方记录下来,以备随时恢复。
  3、硬盘出现的问题因原因不同,万不可一概而论,本文中所提到的方法有所限制,切不可随意模仿。
  4、本文中提到的数据和参数有很大的不确定性(每块硬盘不尽相同),所以在得到一个数后,一定要反复确认后方可更改。
5、本文虽然以40G硬盘为例,其他大硬盘也可按文中的思路进行恢复。

/////////////////////////////////

问题是文中表2所述的BOOT区I/O表应在哪个扇区?而且对于目录区它是手KV3000查找COMMAND,但是对于我的F盘,由于不是系统主引导分区,那么
是不是就该查找我原F盘上的根目录位置?如BACKUP、MOTHSOFT之类的目录??

还有重写FAT表我看也很危险,万一失误就真的没有办法修复了!

对于darnis富翁说的:

C/H/S=1276/0/1(即G区)
// 2、这里接着了,这里应该是F区开始,按照我的分析
// 你这里的表项应该只有一项,它是一个指向G区开始的
// 记录。但是他这里居然是两个表项?然后由G区的DBR
// 表中指向H区。

我查看了我的另一块硬盘,确实是两个表项啊,前一个表项说明此分区信息,下一个表项说明
下一个分区的信息,由此组成了一个链表的结构!

至于找专业的数据恢复公司,很不幸,我们这个中等城市(四川省自贡市)还没有一家,送到成都去,一来价格太高,二来还要细细打听,
就还是靠自己吧!
 
先攀一下亲哈,,
是自贡人啊?呵,我在自贡也待过四年的,你不会也是化院毕业的吧?我现在在成都。

按上面上篇文章说来恢复的可能性是比较大了,那个I/O表不知是干什么用的?还是
等高手来解释一下,看过之后,学到不少东西。
建议你一个保险一点的方法,在你要写入一扇区之前都先把这个扇区的信息保存起来,
以备不时之需,用DE就可以了。
既然是要找到FAT表应该就是搜索到关键的目录信息了,只是C盘上因为 Command这类的
文件是系统要求放在最前的,那它这里搜出来的,都一定是FAT表的起始位置了,
但是你搜任一个目录,却不一定能够保证所找到的扇区就是FAT表的起始位置的,那就只有
尽可能地找最先建立的文件夹,这样会不会就应该是建在FAT表起始位置的目录信息呢?
所以了,只有偿试,反正是先备份再写了 :)
 
不好意思,很久没上网了,我那块烂硬盘也不知能不能修好。试过了各种方法都没有作用,
几乎想放弃了。
各位还有什么办法或者告知某个专门讲授数据恢复的网站又或者数据恢复的公司之类的东西。
 
唉~~~看看这篇!
==============
有好多朋友在主引导分区损坏后束手无策,本人在此剖析一下
=====================================================
;rem 下面是DOS汇编部分,不要乱动哦
;@ECHO OFF
;GOTO END_BATCH
;下面是一些编译设置,因为要编成COM文件,所以是TINY模式
.MODEL tiny
.CODE
STARTUPCODE
;BIOS引导系统把我从硬盘的主引导分区中搬到了内存中,我现在的位置是0000:7C00
;我好开心哦:)我终于可以工作了,让我先设置新的堆栈段,数据段,附加段吧!
M_0100:
CLI
XOR AX,AX
;SS:SP=0000:7C00,因为0000:7C00是我的家,所以我的堆栈当然要在我前面啦:)
MOV SS,AX
MOV SP,7C00H
;等一会我们就要搬家了,所以先把般家的位置准备好,DS:SI=0000:7C00,ES=0000
MOV SI,SP
PUSH AX
POP ES
PUSH AX
POP DS
STI
;把新家搬到0000:0600的位置吧,因为0000:7C00这个地方要让给DOS引导程序玩啊:(
;注意:系统引导型病毒也会搬家的哦,不过是搬到9FC0:0这个内存最高端的1K内
;存中的,这样既腾出了空间给DOS,又保护了自已不会发现,当然新家就很安全了哦
CLD
MOV DI,0600H
MOV CX,0100H
REPNZ
MOVSW
;新家搬好了,赶快跳过去吧,是0000:061D这个地方,不要跳错了哦:)
DB 0EAH,1DH,6,0,0 ;JMP 0000:061D
;终于跳到新家了,我们又可以继续我们的工作了,不过我现在的位置是在0000:061D处
M_011D:
;设好分区表的起始位置,我们要一个一个地检查了啊
MOV SI,0600H+PT-M_0100
;我们要读4个分区的信息,所以BL=4,BL是我们的计数器哦,不要数错了,要不打你PP啊:)
MOV BL,04
M_0122:
CMP BYTE PTR [SI],80H
;如果我们读到了活动分区标志80H的话,快去M_0135这个地方继续工作吧
JZ M_0135
;80H是活动分区标志,00是非活动分区标志,其它数值是非法的,如果是其它数值,
;你可能感染病毒了,不会哪么惨吧,不是的话,就是你的硬盘坏了,嘿嘿嘿
CMP BYTE PTR [SI],00
;如果没有活动分区,而且分区是非法的话,哪就去死吧:(
JNZ M_0148
;继续看看下面有没有合法分区,最好有活动分区就谢天谢地喽:(
ADD SI,+10H
DEC BL
;还没看完吧,回去再看看吧,机会总是有的嘛,不要太灰心了哟,上帝保佑:)
JNZ M_0122
;终于死掉了,虽然读到的分区都是合法的,可是很不爽啊,居然没有一个是活动的,可
;能是没吃饭吧,罢工了,呵呵,没法了,去玩ROM BASIC啊,这可是BILL GATES刚出道时
;玩的东东哟,听清楚了吗,是BASIC,编程序的,如果你不会编程序,呵呵,哭吧,哈哈哈
INT 18H
M_0135:
;运气真不错,居然读到活动分区了,先把基本参数保存好,我要请DOS引导程序进来玩了
MOV DX,[SI]
MOV CX,[SI+02]
;先把活动分区的位置存在BP中,我们有用的哦
MOV BP,SI
M_013C:
;每个分区表有10H大,再看看其它分区再说,要是让我瞧见非法分区,呵呵,不让你活
ADD SI,+10H
DEC BL
;如果4个分区信息都读完了,哪我们就不要玩了,把DOS引导程序搬到内存中来,也
;让它来玩玩啊,要不电脑可要罢工的啊,快到M_015D去请DOS出来吧,呵呵
JZ M_015D
CMP BYTE PTR [SI],00
;如果这个分区是合法的,呵呵,检查下一个分区吧,宁可错杀一千,不可放过一个,呵呵
JZ M_013C
M_0148:
;哈哈,终于让我抓着个非法的分区了,先显示个无效分区的字符串信息让你瞧瞧吧,
;然后就宰了你,呵呵,600+8B=68B处是无效分区的字符串位置,没搞错吧
MOV SI,0600H+IPT-M_0100
M_014B:
;开始显示吧,这个子程别人也要用的,不过我先来,所以先用一下哦,别跟我抢,呵呵
;这是一专门用来显示字符串的子程序,不过它可是有来无回哦,找到RET指令了吗,没
;有吧,因为它要是被执行了,你就要被杀头了哟,所以没必要回来了啊,呵呵
LODSB
CMP AL,00
;如果字符串显示结束了,哪你也就死到临头了,想挣扎一下吗,去M_015B看看吧,是不
;是嗅到死亡的气息了哟,呵呵
JZ M_015B
;在当前光标位置以TTY电传方式显示一个字符
PUSH SI
MOV BX,0007
MOV AH,0EH
INT 10H
POP SI
;继续显示下一个字符
JMP M_014B
M_015B:
;在地狱的滋味可真不好受,可是...........
;没人把你拎出来了,因为这是死循环,所以就在这玩吧,不过这儿很安静,我喜欢,呵呵
JMP M_015B
M_015D:
;我的任务终于完成了,下面要让DOS来接班了,先把DOS引导程序从硬盘搬到内存中来吧
;搬到7C00这个地方,不要搬错了啊,我有5次搬家机会,由DI作计数器,数好了,不要有错
MOV DI,0005
M_0160:
MOV BX,7C00H
MOV AX,0201H
PUSH DI
INT 13H
POP DI
;如果搬家成功,就到M_0178处去作一下体检,要是非法入侵者,呵呵,小心狗头!
JNB M_0178
;唉,真不爽,竟然搬不了家,不过没关系,从来一次,我还有4次机会哦:)先把旧家整理好
XOR AX,AX
INT 13H
;又要少一次机会了:(
DEC DI
;机会还有,回去再试一次,呵呵
JNZ M_0160
;哇,居然搬不了家,算了吧,显示一个装载操作系统出错的信息吧,可能硬盘坏了,555555
MOV SI,0600H+ELOS-M_0100
;去M_014B显示字符串吧,不过显示完了也就死了,呵呵
JMP M_014B
M_0178:
;呵呵,虽然还没体检,不过我先把错误提示字符串的位置准备好,省得等一会再忙,这
;年头骗子真多,小心为好:)
MOV SI,0600H+MOS-M_0100
;开始检验了,看看7C00H+VSIG这个位置的两个字节是不是55 AA
MOV DI,7C00H+VSIG-M_0100
CMP WORD PTR [DI],0AA55H
;如果我们读进来的DOS引导记录中没有55 AA这个标志,哪它就要被判死刑了啊,快去
;M_014B这个地方报到吧,这可是鬼门关哟,不过信息也要显示一下哦,哈哈哈
JNZ M_014B
;终于过了体检关,把分区表的位置存到SI中吧,DOS要用他来读取扩展分区的逻辑盘哦
MOV SI,BP
;如果一切正常,就让等在0000:7C00处的DOS引导程序继续玩吧,我可要退休了哟,呵呵
;真不容易,连过两关,不过DOS引导程序中不知道有没有坏蛋呢,不过这不是我管的,呵
;呵,去玩吧,DOS,最好不要死了哦
DB 0EAH,0,7CH,0,0 ;JMP 0000:7C00h
;下面是一些提示信息,大家看看是不是见过啊,见过它们的朋友有没有哭过啊,不喜欢
;就删了它们吧,微软不会来找你麻烦的,呵呵
ORG 18BH
IPT DB 'Invalid partition table',0 ;无效的分区表
ELOS DB 'Error loading operating system',0 ;操作系统装载出错
MOS DB 'Missing operating system',0 ;丢失操作系统
;下面是一个分区表示例,并不是每个硬盘都是这个模样哦,人要有灵活性,不能死板,对
;不对啊:)
ORG 2BEH
PT DB 80H,01,01,0,6,0EH,0FEH,81H,3EH,0,0,0,6,0BEH,0CH,0
DB 30H dup(0)
;这是有效分区的标志,虽然它没什么用,可是没有它你就要死了哟,等着看看你电脑罢
;工吧:)
VSIG DB 55H,0AAH
;唉,终于结束了,启动电脑原来这么简单,哈哈哈...................
END
;=============下面是DOS批处理部分,不要乱动哦===================
;:END_BATCH
;TASM %0.BAT
;TLINK /X /T %0,BOOTC
;DEL %0.OBJ
;ECHO ON
;rem ========谢谢,我是njhhack,记住我的QQ:10772919============
 
对于硬盘数据恢复我有一些成功的经验。
现在建议你用EasyRecovery PRo(安装在好的硬盘上,是windows下的工具,比起我以前用的Dos
下的恢复工具更容易使用多了),对硬盘进行恢复,它可以不依赖分区表信息进行数据抢救。
http://www.crsky.com/list.asp?id=1278
 
谢谢各位的好意,几番折腾,我对硬盘也没有办法。算了,算我倒霉,还是把它格掉吧,
就此关闭此帖吧。

尤其特别感谢darnis和小雨哥,虽然最终我还是没能解决问题,但是能认识各位大侠,
并且学到了新的知识,还是值得吧。

哦,兄弟我又发了一篇“Active Automation:- DELPHI不敌VB????”的帖子,有
兴趣者不妨去看看。
 
顶部