正在加载...
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]

分区表的修复

[ 2008/09/07 20:50 | by selboo ]
      笔者最近在帮着别人安装系统的时候遇到一个难题,就是系统复制安装程序的时候,到了76%左右的时候,怎么也复制不进去了.当时想也许是安装盘的原因吧,于是找一张Ghost盘,想复制一个系统进入电脑,但是也遇到相同的问题.连续换了几张盘都出现相同的问题,这肯定是电脑本身的原因了,把硬盘拿到另一台电脑上安装,还是不行,看来是硬盘的原因,但是朋友说是刚买了两个月的硬盘,应该不会就坏了吧,想来想去,笔者想到了分区表是不是已经损坏这个问题,没办法,只有对系统进行了重新分区,再装系统,一切正常.本篇文章笔者就和大家一下来认识分区表故障和修复损坏的分区表.

      使用计算机过程中在所难免会遇到各种疑难杂症,如果硬盘分区出现故障怎么办呢?如果你不幸遇到硬盘的分区故障,先别急着重新分区,按照下文介绍的方法来尝试一下,没准儿会有个意外的惊喜呢.

      分区表为何会出故障

      在分区表被破坏后,启动系统时往往会出现"Non-System disk or disk error,replace disk and press a key to reboot"(非系统盘或盘出错)、"Error Loading Operating System"(装入DOS引导记录错误)或者"No ROM Basic,System Halted"(不能进入ROM Basic,系统停止响应)等提示信息.那么分区表故障究竟是如何发生的呢?

      1、病毒引发故障
      计算机病毒是导致分区表损坏最为典型的故障之一.比如典型的CIH病毒的变种除了攻击主板的BIOS之外,同时也会对分区表进行破坏,而且还有很多引导区病毒也会对分区表进行破坏.

      2、环境问题导致
      如今的Windows 2000/XP都支持NTFS文件格式,而且程序默认的都是采用这种文件格式来安装系统,如果对硬盘进行分区转换或者是划分NTFS分区时意外断电或者死机,那么很有可能导致分区表损坏.而且在通过PQMagic(分区魔术师)之类的第三方分区软件调整硬盘分区容量、转换分区格式的时候也存在一定风险,如果死机或者断电也会导致硬盘分区表故障,甚至有可能丢失硬盘中的所有数据.

      3、操作不当
      如果在一块硬盘上同时安装了多个操作系统,那么在卸载的时候就有可能导致分区表故障,比如在同时安装了Windows 2000和Windows 98的计算机上,直接删除Windows 2000内核会导致分区表的错误.另外,在删除分区的时候如果没有先删除扩展分区,而是直接删除主分区,也会出现无法正确读出分区卷标的故障.

      分区表故障怎么修复

      1、查杀病毒
      如果是由于引导区病毒造成分区表故障,则可以借助KV3000、瑞星、金山等杀毒软件提供的引导软盘启动计算机,接着在DOS环境中对系统进行病毒查杀操作.比如用KV3000的引导盘启动计算机之后输入"KV3000/K"命令进行病毒扫描,如果发现引导区存在病毒,则程序会自动进行查杀清理,建议同时对整个系统进行完整的扫描以查找出隐藏的病毒.一般说来,将引导区中残留的病毒清除之后即可恢复计算机的正常使用.提示:使用软盘引导计算机之前一定要将软盘的写保护关闭,否则有可能导致病毒感染软盘.

      2、用Fdisk命令修复
      Fdisk不仅是一个分区程序,它还有着非常便捷的恢复主引导扇区功能,而且它只修改主引导扇区,对其他扇区并不进行写操作,因此对于那些还在使用Windows 9x的朋友而言无疑是个非常理想的分区表修复工具.通过Fdisk修复主引导区的时候,先用Windows 98启动盘启动系统,在提示符下输入"Fdisk /mbr"命令即可覆盖主引导区记录.

      提示:"Fdisk /mbr"命令只是恢复主分区表,并不会对它重新构建,因此只适用于主引导区记录被引导区型病毒破坏或主引导记录代码丢失,但主分区表并未损坏的情况使用.而且这个命令并不适用于清除所有引导型病毒,因此使用的时候需要注意.

      3、用Fixmbr修复引导记录
      在Windows 2000/XP中,我们一般会用到故障恢复控制台集成的一些增强命令,比如Fixmbr用于修复和替换指定驱动器的主引导记录、Fixboot用于修复知道驱动器的引导扇区、Diskpart能够增加或者删除硬盘中的分区、Expand可以从指定的CAB源文件中提取出丢失的文件、Listsvc可以创建一个服务列表并显示出服务当前的启动状态、Disable和Enable分别用于禁止和允许一项服务或者硬件设备等等,而且输入"help"命令可以查看到所有的控制命令以及命令的详细解释.

      比如输入"fixmbr"命令可以让控制台对当前系统的主引导记录进行检查,然后在"确定要写入一个新的主启动记录吗?"后面输入"Y"进行确认,这样就完成了主引导记录的修复

        4、更换工具调整分区
      在删除分区或者是重新创建分区的时候,如果遇到意外原因死机或断电,这时候再使用原先的工具可能无法识别当前硬盘的分区表,必须更换另外一款分区表软件进行修复.比如我们通过Fdisk分区时意外死机,这时候再通过Fdisk就无法顺利进行,可以采用PQMagic之类的第三方分区软件解决.另外需要提醒大家注意的是,分区表对于系统的正常稳定运行影响非常大,一般情况下最好不要采用DM之类快速分区格式化软件,否则有可能导致后期使用过程中频频出现意想不到的麻烦.

      5、通过"江民硬盘修复王"修复

      分区表被破坏后,最常见的出错提示是:"Invalid Partition Table"(无效分区表).对于分区表故障,可以通过"江民硬盘修复王"来进行修复.
      首先在江民公司的网站上下载"硬盘修复王"的镜像文件及"HD.exe"文件,然后通过"HD.exe"将镜像写入江民杀毒王2003的钥匙盘中.用该软盘启动电脑,在提示符下输入"JMHDFIX"后回车便进入了硬盘修复王的主界面.

      在主界面中按下F2键进入"系统测试与自动修复"界面,此时程序会自动检测硬盘分区表,如果分区表被破坏,则屏幕显示:
      Hard Disk Partition Table - Error!!!
      Fix Hard Disk Partition Table or Sector (Y/N)?
      大意为:硬盘分区表错误,是否修复硬盘分区表或C盘引导区?按下"Y"键修复,按下"N"键退出.
      按下"Y"键之后,屏幕显示:

      Insert a formatted diskette into drive A, Pressed "Y" to save "error" Partition table floppy filename HDPT.VIR, "N" to exit continue (Y/N).

      大意为:请插入一张软盘,以便将坏的引导区信息做一备份,其文件命名为HDPT.VIR.插入软盘按下"Y"键继续,按下"N"键退出.
      插入一张软盘并按下"Y"键后,屏幕显示:
      Hard disk Partition table or boot sector fixed OK!!!
      Fixing ......
      注意:此时KV3000正在修复C盘的分区表,不要中断其操作.过了一会儿之后,如果屏幕出现以下字样:
      OK!OK!OK!
      Press any key to return ......
      则说明重建分区表的操作成功,按任意键退出.重新启动电脑后,如果能够进入C、D等分区,修复成功.
