甜橙 发表于 2008-9-23 17:10:22

数据恢复与软故障处理基本指南

很早看到的一篇关于数据恢复与软故障的文章,文章没有实质性讲述什么,好多描述也是有他存在的道理的,有兴趣的朋友可以看看;

长期以来计算机领域数据恢复似乎缺乏一个把握全貌的,如果说给出一个比较能把握全貌的说法,我们首先应当给计算机数据一个广义的概念,某些人觉得只有类似文本文件、数据库中的记录或表这样的东西才是数据,其实从广义上说,任何位于计算机存储介质上的信息都是数据,无论是哪种介质,也无论是具体作用,他们都是数据。与这种概念对应,任何使这些信息发生非主观意愿之外的变化都可视为破坏。那么数据恢复是就是一个把异常数据还原为正常数据的过程。

一、对数据的潜在威胁

  1、恶意的程序:大家最熟悉的恶意程序就是病毒,很多人认为病毒对数据的影响仅仅是病毒的破坏性,这是不正确的,实际上病毒的感染本身就是一种破坏,一个病毒无论他借助修改你的引导区、可执行程序还是OFFICE文档,他都把你正常的数据做了改变,当然,你可能举良性伴随性病毒这种极端的例子。但毫无疑问,他同样对数据构成了破坏,至少他减少了你的硬盘的可用空间。同时,恶意的程序还包括特洛伊木马,逻辑炸弹等等。恶意的程序造成的破坏可能是最难恢复的。

  2、其他恶意的破坏,即使不借助病毒或者其他的工具,只要拥有足够的权限,任何系统都有一定的“自毁”能力。比如依靠系统正常的删除、移动、格式化等操作也可以达到破坏数据的目的。随着网络技术的发展,威胁已经不仅仅限于本机,

  3、误操作:很多数据丢失源于使用者的操作失误,比如误删除,误格式化等等。

  4、操作系统或应用软件的错误:随着操作系统和应用程序的代码量的成倍增加,BUG也在不断增加。我们最常用的桌面系统WIN9X就是一个BUG大王。操作系统和应用软件的错误,往往会给人的工作带来一些不可预期的影响。比如前阶段,发现FRONTPAGE98的一个BUG,触发后会把你目录下的文件全部删除,另外,象著名的游戏神话II,出现了如不安装在默认目录中可能会使你丢失扩展分区这样严重的问题。

  5、加密和权限:尽管加密和权限设置是你保护数据的有效手段,但遗忘密码也会带来很大的问题。

  6、掉电:机器突然掉电的后果可能不仅仅是内存数据的丢失,也可能造成磁盘数据的丢失,或导致系统无法正常启动。

  7、内存溢出:导致内存溢出或者进程非法终止等低层错误的原因很多,他就象掉电一样,会使你损失当前的工作。

  8、升级:软件系统升级有时会带来一些问题,后面我们将举相应例子。

  9、硬件损坏和失窃:这可能是最严重的威胁之一。有时这把你恢复数据的可能降低为零。

二、数据丢失的各种逻辑现象

  对数据的恢复,基本上是一种逻辑处理。只有对情况有一个准确的判定,才能做出准确的应对。一般的来说,问题可以归纳为以下几种情况。

  1、 硬盘无法完成正确引导:因物理故障造成的逻辑损坏、引导区故障、重要扇区崩溃等等,都会使系统不能完成正常的自举过程。

  2、 文件丢失:由于有意破坏,误删除等等都会造成数据的丢失。另外,这种归类不仅仅包括某个或某几个文件,也适用于目录,分区或卷的丢失。

  3、 文件无法正常打开:由于病毒感染,加密,文件头损坏等情况,会使文件无法正常打开。

  4、 数据紊乱:由于各种因素的影响,数据库中的信息,文本文件等,可能面目全非。

