WIN2000的秘密武器之磁盘编辑(推荐)

/ns/wz/sys/data/20040827214320.htm

DSKPROBE.EXE:它位于Windows 2000/XP安装光盘里的\SUPPORT\TOOLS目录下的SUPPORT.cab压缩包下

一.简介

  硬盘中的数据与计算机的引导和运行过程密切相关,其中的信息可以很明显地分成两类:第一类是完全不对用户透明的数据,只可以被计算机读取和使用,主要包括:主引导记录(Master Boot Record (MBR))、分区表和引导扇区。这类信息在硬盘中占据的空间不大,数据量也很小,但所起的作用却非常重要,此处数据一旦出现损坏,对整个计算机来说,往往是致命性的故障。第二类信息是一般的文件或数据,对用户是透明的,或者即使隐含的也可以通过修改文件属性看到。

  主引导记录位于硬盘的第一个物理扇区,一个物理扇区是512个字节。从第一个字节开始就是真正的引导记录代码,引导记录到结束。接着是分区表,分区表如果以80开头,这个分区就是所谓可激活分区,即可以充当引导分区。这512个字节的最后两个字节是55AA,这是引导成功的标志。在这三部分之间的空闲部分,都以0来填充。

  一个物理硬盘可以分成一个或多个区域,称为分区。一个分区之下可以再划分成一个或多个逻辑驱动器。由于第一类硬盘信息极其重要但又不为用户所见,所以要对这里进行修改就必须借助于特定的工具软件,能够完成这样操作的软件工具有微软自己开发的,也有第三方开发的。例如著名的诺顿工具中的磁盘编辑器就是一个典型例子。

  本次介绍的Dskprobe.exe是一个微软自己开发的、应用于windows 2000环境下的磁盘扇区编辑工具,主要用于硬盘扇区的编辑。这个工具允许使用者以本地管理员的身份或权限直接对硬盘的物理扇区进行:读取、编辑、修改、保存及备份。这是用别的方法难以实现的操作。是微软支持工具中的一个。

  大概你也会听说过,这类工具的威力大破坏性也大,如果你确实熟悉硬盘的信息结构,Dskprobe就是你手中的利器。如果盲目乱动,结果无疑是灾难性的。所以,给你提出以下强烈建议:如果要为练手获得经验的话,最好有行家在场指导,或找一块空闲的、没有什么关紧数据的硬盘试验。就是出问题,也不致给你带来严重后果。

  Dskprobe的应用有以下限制和适用范围:1. 这个工具与诺顿工具的最大区别就是引入了对工具使用者权限的要求,当执行Dskprobe的时候,它会先要求你输入管理员的登录密码。2.由于每台计算机配备的硬盘都可能不一样,所安装的操作系统的类型、版本也参差不一;如果利用了多系统引导安装,则还存在怎样组合问题,凡此种种,都会影响主引导记录和分区表乃至引导扇区的内容。所以,进行对比的时候,决不能照搬书本上的例子。3.该工具不能在FAT32上使用,即不支持FAT32系统。4.该工具不能用在动态磁盘上。
该工具在使用时可分成两个阶段:

  1.备份阶段,这是指系统尚属正常的时候,事先使用Dskprobe来将重要信息读出、并保存为一个或多个文件。需要保存的有:主引导记录、分区表和引导扇区。
  2.排除故障,当发现引导故障后,如果确认是主引导记录、分区表和引导扇区的问题。就可以用Dskprobe先将原来备份的文件读出来,然后进行替换并保存到相应的物理扇区。进一步说:由于Dskprobe工具实际可以对硬盘的任意物理扇区进行编辑修改,所以,它也决不限于只能完成上面三部分替换。

二.如何进行针对主引导记录的操作?

  硬盘上电后,系统首先访问硬盘控制电路中保存的诸如厂商、型号等等基本信息备用。随后系统执行BIOS中的一段例行代码,首先读取的硬盘的主引导记录(Master Boot Record (MBR))到内存中,然后执行引导记录中的代码,就可以完成引导过程并最终将整个系统的控制权交给操作系统。这就是计算机引导过程的粗略描述。如果要配置多个操作系统,希望在引导过程中可以被用户选择,就需要修改引导记录中的代码来实现这些功能。当然,这种情况下的主引导记录要比单一引导更为复杂。