Tags:

解读分区表的秘密

[ 2008/07/23 10:48 | by selboo ]
一 进制转换

    分区表中会用到二进制,16进制和10进制,大家要熟悉它们之间的转换,例如16进制的3F等于10进制的63等于二进制的111111。好在现在有计算器可以用,心算没把握就用计算器好了,所以进制转换相对不算难。开始-运行-输入"calc" 即可打开计算器

二 常用存储单位

1K=1024字节=210 字节
1M=1024K=220 字节
1G=1024M=230 字节
1个扇区=512字节

    介绍这些是因为分区表中表示分区大小是用扇区表示,也就是说分区表中只会说这个分区有多少个扇区,而不会说有多少G,多少M,因此我们要习惯进行存储单位转换。例如分区表中描述分区大小是 72 A1 A9 03,首先你要明白这四个字节是高低位颠倒的,高位在后,低位在前,真正的分区大小是 03 A9 A1 72。然后我们把16进制转为10进制,这样就知道了这个分区大小是 61448562扇区,换算为字节就是61448562×512=31461663744。然后除以2的30次方,就可以知道分区的大小是 31461663744/ 230  =29.3 G。

三 扇区定位

    硬盘中有数以亿计的扇区,如何才能准确定位到每一个扇区呢?一般用C/H/S和LBA两种方法。这两种定位方法都很重要,我们来好好看看。

    C/H/S指的是利用柱面/磁头/扇区这三个参数来定位扇区,有的资料说C/H/S指的是磁道,磁头和扇区,这就不准确了。磁道是硬盘盘体上的同心圆,每个磁道上排列了63个扇区,盘体最外圈为0磁道,从外圈向内圈编号逐步加大。由于一块硬盘有多块盘体,因此硬盘可以看作是一个圆柱体。这时就看出用磁道定位不妥的地方了,磁道显然是只适合在二维空间定位,不适合在三维空间中表示准确的坐标。柱面就没有这个问题了,柱面是所有盘体上磁道的集合,例如0柱面指的是所有盘体上的0磁道所组成的一个圆柱体。这下您肯定明白了,原来磁道是二维的圆,柱面是三维的圆柱。

    一个柱面包含了若干磁道,如何来准确表示柱面中的具体磁道呢?这时就可以使用磁头参数了。每个磁头负责读取柱面中的处于不同高度的磁道,我们只要给出具体的磁头数值,就知道对应柱面中的哪个磁道了。这样我们根据柱面和磁头两个参数就可以准确地定位到盘体中的某个磁道,一个磁道上有63个扇区,我们只要再知道扇区的编号,就可以完成在三维空间中定位扇区的任务了,C/H/S三个参数就是这样定位扇区的。

    柱面编号从0开始,每个柱面有255个磁头,编号从0到254,每磁道有63个扇区,编号从1到63。有朋友问:难道硬盘中真的有255个磁头吗?当然不是,硬盘中的磁头很少会超过4个,真正硬盘的每个磁道也不是都有65个扇区。每柱面255磁头每磁道63扇区这种模型只是为了研究问题方便而人为规定出来的,就象我们规定每小时有60分钟而每分钟有60秒那样。虽然柱面中的磁头数量和实际不符,但由于硬盘中有一个地址翻译器,可以将标准模型中的CHS参数转换为硬盘实际的CHS参数,因此我们用C/H/S定位扇区是没有问题的,这就象可以从阴历的日期转换为阳历的日期。

    柱面是研究分区非常重要的一个参数,分区以柱面为粒度。这话怎么理解?操作系统分区时要考虑柱面因素,分区总是结束在柱面的最后一个扇区,也就是说分区总是结束在某个柱面的254磁头63扇区。这就解释了为什么你要求的分区大小和实际分区大小总是有些小小的误差,例如你要分一个区是200M,操作系统在分区时考虑的是这个分区到到哪个柱面结束离你的要求误差最小。这种以柱面为粒度的分区方式肯定会有误差,误差不会超过半个柱面,一个柱面的大小是 255磁头×63扇区×512字节=7.8M

    LBA定位扇区的方式就简单多了,LBA方法是把硬盘当作一个扇区集合,LBA给硬盘中的每个扇区都赋予一个唯一的编号,只要你说出扇区编号就可以定位出扇区位置。LBA只用了一个参数,而C/H/S用了三个参数,两种方式可以相互转换。就象我们习惯用年月日来表示历史上的某一天,但其实也可以直接说今天是公元某某天。硬盘上的第一个扇区用C/H/S表示是0/0/1,0柱面0磁头1扇区,用LBA表示就是0号扇区。C/H/S和LBA之间有转换公式,但我很少会手工计算,我一般都利用Winhex帮忙,例如我想知道950/254/63对应的LBA是多少,我就在Winhex中选择转到扇区,如下图所示,输入C/H/S参数。