三、保护数据的建议

  这个专题是探讨数据恢复的,而不是信息保护的,因此点到为止,一句话,那就是防患于未然,我们列举了对数据的威胁,如果我们最大程度的减弱了这些威胁,对每一种可预知的潜在威胁都有相应的预防和对策,我们的数据安全才会有最大的保障。这些对策主要包括选择良好的反病毒和系统维护产品、加强保安全措施、采用UPS掉电保护、提高用户操作水平和安全意识、形成系统的信息管理和备份制度等等。都可以有效的保证数据的安全,总之,我对数据恢复的认识与病毒是相同的——与其亡羊补牢,不如防患未然。


  第二篇、数据恢复的准备知识

  1、系统工作机理的简单介绍(本节由lowpower缩写)这一部分在原作中是最重要的一章,考虑到篇幅关系,进行了大量的删节。

  ①、 DOS(DOS兼容系统)硬盘数据的构成

  DOS磁盘系统,可以按照逻辑分区的概念管理物理空间,不同分区可以装载不同的OS系统。示意如下:

  硬盘空间

  第一扇区 | 分区1 | 分区2| 分区3 |分区4 |

  主引导扇区|引导扇区|引导扇区|引导扇区|引导扇区|

  各分区公用|各个分区相对独立,可安装不同操作系统。

  对FAT结构的分区每一分区都有独立的引导记录,FDT表,FAT表等。同时,系统还有一个最为重要的主引导记录。在0柱0面1扇区,今后我们用CYL代表柱、SIDE代表面,SEC代表扇区。以下一个FAT结构分区的简图。

  保留区--磁盘参数表、DOS引导记录

  控制区--FAT表1、FAT表2根目录区

  数据区--数据区

  以下简单介绍一下重要的部分:

  主引导记录又称主分区表、MBR等等:MBR占一个扇区,在CYL 0、SIDE 0 、SEC 1,由代码区和数据区构成。其中代码区是一端标准的程序,完成 BIOS自举到OS BOOT之间的工作,为OS启动做最后的准备。标准代码区可以由FDISK/MBR重建,但对于多系统引导的不标准MBR,将被这一操作破坏。MBR的数据区记录了分区情况。

  系统扇区:CYL 0、SIDE 0 、SEC 1-CYL 0、SIDE 0 、SEC 63,共62个扇区引导区又称BOOT区:CYL 0、SIDE 1 、SEC 1 这是我们过去称的DOS引导区。也占一个扇区。

  文件分配表又称FAT:是记录文件占用簇的情况和连接关系的地方。一般有两个FAT表,起到备份的作用。FAT12、FAT16的第一FAT表一般均在0-1-2,FAT32的第一FAT表在0-1-33。由于FAT表记录文件占用扇区连接的地方,如果两个FAT表都坏了,后果不堪设想。

  由于FAT表的长度与当前分区的大小有关所以FAT2的地址是需要计算的。

  根目录区(ROOT、FDT):这里记录了根目录里的目录文件项等,ROOT区跟在FAT2后面。

  数据区:跟在ROOT区后面,这才是数据内容。

  其实, MBR、隐含扇区、BOOT区,重建都比较容易。数据恢复的关键在于恢复数据文件。由于FAT表记录了文件在硬盘上占用扇区的链表,如果2个FAT表都完全损坏了。那么恢复文件,特别是占用多个不连续扇区文件就相当困难了。

  ②、 主引导记录简单说明:

  主引导记录是硬盘引导的起点,关于代码区不多说了,其数据区,比较重要的是2个标志,80H和55AA,80H一般在偏移1BE处,80是分区激活的标志的标记表示系统可引导,且整个分区表只能有一个80标记。另一个就是结尾的55AA标记,用来表示主引导记录是一个有效的记录。另外,各个分区自身的引导记录,也是以55AA结束,这是我们查找分区的标志。我们后面在介绍如何主引导记录中,给出了一个完整的分区表的例子,大家可对照查看。数据区中,用10H字节表示一个分区,最多可表示4个分区,分别从1BE、1CE、1DE、1EE开始,我们后面给出了分区表项对应地址的含义。大家可以对应分析一下以下分区的情况。

  80 01 01 00 0B FE BF FC 3F 00-00 00 7E 86 BB 00

  ① ② ③ ④ ⑤ ⑥

  ①:激活标记,80表示可引导分区

  ②:分区开始的磁头号为01、开始的扇区号为01、开始的柱面号为00,由于开始的扇区号为2进制6位,而开始的柱面号为2进制10位,因此扇区号所用字节的高两位要加在柱面号高两位。

  ③:分区的系统类型FAT32(0B),01是FAT12,04为FAT16,06为BIGDOS,07为NTFS,其他参见分区类型表。

  ④:分区结束磁头号254、分区结束扇区号63、分区结束柱面号764

  ⑤:首扇区的相对扇区号63

  ⑥:总扇区数12289622

  2、常见手工处理工具与DOS外部命令介绍

  DEBUG:古老和最为常见的调试跟踪软件,始终捆绑在微软的DOS/WIN9X操作系统中。有19个子命令。有编写执行汇编指令,直接读写绝对扇区和内存单元等功能,可以在最艰苦的条件下工作。DOS6.22以下的系统,DEBUG.EXE在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。

  DISKEDIT:常见16进制编辑软件,字符界面,可以以文件方式和扇区方式读写逻辑内容,可以读写绝对扇区,可以方便的查找编辑分区表、FAT表、ROOT区等重要扇区。这一点要比DEBUG更方便。但在一些重要扇区损坏的情况下,DISKEDIT可能无法启动。DISKEDIT软件可以在著名的Norton Utilities软件包中找到。最新的DISKEDIT出现在NU4中。

  NDD:常见的FAT文件结构磁盘修复工具,就是著名的NORTON磁盘医生,可以自动修复分区丢失等情况,可以抢救软盘坏区中的数据,强制读出后搬移到其他空白扇区。希望大家不要再使用NORTON FOR DOS7或8的NDD,这个版本由于不支持大分区、FAT32、长文件名等技术,会给你带来大量的麻烦。建议大家使用Norton Utilities4或更高版本中的NDD.EXE,这是纯DOS下的工具。在硬盘崩溃或异常的情况下,他可能可以带给用户以希望。WIN9X下的磁盘医生调用的并不是这个程序,而是NDD32.EXE.

  FDISK:FDISK当然是个危险的命令,很多人非常恐惧,事实上,FDISK命令的运行并不影响任何分区内的硬盘数据,他对分区的设置操作,只改变主分区表的数据区。而特别是FDISK异常重要的隐含参数/MBR,可以重建主分区表的代码区,清除主引导型病毒等。这是非常有用的操作。DOS6.22以下的系统,FDISK.EXE在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。

  FORMAT:在一些人眼中,FORMAT是最可怕的命令,但他并不是对硬盘清零,特别值得注意的是,很多文件恢复工具都建议你恢复前先FORMAT该分区起到保护的饿作用。DOS6.22以下的系统,FORMAT.COM在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。

  HD-COPY:传统的软盘COPY工具,2.0版本以后加入了强制读的功能,可以读出一些损坏扇区的内容。

  SYS:SYS命令是重建BOOT区的最简洁的手段,也可以杀除BOOT区病毒。DOS6.22以下的系统,sys.COM在DOS目录下,WIN9X系统中它在WINDOWS\COMMAND目录下,它也出现在WIN9X所生成的应急盘中。

  令我非常遗憾的是,至今我没有发现比较出色的扇区级备份镜象工具,我曾写过一个HD-MIRROR,但由于错误较多,我提供下载的第二天就停止了发布,另外fixc的作者noz写过一个clone.exe,但可惜只适合相同的硬盘。我也曾以为GHOST可以做到这点,事实上,你目前还不能指望他为你备份一块深度破损的硬盘。。如果有一个有效的能以按扇区机制(而不是文件机制)压缩备份一块硬盘将之做成一个镜象文件的话,那么我们的恢复工作就拥有了更多的保证和余地。我们可以更大胆的做恢复的尝试。

  3、一些自动处理工具或软件包

  首先介绍国内的一些免费修复工具

  FIXMBR:何公道先生写的一个修复MBR的工具,适合处理逻辑分区丢失的情况, 有一些可选参数,支持FAT32、FAT16,不支持NTFS、LINUX等分区,支持8.4G以上硬盘。可修复CIH发作后的扩展逻辑分区。

  VRVFIX:北信源公司的推出的修复硬盘共享工具,适合处理逻辑分区丢失的情况,处理的基本比较准确。支持FAT32、FAT16,不支持NTFS、LINUX等分区。也不支持8.4G以上硬盘。

  FIXC:国内最早出现的可以修复部分被CIH破坏的C盘的工具,作者是NOZ,新版本也加入了修复分区信息的功能,支持FAT32、FAT16,有限支持NTFS,不支持8.4G以上硬盘。目前的版本已经比较完善。

  FIXHDPT:TBSOFT工作室的分区信息修复工具。支持FAT32、FAT16,不支持NTFS和LINUX,不支持8.4G以上硬盘,是历史比较长的工具之一。

  RE(ReapirEasy):本人早期写的分区表修复工具,支持FAT32、FAT16,有限支持NTFS,不支持8.4G 以上硬盘,和某些BIOS不兼容。其整体水准低于前面列举的工具。国外一些系统维护的工具目前已经达到了非常强大的程度。

  Norton Utilities:历史最悠久的系统维护工具。不仅可以数据恢复,还可以系统加速和修补内存错误。目前最新的版本是NU4.5 FOR 9X、NU2 FOR NT等。

  Tiramint:最为出色的灾难恢复工具之一,有NTFS、FAT32、FAT16、NOVELL4种版本。生成急救软盘,可以对深度破坏的磁盘进行交叉恢复。

  4、常用的基本操作

  ① 读出主引导记录:这是系统级数据恢复可能涉及最多的程序之一。例:

  DEBUG

  -a100 ;从此处开始汇编

  126C:0100 mov ax,201; 读操作一个扇区

  126C:0103 mov bx,300; 送入地址300

  126C:0106 mov cx,1 ;0面1扇

  126C:0109 mov dx,80 ;80H为硬盘,头为0

  126C:010C int 13

  126C:010E int 3

  126C:010F

  -g=100 ;

  执行

  AX=0050 BX=0300 CX=0001 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000 DS=126C ES=126C SS=126C CS=126C IP=010E NV UP EI PL NZ NA PO NC

  这里用了I/O中断13,涉及的寄存器含义为ah,操作方式,02H为读,03H为写,al送扇区数,bx送准备装入扇区的内存偏移地址,cx送从哪一道哪一扇区开始,我们一般依靠改换CX来读写不同逻辑盘某个逻辑扇区。dx送盘符和头数INT 3是断点中断,使程序运行到此停止。

  ② 显示引导区内容:我们把扇区读到某个内存地址并不是目的。而是为了看到他的内容,在DEBUG中D命令可以方便的查看内存单元的内容。续前例,如果我们要看到主引导区的内容的话,既然装载到300。-d300 l200就可以查看了,一个引导区的映象类似如下,可以直观的看 到我们前面所提到的代码区和数据区。是否正常请大家自行分析一下

  126C:0300 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....|

  126C:0310 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BE BE 07 B1 04 ...PW...........

  126C:0320 38 2C 7C 09 75 15 83 C6-10 E2 F5 CD 18 8B 14 8B 8,|.u...........

  126C:0330 EE 83 C6 10 49 74 16 38-2C 74 F6 BE 10 07 4E AC ....It.8,t....N.

  126C:0340 3C 00 74 FA BB 07 00 B4-0E CD 10 EB F2 89 46 25 <.t...........F%

  126C:0350 96 8A 46 04 B4 06 3C 0E-74 11 B4 0B 3C 0C 74 05 ..F...<.t...<.t.

  126C:0360 3A C4 75 2B 40 C6 46 25-06 75 24 BB AA 55 50 B4 :.u+@.F%.u$..UP.

  126C:0370 41 CD 13 58 72 16 81 FB-55 AA 75 10 F6 C1 01 74 A..Xr...U.u....t

  126C:0380 0B 8A E0 88 56 24 C7 06-A1 06 EB 1E 88 66 04 BF ....V$.......f..

  126C:0390 0A 00 B8 01 02 8B DC 33-C9 83 FF 05 7F 03 8B 4E .......3.......N

  126C:03A0 25 03 4E 02 CD 13 72 29-BE 46 07 81 3E FE 7D 55 %.N...r).F..>.}U

  126C:03B0 AA 74 5A 83 EF 05 7F DA-85 F6 75 83 BE 27 07 EB .tZ.......u..'..

  126C:03C0 8A 98 91 52 99 03 46 08-13 56 0A E8 12 00 5A EB ...R..F..V....Z.

  126C:03D0 D5 4F 74 E4 33 C0 CD 13-EB B8 00 00 00 00 00 00 .Ot.3...........

  126C:03E0 56 33 F6 56 56 52 50 06-53 51 BE 10 00 56 8B F4 V3.VVRP.SQ...V..

  126C:03F0 50 52 B8 00 42 8A 56 24-CD 13 5A 58 8D 64 10 72 PR..B.V$..ZX.d.r

  126C:0400 0A 40 75 01 42 80 C7 02-E2 F7 F8 5E C3 EB 74 49 .@u.B......^..tI

  126C:0410 6E 76 61 6C 69 64 20 70-61 72 74 69 74 69 6F 6E nvalid partition

  126C:0420 20 74 61 62 6C 65 00 45-72 72 6F 72 20 6C 6F 61 table.Error loa

  126C:0430 64 69 6E 67 20 6F 70 65-72 61 74 69 6E 67 20 73 ding operating s

  126C:0440 79 73 74 65 6D 00 4D 69-73 73 69 6E 67 20 6F 70 ystem.Missing op

  126C:0450 65 72 61 74 69 6E 67 20-73 79 73 74 65 6D 00 00 erating system..

  126C:0460 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

  126C:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

  126C:0480 00 00 00 8B FC 1E 57 8B-F5 CB 00 00 00 00 00 00 ......W.........

  126C:0490 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

  126C:04A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

  126C:04B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01 ................

  126C:04C0 01 00 0B FE BF FC 3F 00-00 00 7E 86 BB 00 00 00 ......?...~.....

  126C:04D0 81 FD 0F FE FF FF BD 86-BB 00 E0 A9 75 00 00 00 ............u...

  126C:04E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

  126C:04F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.

  ③ 反汇编主引导区内容:判定MBR的代码区是否正常,对于数据区的基本情况,我们可以通过直观观察得出,但对于存在引导型病毒,或者引导区出现异常代码的情况,我们可能需要分析MBR中代码区的指令。这一般要对已经读入内存的引导区进行反汇编。反汇编用指令U,续前例:

  -u300 l15D ;反汇编主引导扇区代码区内容

  126C:0300 33C0 XOR AX,AX

  126C:0302 8ED0 MOV SS,AX

  …………

  126C:045C 65 DB 65

  126C:045D 6D DB 6D

  ④ 写内存单元,在我们的前例中,主分区类型是0B是FAT32的,假定这个类型实际是NTFS的,我们该如何修改呢?由于主分区类型的偏移是4C3H,我们可以用E命令写到内存单元中,从附表中查得NTFS的类型为07。因此-e4c3 7再比如说,假定我们想把无效的分区表清零,那么,我们应当用另一个命令F,这个命令可以用填充一个内存地址范围。清零分区表的操作就是-f4be 4ff 00,以下两个操作也比较常见。

  重置80标记,-e4be 80

  重置55AA标记,-f4ff 4fe 55 aa

  不要忘记了,此时仅仅是改动了内存中的数据,并未写到硬盘上。因此需要用int 13中断把改写的结果,写回硬盘。续前例,

  -a100

  126C:0100 mov ax,301 ; 写操作一个扇区

  -g=100 ;执行

  其实,我们相当于修改了刚才输入的读主引导扇区程序,使程序变为。

  126C:0100 mov ax,301 ; 写操作一个扇区

  126C:0103 mov bx,300 ;从内存地址300

  126C:0106 mov cx,1 ;0面1扇

  126C:0109 mov dx,80 ;80H为硬盘,头为0

  126C:010C int 13

  126C:010E int 3 ;断点

  ⑤ 绝对磁盘内容的读出与写入

  类似操作在FAT32结构硬盘被CIH破坏的修复中比较常见,我们后面将讲到恢复的基本思路就是用第二FAT表覆盖第一FAT表。那么无疑要读出第二FAT表的内容,再回写到第一FAT表的位置上。一般的来说,大量连续扇区的读出写入DISKEDIT进行非常方便,如果用DEBUG做则要写一段子程序,不过程序的主要技巧就是利用int 25绝对磁盘读中断读出的内容,而用int 26绝对磁盘写做内容写入。

  5、数据可恢复的前提

  有人觉得这个题目说法比较奇特,但数据恢复,作为一个数据再现的过程,一定要解决两个问题,第一是从哪里恢复的问题,第二是怎么恢复的问题。解决了这两个问题,我们事实上就把握了数据恢复的全部思想脉络。而这一部分就是从哪里恢复的问题。

  ①、 有效而及时的备份中是数据恢复最可靠的来源,在许多人倡导备份到秒的今天,恐怕不会有人怀疑这点。而有些备份机制则是系统内建的,比如两份FAT表。

  ②、 数据的实际有效性的判定是关键,对我们来说,硬盘无法自举、文件找不到、文件打不开等现象,其实并不与数据丢失画等号。因为此时往往数据只是从操作系统的角度是一种逻辑丢失,而从物理扇区意义上,它仍然存在或部分存在。最明显的就是文件删除的例子,事实上,这只是把文件首字节,改为0E而已。而此时文件体依然存在。

  ③、 数据损坏过程的可逆性分析:对数据的改变无非两种,取代和变换,前者是不可逆的,而后者则是可逆的。我们以杀毒为例,对于大多文件性病毒来说,那些以附加而非代换方式感染的文件型病毒,理想的杀毒过程就是感染的逆过程。这种分析也常见与重要信息被隐藏搬移或者被加密的情况,但分析将比较复杂。

  ④、 数据本身是否是标准信息:有些信息实际是通用或局部通用的,你无须考虑如何从本机抢救。只要相同或相近的系统版本就可以了,比如BOOT区、隐含扇区、WINDOWS的DLL文件等等。典型的例子如分区表的代码区,这是一段标准代码,事实上,它就放在你的FDISK程序里面,你可以用DEBUG把他提取出来。

  ⑤、 数据本身是否可以由其他信息统计再生:有些信息尽管丢失了,也没有备份。但它实际可以从其他数据中间接求得。最典型的就是主分区表中的分区信息,即使你把他清零也不必害怕,因为你可以从你几个分区中计算再生。

  ⑥、 破坏的完成程度:事实上,FDISK、FORMAT都不会彻底破坏数据,一般只有低格和扇区覆盖操作才会彻底破坏数据。但有时,破坏过程或者误操作过程会因人工终止、死机等原因不能完成。最明显的就是CIH病毒的例子,由于CIH是以1024字节为单位覆盖扇区,这当然是不可逆过程,于是我们最初都认为,破坏是很难恢复的,除非人工终止。事实上,当病毒覆盖某些扇区时会与9X系统发生冲突,从而造成死机,使数据得到了保护。

  第三章、数据恢复基本攻略

  1、 硬件或介质问题的情况

  ①、硬盘坏:硬盘自检不到的情况一般是硬件故障,又可分为主版的硬盘控制器(包括IDE口)故障和硬盘本身的故障。如果问题在主板上,那么数据应当没有影响。如果出在硬盘上,也不是一定不能修复。硬盘可能的故障又可能在控制电路、电机和磁头以及盘片。如果是控制电路的问题,一般修好它,就可以读出数据。但如果电机、磁头和盘片故障,即使修理也要返回原厂,数据恢复基本没有可操作性。

  ②、软盘坏:当软盘数据损坏时,可以有几种处理,一种是用NDD修复,他会强制读出你坏区中的东西,MOVE到空白扇区中,这就意味着如果你的磁盘很满操作是没法进行的。你也可以用HDCOPY2.0以上版本READ软盘,他也会进行强读,使读入缓冲区的数据是完好的,你再写入一张好磁盘就可以了。当然这些方式,要看盘坏的程度。如果0磁道坏,数据也并非无法抢救,早先可以通过扇区读的方式,把后面的数据读出,不过一般来说,你依然可以HDCOPY来实验。

  2、系统问题的情况

  ①、在硬盘崩溃的情况下,我们经常要和一些提示信息打交道。我们要了解他典型提示信息的含义,注意这些原因仅仅分析逻辑损坏而不是硬盘物理坏道的情况。

  提示信息

  可能原因

  参考处理

  Invalid Partition Table

  分区信息中1BE、1CE、1DE处不符合只有一个80而其他两处为0

  用工具设定,操作在前面已经讲了。

  Error Loading Operating System

  主引导程序读BOOT区5次没成功。

  重建BOOT区

  Missing Operating System

  DOS 引导区的55AA标记丢失

  用工具设定,把前面读写主引导区程序的DX=80改为180即可

  Non-System Disk or Disk Error

  BOOT区中的系统文件名与根目录中的前两个文件不同

  SYS命令重新传递系统,

  Disk Boot Failure

  读系统文件错误

  SYS命令重新传递系统,

  Invalid Driver Specifcationg

  如果试图切换到一个确实存在的逻辑分区出现以下信息,说明主分区表的分区记录被破坏了。

  根据各分区情况重建分区表,或者用自动修复工具修复。注意分区丢失是最常见的故障之一,此时不要紧张,一般的说此时数据并没有问题,如果你不了解处理的方法。你可以选择我前面介绍的自动修复分区工具进行处理,他们大多只改写主分区表的数据区,不会影响你的其他数据。特别提醒大家,这些工具有的不支持8.4G硬盘,有的与BIOS对硬盘的识别有关系。如果你在一台机器上不行,可以换台BIOS不同的机器实验一下。

  Bad or missing command interpreter

  这是说找不到COMMAND.com,或者COMMAND文件坏了。

  如果你COPY过去COMMAND文件还是如此,一般来说是感染了某种病毒。

  Invalid media type reading drive

  X ,Abort,Retry,Fail?

  该盘没有高级格式化,或BOOT区中I/O参数表被破坏。

  这里情况较多,手工处理比较复杂,特别指出,此时DISKEDIT可能无法运行,建议用工具修复。

  Incorrect DOS Version

  可能是文件版本不统一,对9X来说,有95,95osr/2,98,98 oem/2等版本,重新SYS时,不要弄错了。

  用正确版本的启动盘重新SYS系统。

  另外说明一下,对于比较老的机器还有1071和not found rom basic、ROM BASIC OK等提示,在目前机器中以消失。另外,当代码区完全被破坏的情况下,系统关于无系统的提示是来自BIOS的,这条提示与BIOS的种类有关。另外,FDISK/MBR对代码区的重建是我们经常采用的。再介绍一种比较极端的情况,就是硬盘自检正常,而用软盘和硬盘都无法正常启动的情况,这可能是,病毒或恶意程序利用,DOS3以上版本启动中都要检索分区表这一特点,把分区表置为死循环。造成启动中死机。网上曾经流传过DOS6.22k修改方案,其实是修改西文MS-DOS6.22的 IO.SYS,把C2 03 06 E8 0A 00 07 72 03替换为:C2 03 90 E8 0A 00 72 80 90就可以启动被类似情况锁住的硬盘。

  ②、WIN9X无法正常进入或工作:以下仅仅是对可能的软故障分析,没有考虑硬件故障.

  进入图形界面前死机情况比较复杂,可能与加载的某些驱动有关可以在START MS WINDOWS时,用F8激活菜单,设置为step by step,看是哪项使系统死机。而后从CONFIG或者SYSTEM。INI中删除

  进入图形界面后死机: 一般这与开机加载的程序有关进入安全模式(此时自动运行的程序将不能加载),对注册表中的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run*中的键值和启动组中加载的程序进行分析。必要的予以删除。

  显示IEXPLORE.EXE错误,不能进行任何操作可能有某个系统的动态连接库损坏覆盖安装WIN9X,或从其他机器上COPY损坏的连接库。(确定哪个库损坏一般比较困难)

  频繁出现出错各种信息:一般是虚拟内存不足造成的看C盘是否剩余空间过少,或者打开的应用程序和窗口太多。

  2、全盘崩溃和分区丢失

  首先重建MBR代码区,再根据情况修正分区表。修正分区表的基本思路是查找以55AA为结束的扇区,再根据扇区结构和后面是否有FAT等情况判定是否为分区表,最后计算填回,主分区表,由于需要计算,过程比较烦琐,就不仔细介绍了,希望大家用前面介绍的工具,比如NDD处理。如果文件仍然无法读取,要考虑用TIRAMINT等工具进行修复。如果在FAT表彻底崩溃的情况下,恢复某个指定文件,可以用DISKEDIT或DEBUG查找已知信息。比如文件为文本,文件中包含“软件狗”,那么我我们就要把他们转换为内码C8 ED BC FE B9 B7进行查找。

  3、文件丢失、误格式化的情况

  一般的来说,文件删除仅仅是把文件的首字节,改为E5H,而并不破坏本身,因此可以恢复。但由于对不连续文件要恢复文件链,由于手工交叉恢复对一般计算机用户来说并不容易,在这篇缩略版中就不讲了,建议用工具处理,如果已经安装了Norton Utilities,可以用他来查找。另外,RECOVERNT 等工具,都是恢复的利器。特别注意的是,千万不要在发现文件丢失后,在本机安装什么恢复工具,你可能恰恰把文件覆盖掉了。特别是你的文件在C盘的情况下,如果你发现主要文件被你失手清掉了

  ,(比如你按SHIFT删除),你应该马上直接关闭电源,用软盘启动进行恢复或把硬盘串接到其他有恢复工具的机器处理。误格式化的情况可以用工具处理。

  4、文件损坏的情况

  一般的说,恢复文件损坏需要清楚的了解文件的结构,并不是很容易的事情,而这方面的工具也不多。不过一般的说,文件如果字节正常,不能正常打开往往是文件头损坏。就文件恢复举几个简单例子。

  类型

  特征

  处理

  ZIP、TGZ等压缩包无法解压

  ZIP文件损坏的情况下可以用一个名为ZIPFIX的工具处理。不过如果你的文件是从FTP站点上下载的,那么有可能是你没有定义下载模式为BIN。

  自解压文件无法解压

  可能是可执行文件头损坏,可以用对应压缩工具按一般压缩文件解压。

  DBF文件死机后无法打开

  典型的文件头中的记录数与实际不匹配了,把文件头中的记录数向下调整,遗憾的是公式我找不到了。

  5、硬盘被加密或变换

  此时千万不要FDISK/MBR,SYS等处理,否则可能数据再也无法找回,一定要反解加密算法,或找到被移走的重要扇区。对于那些加密硬盘数据的病毒,清除时一定要选择能恢复加密数据的可靠杀毒软件。

  6、文件加密后密码遗忘

  对于很多字处理软件的文件加密和ZIP等压缩包的加密,你是不能靠加密逆过程来完成的,因为那从理论上是异常困难的。目前有一些相关的软件,他们的思想一般都是用一个大字典集中的数据循环用相同算法加密后与密码的密文匹配,直到一致时则说明找到了密码。你可以去寻找这些软件,当然,有些软件是有后门的,比如DOS下的WPS,Ctrl+qiubojun就是通用密码。Undiskp的作者冯志宏是解文件密码的个中高手,大家不妨去他的主页看看。

  7、系统用户密码遗忘的处理:最简单的方法就是用软盘启动(NT的你也可以把盘挂接在其他NT上),找到支持该文件系统结构的软件(比如针对NT的NTFSDOS),利用他把密码文件清掉、或者是COPY出密码档案,用破解软件套字典来处理。前者时间短但所有用户信息丢失,后者时间长,但保全了所有用户信息。对UNIX系统,我建议你一定先做一张应急盘。