要访问主引导记录,可以先启动程序:Dskprobe.exe,启动成功的界面如图所示。


然后可以按照下列步骤:

1.先指定要读取(主引导记录所在)的驱动器,可用鼠标点击菜单中的:Drives->Physical Drive,会显示一个用来指定物理驱动器的对话框。

2.这个对话框的编辑栏中默认显示一个"Physical Drive 0",这就是第一个物理驱动器??硬盘。


3.鼠标点击"Physical Drive 0",再点击按钮Set Active,就完成了指定物理驱动器的任务了。4.然后指定要读取的物理扇区位置。可以点击图1菜单中的Sectors->Read Sectors。又出现的对话框可以用来指定扇区的起始位置和要连续读取的扇区数。


如Starting Sector(起始扇区)=0,Number of Sectors(扇区数)=1,点击OK按钮后,立即显示出来的内容如图1窗口中所示。这就是物理硬盘0柱面0磁盘面第一扇区的信息,也就是主引导记录的内容(包含分区表信息)。如果将这些信息单独截取出来,以文本方式显示,基本上与下面的类似:之所以说成基本类似,是因为这些内容中有些部分不是每台计算机都相同的,例如分区表会随分区数多少而不同,引导记录代码也会因是否加入多引导选择而不同。

5.将显示结果保存为一个文件:上面已经说过物理硬盘0柱面0磁盘面第一扇区的信息非常重要,我们何不趁现在计算机正常时将这些信息保存起来呢?你可以点击"File->Save as…",指定一个文件的保存路径和名称,就可以予以保存,默认的后缀是.dsk。

6.用完好的主引导记录替换当前(损坏)的这个:如果你自己的计算机存在引导问题并确认是主引导扇区的问题,况且以前保存有完好的引导记录文件,那么,你就可以进行这个操作了。首先点击"File->Open",找到引导记录文件并打开,如果核对一下没有问题,就可以再点击"Write -> Write Sector",然后会有对话框让你指定(要写入的)起始扇区,选好后点击"OK",就可以完成改写。必须说明的是:这种操作非常关键,一步也不能错。否则后果是非常严重的,为防万一,动手之前重要数据先作好备份。
    
  能导致主引导记录损坏的原因主要有:a.病毒,许多病毒都修改这里,因为主引导记录被执行的时候,操作系统还没有在内存中完全取得系统控制权,这种修改的结果是病毒先取得了系统控制权。如果真是这种情况,病毒代码往往还会接着存放在后续的扇区中,而正常情况下,0柱面0磁面上应当是除了主引导记录外什么也没有的。假设,你的硬盘是每面63个扇区,如果你发现0柱面0磁盘面第一扇区之后的哪些扇区上并不是以0填充的,而是有别的非0值,就可以肯定你的硬盘存在问题。b.分区表损坏。这也是常见的问题,我们留在后面详细讨论。c.分区操作不当,这主要发生在没有安装操作系统之前,所以也用不上本次所介绍的工具。
三.引导记录结构。

  下面是一个主引导记录区的内容:最左边的:号前的数字是相对的物理地址;中间的那些16进制数字是记录内容(限于蓝色的部分);粉红色的字体是磁盘签名,在以前的dos中是没有这一项的;以80开头的红色字体部分是分区表;末尾的55AA是引导结束标志。

