Win2000磁盘编辑(二)

发表于:2007-07-13来源:作者:点击数: 标签:
磁盘编辑之一是针对主引导记录的操作,这次介绍针对分区表的操作。 一、分区与分区表的背景知识: 分区表存放位置在硬盘的0柱面0磁面1扇区的512个字节中的主引导记录之后,分区表信息在主引导扇区中存放的起始位置是固定的,都是从扇区的2BEH处开始连续存放

    磁盘编辑之一是针对主引导记录的操作,这次介绍针对分区表的操作。

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

  分区表存放位置在硬盘的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。立即显示分区表信息的对话框

    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进制,可以使用附件中的计算器。(设置为函数型)。

 


 

原文转自:http://www.ltesting.net