点击在新窗口中浏览此图片

    Winhex转到指定扇区后会同时显示显示C/H/S和LBA参数,如下图所示,Winhex告诉我们950/254/63对应的LBA参数是15277814。从LBA转换C/H/S也可用同样方法。

点击在新窗口中浏览此图片

    好了,掌握了这些基础知识,我们就可以来分析分区表了。分区表在硬盘的第一个扇区,0柱面0磁头1扇区,这个扇区也被称为MBR,主引导记录。MBR有512个字节,分为三部分内容,第一部分是个引导程序,446字节;第二部分是分区表,64字节;第三部分是结束标志,内容是55AA,2字节。如下图所示就是MBR的内容,绿色部分为分区表。

点击在新窗口中浏览此图片

    分区表有64个字节,可以表示4项分区,每项分区为16个字节。我们只要把16个字节的内容搞清楚了,分区表就不再神秘了。上图所使用的计算机硬盘分了四个区,如下图所示,是大家常用的分区方法,一个主分区,一个扩展分区,扩展分区内分了三个逻辑分区。

点击在新窗口中浏览此图片

    这四个分区在分区表中如何表现呢?我们从图中可以看出分区表中只有两项内容,分别是80 01 01 00 07 FE FF FB 3F 00 00 00 BD 08 FA 00,00 00 C1 FC 0F FE FF FF FC 08 FA 00 2C CD 05 01。这意味着MBR的分区表中只定义了两个分区,我们一个一个来分析,先分析第一个分区表项,80 01 01 00 07 FE FF FB 3F 00 00 00 BD 08 FA 00,我们先解释一下这16个字节的含义。

    第一个字节的内容是分区的引导标志,80表示是引导分区,00表示不是引导分区。第二,三,4字节表示分区的起始磁头,扇区,柱面,本例中三个参数分别是01 01 00,这代表第一个分区从0柱面1磁头1扇区开始。第五个字节表示分区类型,07表示NTFS分区,常用的类型有 0F(扩展分区),0B(FAT32),06(FAT16)。第六,七,八字节分别表示分区的结束磁头,扇区,柱面。注意,这里有些玄机,分区的起始扇区和结束扇区看起来用了一个完整字节,其实不是。由于C/H/S中扇区编号从1到63,因此用一个字节表示有些浪费,一个字节由八个二进制数组成,扇区编号只用了低六位,高2位给柱面用了。因此,表示柱面其实用了10个二进制数,其中高2位是从扇区参数中借来的。结合本例看看,六,七,八参数分别是 FE FF FB,分析一下,FE表示分区的结束磁头是254,FF拆为二进制是11111111,低六位是111111,用来表示分区的结束扇区,也就是说结束扇区是63。FF拆开后高2位11给了柱面用,也就是说分区的结束柱面不是FB,而是3FB,3FB等于十进制的1019。这下子我们明白了,第一个分区开始在0/1/1,结束在1019/254/63。

    看到这里有些朋友不禁有些疑问,分区表只用了八个字节就已经表示了起始和结束位置,为什么还需要后八个字节呢?其实后八个字节是用LBA方法来表示分区的起始位置和结束位置,这可不是多此一举,主要是因为CHS对大容量硬盘已经力不从心了。从刚才的参数分析我们可以看出来,CHS表示柱面的参数最多也就是10个二进制数,10个二进制数只能表示1024个柱面,1024柱面才多大?1024×7.8M=8G。看看,C/H/S无法定位8G以后的硬盘空间,这也是当初设计分区表时目光短浅,如果能用两个字节表示柱面,那现在就完全没问题了。由于C/H/S对现在的海量硬盘根本无用武之地,因此表示分区大小的重任就只能落在LBA的肩上了。

    继续分析分区表项的第九,十,十一,十二字节,这四个字节代表分区之前的扇区数,意思是从分区的起始到硬盘的第一个扇区之前有多少扇区,其实是很隐晦地告诉我们分区从哪里起始。本例中这四个字节的内容是3F 00 00 00,首先我们要高低位互换,四个字节的内容是00 00 00 3F,转为10进制是63,这意味着第一个分区之前的扇区数是63,也意味着第一个分区从63扇区开始。为什么?有人这么问,既然第一个分区之前有63个扇区,那第一个分区应该从64扇区开始才对呀?主要是因为LBA表示扇区是从0开始编号而不是从1开始,分区之前有63个扇区意味着分区之前的扇区是从0到62,那分区起始自然应该从63开始。

    分区表的十三,十四,十五,十六字节代表分区的大小,这四个字节表示分区的扇区数。本例这四个参数为BD 08 FA 00,高低位互换一下,分区的扇区数为00 FA 08 BD,换算为10进制为16386237。知道了分区起始在63,大小为16386237,结束位置也就知道了 63+ 16386237-1=16386299。用winhex转到16386299看看,如下图所示,16386299正是1019柱面254磁头63扇区。