甜橙 发表于 2008-9-23 17:11:09

  第四章、恢复实例

  下面举一些数据恢复或者软故障处理的例子,这些事例是从我参与大量的故障处理中选取的一些典型事例。在选取典型事例中,遵循了以下原则。

  ①、 处理过程能够表现一定思想,而不是纯粹的技术手段。

  ②、 处理过程本身并不算复杂,基本不出现汇编程序,一般读者能够理解。

  ③、 处理过程本身并不完美,中间可能犯了一些错误,有的甚至局部失败。可以使大家引为借鉴。

  ④、 处理过程本身并不仅仅是纯粹的逻辑思维,有人的心理活动对技术的干扰。以使大家能更好的避免这些。

  1、 被CIH破坏硬盘恢复一例

  委托恢复人:某银行

  硬盘情况:CIH发作,蓝屏死机。该单位电脑人员曾用KV300 F10进行修复,但没有成功,又恢复了保存的MBR。

  修复工具:

  准备好软盘3张:

  DISK1 -WIN98启动盘(带DEBUG)

  DISK2-DISKEDIT等工具(此盘不要写保护)

  DISK3-DOS下杀CIH的工具

  基本思想:

  1、FAT2没有损坏的情况,用FAT2覆盖FAT1。

  2、FAT2也已经损坏的情况,我一般是只期待找回其中某些关键的文件了。

  我们最期待的是这些文件是连续的。如果不连续的话,也并非没有可能,但这往往还要知道文件的一些细节,包括对一些文件本身的连接结构有了解。如果FAT2没有完全破坏,是有一定用处的,另外,一般来说,FAT16的硬盘因为FAT表靠前破坏的比较严重,一般两个FAT表都坏了,小硬盘也很难恢复了。

  修复过程:

  把我的硬盘摘下,挂上待恢复的的硬盘,开机,进入SETUP,检测硬盘,把参数记下——CLY 620 HEAD 128 PRECOMP 0 LANDZ 4959 SECTOR 63 MODE LBA。 用准备好的软盘启动:

  A:>C:

  显示Invalid drive specification

  FDISK/MBR重建主引导记录。(这是个习惯),重新软盘引导:(可能没有必要)。

  此时已经看的见C:硬盘。

  启动DISKEDIT,启动过程中显示Invalid media type reading DRIVER C,哎呀,算了,还是先用DEBUG清空分区表,,并置80和55aa标志。

  重新启动,再运行DISKEDIT,显示设定为READ ONLY,没关系,把TOOLS/CONFIGURATION中的只读选项去掉,存盘,好了,可以编辑了。由于当时接的硬盘有多块,我把这块当成了是一块只有C分区,所以没看别的东西,我们期待FAT2没有损坏,以用FAT2覆盖FAT1,在这个时候DISKEDIT要比DEBUG容易的多,在FIND OBJECT中选择FAT,查一下起始扇区,好的,在CYL 0 SIDE68 SEC 14,0000H,F8 FF FF 0F(FAT32的),好的,FAT2没坏。其实如果不用DISKEDIT的可以用一端小程序查,偏移0000的F8 FF FF。

  由于以为只有C分区,所以,上来就在FIND中查找IOSYS(IO和SYS中要有空格)以查找ROOT区。找到后观察,是否有C:\下常见文件。好的,ROOT区没被破坏。记下了该扇区的CYL 0、SIDE 68、SEC 14,备用。FAT1一般前面已经被破坏了,但后面应该还在,这可以作为检查。因为是32位的,FAT1一般在CYL 0 SIDE1 SEC 33。因为有了ROOT区然后应该计算FAT表的长度了,因为FAT2到ROOT前一扇区为止,所以非常简单。

  然后可以用FAT2覆盖FAT1,这里用DEBUG还是DISKEDIT都可以,如果用DEBUG一般是用INT 25读绝对扇区,再用INT 26写入,用DISKEDIT则比较简单。程序:(略)

  然后可以恢复主引导记录、隐含扇区和BOOT区,可以先用NDD修复分区表,其他可以考虑可以考虑用标准覆盖法,如果你希望下一步由NORTO NUtilities来接手,这些都可以不做。我从另一台FAT32的机器上取来了相应的部分,写了进去。我这时发现好象有一个D盘。先看一下在说吧。

  好了,关机串上我的硬盘,用NORTON Utilities 4扫描C盘,文件基本恢复,对C盘杀毒,WHY,没有发现病毒,换了2种杀毒软件还是没有病毒,现在显示C盘是948M,有一个D盘,但是95下无法浏览,DOS下乱码。于是打电话核实当时的情况,原来是26日那天,放进一张光盘,光驱灯亮了一会,就硬盘狂响,蓝屏死机了。应该证实我的推断一样,是光盘的AUTORUN程序有CIH病毒。所以说没有实时防御能力的软件是没有意义的。另外,他们的硬盘确实分两个区,而且重要文件在D区。然后在修复D盘吧,再回到DOS,用DEBUG查找结束标志为55AA的扇区,然后根据后面是否有FAT判定是否为扩展分区。此时可算出大小来返回修订主分区表。当然,许多工具也可以很好的完成这一工作。如果你没有把握,就用他们完成好了。其实我就是用自己的RE做的,否则手工做确实太麻烦。

  经验总结:

  ①、你不要听信或者凭记忆想一块硬盘该是怎么样的,一定要自己去看,我就是犯了这个错误。

  ②、某些软件的修复功能确实如一些网友所讲可能有一定隐患,如果银行的电脑人员在用KV300 F10处理之前没有备份,可能要给我找些麻烦。

  我们应当看到,恢复数据要本着几项原则。

  ①、 最好先备份,这也是而后我写HD-MIRROR的原因

  ②、 优先抢救最关键的数据

  ③、 在稳妥的情况下先把最稳定的鸡蛋捞出来,(理应先修复扩展分区,再修复C),最好修复一部分备份一部分。

  ④、 要先作好准备,不要忙中出错,此间,由于我的机器没有装过NORTON,先解压,习惯的敲了一个D:\TEMP,这才想起来D盘已经是人家的硬盘,文件险些解在没有完全修好的C盘上。这种错误有时会经常发生。

  2、 LINUX错误安装带来问题一例

  委托恢复人:某信息港

  硬盘情况:4.3G硬盘,分三个区,D、E中有很多重要数据。原来装95系统,做主盘。在试图向从盘上装LINUX的时,误将安装盘符选为C,而后发现终止,此时硬盘无法自举。软盘启动无法看到任何有效分区。

  工具准备:

  DISK1 - WIN98启动盘(带DEBUG)

  DISK2 - DISKEDIT等工具(此盘不要写保护)

  修复思想:

  修复分区表中的扩展分区,重置主分区的分区类型。

  修复过程:

  用软盘启动,FDISK/MBR清除LILO,重建代码,用DISKEDIT调入MBR观察,已经没有了扩展逻辑分区的信息。80激活分区的类型已经变成83(LINUX)这时我犯了与前面类似的错误,本应先修复分区信息,但我却依然去先试图C。而且修复C的时是否我又犯了一个致命的错误,那就是我算错了C盘的大小。本来C盘是650M左右的一个分区,应当把分区类型置为06H(大DOS),而我误算C为340M,因此我置为了04H(普通FAT16),这时我想对C做进一步修复,就把硬盘串到我的机器上,开机后C盘可见,文件似乎完好。此时我选择用NU来自动修复它的C盘。最后的结果是,由于我选错了分区类型,修复使C盘彻底崩溃。我重新起机后,再试图用NU检测C时,我的98马上蓝屏,另一个恶果就是我决定从软盘启动,用DISKEDIT查看时,发现可能由于I/O参数表的损坏,DISKEDIT无法启动了。而后,我用RE恢复分区表,但在我的方正上,RE竟然溢出,后来,我找到一台兼容机,在上面运行RE,这才恢复了D、E两个分区。此时,委托我恢复的朋友打来电话,说只找到D、E就可以。我这才放心。

  经验总结:分区类型只是一个字节,却会带来如此严重的后果。可见,修复数据必须异常慎重。

  3、 NT SERVER硬盘崩溃一例

  相应情况:

  这是单位里的一台NT服务器。三个NTFS分区,有重要数据在内。硬盘崩溃,不能启动,软盘启动后,用NTFSDOS 不能映射任何逻辑分区。

  工具准备:

  DISK1 - WIN98启动盘(带DEBUG)

  DISK2 - DISKEDIT等工具(此盘不要写保护)

  修复过程:

  用DEBUG读取主分区表,发现完全混乱。反汇编后发现为一段有逻辑意义的代码,我当时十分紧张,以为硬盘被加密了。只好向一个高手HIT-007求援,不料他用DEBUG看了两下,马上退出来,做了FDISK/MBR。我大惊失色。但重起后,硬盘竟能启动进入NT,当然只剩下C一个分区。而后我很容易的恢复了另外两个分区。他对我说,你一看MBR中的内容就被吓住了,我向后看后面的一些系统扇区情况都是正常的。这就说明只是MBR不正常而已。

  经验总结:数据恢复中情绪的因素很重要,无论什么情况不能慌张,因为这可能影响到你 是否能全面冷静的思考。

  4、 NOVELL服务器掉电问题一例:

  相应情况:

  这是两年前处理过的一个问题,我当时在某证券营业部兼职做网管,开市时,一台NOVELL服务器因UPS故障突然掉电重起。当时的交易系统还是DBF数据库,按照规程,应该运行一个全部数据库重建索引例程。但索引中,却有7个库无法重建,检查发现,是库无法打开。

  修复情况:

  我恍惚记得深圳一个证券界电脑工程师对我说过,DBF文件头在突然死机中可能会损坏。但不知细节如何。我初步判定,由于库写入时,先修改文件头中的记录总数,再写入记录。可能是掉电时文件头已经修改但记录没有成功写入,因此,应该是记录数不符。但文件头中记录数在哪里呢。我于是这样处理,把这些损坏的数据库和一个完好的数据库COPY到本地,用FOXPRO打开看到记录数,换算成16进制。然后查找这个HEX串,判定找到记录数地址,(这个库记录数应当比较多,减少混淆的可能,否则容易找错)。由于我不知道处理DBF的公式,只好把损坏数据库的记录数每次减一,然后再用FOXPRO打开实验。其中5个数据库减一后就可以打开,只有一个数据库直到减4后才正常。全处理过程从掉电开始只有20分钟,基本没有影响交易进行。

  经验总结:当出现问题,但你不知道确切的处理方法时,要充分进行分析。

  5、 某财务系统数据处理一例:

  相应情况:

  也是我在证券公司处理的情况,某单机版财务系统,基于Clipper,当时是年初安装,使用正常至6月份底,突然发现该月数据紊乱,与实际出入巨大。出品公司的人来看过后,声称需要1周处理时间和近万元的处理费,我听说后,建议财务部拒绝其“讹诈”,由我来处理。

  分析处理过程:

  由于我对财务一窍不通,我请财务经理讲明了情况和一些概念,又分析了系统的大致结构。我发现本月每一笔数据都是正常的,只是因为多了上千笔没有发生的收支,才使汇总表发生了变化。那么这些数据是哪里来的,就成了问题的关键。在看了该软件的初始状态后,我似有所悟,问财务软件初装后并没有的上百个“科目”是从哪里建立的。财务经理回忆是上年底从某营业部发来的,我当时就明白了,那个营业部是上一年6月成立的,问题显然出在该营业部提供的初始科目不为空,由于上年1-5月该营业部尚不存在,所以数据为空,而该营业部6月以后的数据则随科目转入了我所在营业部的财务系统。经过对当初转入初始科目的对照,证实了我的判断。于是,我做了一段程序,按照对应关系把相关数据从系统库中摘除。从分析问题到问题的解决,只用了三个小时。

  经验总结:

  ①、 当出现数据紊乱时,很重要一点就是找到干扰源。

  ②、 数据处理绝非仅仅就是一个技术问题,特别是金融系统,一定要得到这方面的专业人士的配合。我想如果没有那位财务经理的信任鼓励和让我对会计知识的速成,问题处理就不会如此顺利.

  这只是一些简单恢复的例子,类似的,大家可以将在完整版的文章中看到更多。想说明一点,有一些朋友建议过我把一些复杂的灾难恢复和数据抢救的细节写出来,但因为这些涉及到相关单位一些系统信息等等,就对不起大家了。