Physical Sector: Cyl 0, Side 0, Sector 1
00000000: 33 C0 8E D0 BC 00 7C FB - 50 07 50 1F FC BE 1B 7C 3.....|.P.P...|
00000010: BF 1B 06 50 57 B9 E5 01 - F3 A4 CB BD BE 07 B1 04 ...PW...........
00000020: 38 6E 00 7C 09 75 13 83 - C5 10 E2 F4 CD 18 8B F5 8n.|.u..........
00000030: 83 C6 10 49 74 19 38 2C - 74 F6 A0 B5 07 B4 07 8B ...It.8,t.......
00000040: F0 AC 3C 00 74 FC BB 07 - 00 B4 0E CD 10 EB F2 88 ..<.t...........
00000050: 4E 10 E8 46 00 73 2A FE - 46 10 80 7E 04 0B 74 0B N..F.s*.F..~..t.
00000060: 80 7E 04 0C 74 05 A0 B6 - 07 75 D2 80 46 02 06 83 .~..t....u..F...
00000070: 46 08 06 83 56 0A 00 E8 - 21 00 73 05 A0 B6 07 EB F...V...!.s.....
00000080: BC 81 3E FE 7D 55 AA 74 - 0B 80 7E 10 00 74 C8 A0 ..>.}U.t..~..t..
00000090: B7 07 EB A9 8B FC 1E 57 - 8B F5 CB BF 05 00 8A 56 .......W.......V
000000A0: 00 B4 08 CD 13 72 23 8A - C1 24 3F 98 8A DE 8A FC .....r#..$?.....
000000B0: 43 F7 E3 8B D1 86 D6 B1 - 06 D2 EE 42 F7 E2 39 56 C..........B..9V
000000C0: 0A 77 23 72 05 39 46 08 - 73 1C B8 01 02 BB 00 7C .w#r.9F.s......|
000000D0: 8B 4E 02 8B 56 00 CD 13 - 73 51 4F 74 4E 32 E4 8A .N..V...sQOtN2..
000000E0: 56 00 CD 13 EB E4 8A 56 - 00 60 BB AA 55 B4 41 CD V......V.`..U.A.
000000F0: 13 72 36 81 FB 55 AA 75 - 30 F6 C1 01 74 2B 61 60 .r6..U.u0...t+a`
00000100: 6A 00 6A 00 FF 76 0A FF - 76 08 6A 00 68 00 7C 6A j.j..v..v.j.h.|j
00000110: 01 6A 10 B4 42 8B F4 CD - 13 61 61 73 0E 4F 74 0B .j..B....aas.Ot.
00000120: 32 E4 8A 56 00 CD 13 EB - D6 61 F9 C3 49 6E 76 61 2..V.....a..Inva
00000130: 6C 69 64 20 70 61 72 74 - 69 74 69 6F 6E 20 74 61 lid partition ta
00000140: 62 6C 65 00 45 72 72 6F - 72 20 6C 6F 61 64 69 6E ble.Error loadin
00000150: 67 20 6F 70 65 72 61 74 - 69 6E 67 20 73 79 73 74 g operating syst
00000160: 65 6D 00 4D 69 73 73 69 - 6E 67 20 6F 70 65 72 61 em.Missing opera
00000170: 74 69 6E 67 20 73 79 73 - 74 65 6D 00 00 00 00 00 ting system.....
00000180: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
00000190: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
000001A0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
000001B0: 00 00 00 00 00 2C 44 63 - 32 31 37 31 35 0C 80 01 .....,Dc21715...
000001C0: 01 00 07 FE 7F 7D 3F 00 - 00 00 BF A3 5D 00 00 00 ....}?.....]...
000001D0: 41 7E 06 FE BF 62 FE A3 - 5D 00 A5 22 38 00 00 00 A~...b..].."8...
000001E0: 81 63 0B FE FF 7A A3 C6 - 95 00 18 A3 44 00 00 00 .c...z......D...
000001F0: C1 7B 05 FE FF FF BB 69 - DA 00 E2 48 D4 00 55 AA .{.....i...H..U.
磁盘编辑之一是针对主引导记录的操作,这次介绍针对分区表的操作。

一、分区与分区表的背景知识:

  分区表存放位置在硬盘的0柱面0磁面1扇区的512个字节中的主引导记录之后,分区表信息在主引导扇区中存放的起始位置是固定的,都是从扇区的2BEH处开始连续存放,一个分区的记录信息共占用16个字节,分区表直到到该扇区倒数第三个字节结束(包括倒数第三个字节在内)。一共64个字节,所以一个硬盘最多可以分成4个分区。实际中如果分区数不满4个时,不使用的分区记录位置分区命令程序可以自动以0填充。

  每条分区记录中的这16个字节含义如下:(以分区表地址偏移来表示)
偏移量 含义 记录长度(字节)
00H 引导指示符 1
01H 分区引导记录磁头号 1
02H 分区引导记录扇区号 1
03H 分区引导记录柱面号 1
04H 系统指示符 1
05H 分区结束磁头号 1
06H 分区结束扇区号 1
07H 分区结束柱面号 1
08H 分区前面的总扇区数 4
0CH 分配给分区的扇区数 4

  表中引导指示符是指该分区是否可以引导,如果为80H,就是可引导的,是00H就是不可引导的,在使用FDISK过程中,有一项激活分区的操作,实质就是将该字节写为80H。系统指示符是表明该分区属于哪种分区格式的,01H表示FAT16.

  由于每一个分区都是可再往下划分逻辑驱动器的,所以,激活的本质是激活哪个逻辑驱动器。例如,很多机器都是将一个10G左右的物理硬盘先划分为两个分区,然后将第一分区再划分成C、D两个逻辑驱动器,激活逻辑驱动器C为可引导;到这一步特别注意:不可再激活逻辑驱动器D。如果想安装两个操作系统,必须先在第二分区中划分好逻辑驱动器,再激活该分区中的一个逻辑驱动器。

  针对硬盘分区表可进行的操作主要有:a.如何在硬盘状态完好的时候将分区表信息读出并保存?b.如何在分区表发生故障后,用备份的分区表来代替损坏的分区表?c.如果没有可用的分区表的备份,如何手工重建分区表信息?其中难度最大,当然也是技术要求最高的也就是手工重建分区表了。

  在帮助文档中,明确指出DiskProbe不支持FAT32,所以,DiskProbe对FAT32的分区表不能操作。从这一点说,它的功能受到了相当的限制。但以前曾经发现过,某些工具帮助文档中介绍的功能与实际具备的功能确实有出入,所以你也不能将帮助文档中的说法太当真了,但由于我自己机器上不是采用的FAT32分区方法,也就没有进行针对FAT32的试验。如果哪位有FAT32的硬盘,可以自己试验一下。
解决分区表故障的步骤中,首先是读取和检查主引导记录中的分区表信息。这部分描述:

二、取得分区表信息的方法

  不论是备份分区表或是仅仅查看一下,都需要先取得分区表信息,其步骤是:

  1. 执行程序:DiskProbe
  2. 在菜单Drives 中,鼠标点击: Physical Drive.
  3. 在菜单 Open Physical Drive 的对话框中, 以鼠标双击你准备显示分区表的那个驱动器名称。例如:Physical Drive 0
  4. 在 Handle 0范围内的 Open Physical Drive 对话框中,点击 Set Active,之后单击 OK.
  5. 在菜单的 Sectors一项中,点击 Read一项。.
  6. 在接下来出现的 Read Sectors 对话框中输入将要读取的起始扇区和扇区号, 即Starting Sector一项填写0, Number of Sectors 一项中填写1,实际这两个数字也是默认值。然后点击Read,读取扇区信息。
以上这六步骤实际就是读取主引导记录扇区;
  7. 在View菜单中,点击 Partition table。立即显示分区表信息的对话框如图所示。



图中所显示的是含义(从左到右):系统分区(即可引导分区);SystemID是指NTFS类型的分区;Partition table index是指当前显示的是哪个分区,图中显示的是Partition1。图1中现在是以对话框形式显示的分区表信息,如果想以字节形式显示,可以:点击"View->Byte",窗口中就变换为字节显示的形式。
8. 要在 Partition table index 的列表框中,用鼠标双击分区表的号码,图中相应的分区表信息会自动变化。 从图中可以也看出来:分区表信息和上面表中是相对应的,有:分区起始磁头号和分区结束磁头号;分区起始扇区号和分区结束扇区号;分区起始柱面号和分区结束柱面号;
  9. 按说应当将分区表保存为一个文件,但由于只有区区64个字节,并且和主引导记录共存在同一个扇区中,一般也就将它与主引导记录一并进行保存到同一个文件中。
  10. 如果使用你会使用dos的debug工具,可以编写一段汇编程序,将这个扇区的内容读取出来,用拷贝屏幕的方式进行打印,可以将主引导扇区的内容保存在纸上,作分析参考之用。由于采用了汇编语言,所以这种方法局限性小,所有windows9.x系列或dos均可用。在dos下键入:Debug 回车
(以下代码手工输入,注意空格不可省略)
  -a0
  mov ax 201
  mov bx 100
  mov cx 1
  mov dx 80
  int 13
  int 3
  -g=0

  然后用命令:-d100显示内容,在打印机联机状态下,按下键盘的PrintScreen键,就可以将屏幕上当时显示的内容完全打印到纸上。但我没有试验这个办法的在NTFS分区下是否可用。

  可能有的朋友会有这样的疑问:windows2000是对安全性要求非常高的系统,不使用口令而在汇编中调用INT13中断,来直接读取主引导扇区。会不会成功或者影响安全性呢?这种担心是多余的,因为安全性是针对操作系统和运行在操作系统之上的文件而言的,而主引导扇区并不属于任何操作系统,即机器在执行主引导记录代码的时候,操作系统还没有在内存中建立起来,一切都还没有显现,当然是安全的。所以,这和保证数据文件安全并不矛盾。
三、如何用备份的分区表(或主引导扇区信息)来恢复损坏的分区表:

  1. 首先执行程序:DiskProbe.
  2. 在菜单Drives 中,鼠标点击: Physical Drive.
  3.  在菜单 Open Physical Drive 的对话框中, 以鼠标双击你准备修理分区表的那个驱动器名称。例如:Physical Drive 0
  4. 在 Handle 0范围内的 Open Physical Drive 对话框中,点击 Set Active,之后单击 OK.
  5.  在菜单的 Sectors一项中,点击 Read一项。
  6. 在接下来出现的 Read Sectors 对话框中输入将要读取的起始扇区和扇区号, 即Starting Sector一项填写0, Number of Sectors 一项中填写1,实际这两个数字也是默认值。然后点击Read,读取扇区信息。
  7. 在View菜单中,点击 Partition table。显示当前的分区表信息
  8. 要在 Partition table index 的列表框中,用鼠标双击准备维修的分区表的号码,选定后,对话框下半部分立即显示相应的分区表信息。(这些信息肯定是没有修理之前的数值了)。上面这些操作与读取分区表甚至与读取主引导记录的操作都是大同小异,但以下的就比较关键了:
  9. 在对话框中各个参数中填写入新的数值。这些新的数值应当是查对备份分区表信息文件后取得的。当然也可以是从备份的分区表文件直接转换为分区信息。如果编辑时不想使用对话框形式,可用上面介绍的方法将显示转换为字节形式,在字节形式下,仅显示选定的分区信息,其它部分(包括主引导记录)都是0。
  10. 在Sectors(扇区)菜单中 ,鼠标点击:Write.
  11. 这时将出现 Write Sector 对话框, 在起始扇区的 Starting sector一项中选0,然后点击 Write it 保存。



  12. 点击 Yes,这时就完成了覆盖原来数据的操作。

四、手工重建分区表

  这种方法需要使用者非常熟悉分区结构,最好硬盘分区较少,分区情况也比较简单。如果分区多而复杂,难度太大。即使简单的情形,不到万不得已也不要用这种方法。

  手工建立分区表主要难在分区数据的计算上。计算之前需要已知的数据有:硬盘的柱面数,磁头数,每磁道的扇区数。这些数据在硬盘标签上可以很容易地查找出来。

  首先,因为0柱面0磁头(面)1扇区不属于任何分区而且是隐藏的,所以第一个分区应当从0柱面1磁头1扇区开始。现在的硬盘都比较大,常见的是每磁道63扇区,每个扇区是512字节,柱面数和磁头数则随着硬盘容量的增大而不同。计算时先选定容量,根据需要的容量,推算出第一分区结束的扇区号、磁头号和柱面号。最后填写的值要转换为16进制。紧邻上一个结束位置,就是第二分区的起始位置,依此类推,直至结束。磁头数可以理解为与磁面数相等,柱面数可以理解为一个磁面上可划分的磁道数。这样,一个磁面的容量就是512*63(扇区)*柱面数。例如第一分区要用到最前面的125个磁面(或磁头),下一分区必须从第126磁面(或磁头)开始。则容量是=512*63*125*柱面数。扇 区数柱面数推算也和这相仿。 更详细的计算请参考有关资料。算出的数据填写在分区表中,其操作同上。

五、注意问题

  1. 上面介绍的,与其说是手工重建分区,不如说是手工新建分区。危险性很大。且没有针对NTFS试验过。
  2. 如果是恢复原有分区,不推荐手工重建,因为一旦输入错误的分区表,将丢失原有数据。
  3. 计算必须将结果转换为16进制,可以使用附件中的计算器。(设置为函数型)。

=========================
文章类型:转载 提交:绝地苍狼 核查:NetDemon