点击在新窗口中浏览此图片

    对分区表的第一个项内容总结一下,这16个参数告诉我们,第一个分区从0/1/1开始,到1019/254/63结束,可以引导系统,分区类型为NTFS,分区起始的扇区数是63,分区大小是16386237扇区。以前有同学提过问题,分区为什么不从第二个扇区开始?主要是因为MBR太重要,操作系统不希望对此扇区进行太多访问,因此干脆把MBR所在的整个磁道都划到分区之外了,这就是为什么第一个分区从0柱面1磁头1扇区开始。

    分析了分区表的第一项,接下来来分析第二项 00 00 C1 FC 0F FE FF FF FC 08 FA 00 2C CD 05 01。第二项前八个字节中我们只要看第一个字节和第五个字节,知道第二个分区是扩展分区,不能引导,这就够了。其余6个字节用C/H/S表示分区的起始和结束就不用再看了,因为8G以后C/H/S已经失去作用了,第二个扩展分区结束的位置远远超过8G,C/H/S肯定无法表示了,主要看看后八个字节的LBA参数就可以了。扩展分区之前的扇区数是FC 08 FA 00,高低位互换后是00 FA 08 FC,也就是扩展分区之前的扇区数是16386300,扩展分区的起始是16386300扇区。扩展分区的大小是2C CD 05 01,高低位互换后再转为10进制是17157420扇区,因此可算出分区的结束是在16386300+17157420-1=33543719扇区。扩展分区的起点和终点都知道了,通过Winhex查询C/H/S参数,可知分区的起始是1020/0/1,结束在2087/254/63。

    分析了MBR的分区表后,我们发现分区表中定义了两个分区,一个是主分区,一个是扩展分区。看到这里,有人要问了,这个硬盘明明有四个分区,怎么在分区表中只定义了两项?到目前为止,只有C分区被定义出来,D,E,F分区在哪里定义呢?答案在扩展分区里,在扩展分区的第一个扇区,有一个分区表,分区表中将定义出主分区D,然后定义出下一个扩展分区。找到下一个扩展分区的起始扇区,又会看到一个分区表,定义出主分区E,然后又定义下一个扩展分区……这种依靠扩展分区的方法被称为链式分区表,其实使用扩展分区也是无奈之举,由于MBR的分区表只有4项,我们如果不使用扩展分区就最多只能使用四个分区。有了扩展分区之后,显然分区的数量就不受限制了,而且现在从分区表的角度来看,分区表中只有主分区和扩展分区,根本没有逻辑分区。我们使用的逻辑分区,不过是在扩展分区的分区表中定义出来的主分区而已。分区拓扑如下图所示。

点击在新窗口中浏览此图片

Tags:
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]