甜橙 发表于 2008-9-23 17:11:39

  --附表:

  1、 磁盘分区表

  地址|说明|字节数

  1BEH|分区信息1|10H

  1CEH|分区信息2|10H

  1DEH|分区信息3|10H

  1EFH|分区信息4|10H

  1FFH|结束标志55AA|2H

  2、 分区信息说明

  偏移长度含义

  0|字节| 激活状态,80H:活动分区(可引导区),0H:非活动分区

  1|字节|分区起始的磁头

  2|字 |分区起始的扇区和柱面

  4|字节|分区类型

  5|字节|分区终止的磁头

  6|字|分区终止的扇区和柱面

  8|双字|分区起始决对扇区

  0CH|双字|分区扇区数

  3、 分区类型表(这是一个比较全的分区类型表了)

  0 Empty

  1 FAT12

  2 XENIX root

  3 XENIX usr

  4 FAT16 <32M

  5 Extended

  6 FAT16

  7 HPFS/NTFS

  8 AIX

  9 AIX bootable

  a OS/2 Boot Manag

  b Win95 FAT32

  c Win95 FAT32 (LB

  e Win95 FAT16 (LB

  f Win95 Ext'd (LB

  10 OPUS

  11 Hidden FAT12

  12 Compaq diagnost

  16 Hidden FAT16

  14 Hidden FAT16 <3

  17 Hidden HPFS/NTF

  18 AST Windows swa

  24 NEC DOS

  3c PartitionMagic

  40 Venix 80286

  41 PPC PReP Boot

  42 SFS

  4d QNX4.x

  4e QNX4.x 2nd part

  4f QNX4.x 3rd part

  50 OnTrack DM

  51 OnTrack DM6 Aux

  52 CP/M

  53 OnTrack DM6 Aux

  54 OnTrackDM6

  55 EZ-Drive

  56 Golden Bow

  5c Priam Edisk

  61 SpeedStor

  63 GNU HURD or Sys

  64 Novell Netware

  65 Novell Netware

  70 DiskSecure Mult

  75 PC/IX

  80 Old Minix

  81 Minix / old Lin

  82 Linux swap

  83 Linux

  84 OS/2 hidden C:

  85 Linux extended

  86 NTFS volume set

  87 NTFS volume set

  93 Amoeba

  94 Amoeba BBT

  a0 IBM Thinkpad hi

  a5 BSD/386

  a6 OpenBSD

  a7 NeXTSTEP

  b7 BSDI fs

  b8 BSDI swap

  c1 DRDOS/sec (FAT-

  c4 DRDOS/sec (FAT-

  c6 DRDOS/sec (FAT-

  c7 Syrinx

  db CP/M / CTOS / .

  e1 DOS access

  e3 DOS R/O

  e4 SpeedStor

  eb BeOS fs

  f1 SpeedStor

  f4 SpeedStor

  f2 DOS secondary

  fe LANstep

  ff BBT

  4、 DOS8+3结构磁盘目录项

  偏移|说明 |长度(10进制)

  00H |文件名 |8

  08H |扩展名 |3

  0BH |属性 |1

  0CH |保留区 |10

  16H |生成/最后修改时间|2

  18H |生成/最后修改日期|2

  1AH |起始簇 |4

  1CH |字节长度 |4

zhj0718 发表于 2017-11-7 00:26:42

马住明天看

heang567 发表于 2023-12-27 13:57:52

谢谢,学习一下哦

heang567 发表于 2024-1-11 09:55:39

感谢了,认真学一下

dgcj 发表于 2024-2-24 16:53:40

谢谢分享,
马住明天看

heang567 发表于 2024-4-26 08:36:05

谢谢,学习一下哦
页: [1]
查看完整版本: 数据恢复与软故障处理基本指南