修复被grub覆盖的ntfs分区引导扇区

出自Linux Wiki

在2007年7月29日 (日) 08:59由Huohuliaisili (讨论 | 贡献)所做的修订版本

目录

前言

大概不少人有过把grub不小心安装到ntfs分区的经历,由于grub占据了ntfs分区的引导扇区,导致分区无法被系统正确识别,如果不采取有效措施,分区中的数据会丢失,造成损失。

要找回分区中的文件,可以使用各种数据恢复软件,如GetDataBack等,但需要很长时间,而且这些软件价格昂贵,所以这种方法虽然可行,但不推荐。

前提条件

在用grub覆盖了ntfs分区引导扇区之后,没有更改该分区中的数据,否则恢复可能失败。

ntfs分区引导扇区恢复原理

恢复原理其实简单,ntfs分区的引导扇区是有备份的,按照微软的说明,ntfs 3.5x在分区中间存有备份,而ntfs 4.0则把备份数据存在分区的末尾。grub安装时只覆盖了引导扇区的内容

至此,如果你掌握如何直接读取硬盘数据的方法,就可以跳过下面的所有内容,自己恢复这个分区的引导扇区了,如果你的方法比下文所述的简单,请把它贴在这里,谢谢!

===============================================================================
===============================================================================

huohuliaisili 添加: ( 欢迎指正 )

关于Windows系统的 Fat / NTFS 的问题,常规的解决办法还是使用Windows系统的修复控制台来做。

首先是讲一下 MBR 和 MBS 。

( MBR ) master boot record 主引导记录

  主引导记录是整块硬盘的第一个扇区。它位于零磁头零柱面1扇区。MBR的前446字节为引导操作系统的引导代码,接下来是64字节的主分区表,主分区表可以记录四个分区的信息,每个记录占用16字节。引导代码和分区表信息占用了MBR的510字节,而决定MBR是否可用的是最后的2字节。BIOS通过检测这2字节以确定MBR是否有效。   MBR所在的这个柱面(63个扇区)是被保留的。MBR后面的柱面才是实际可以分配使用的空间。通常我们会根据需要将这些可用空间划分为若干个分区,然后再为一个或者多个硬盘分区创建文件系统,使得操作系统能够识别。这样,我们才能够在这些空间里读写文件,当然也可以将操作系统安装到这里。

( MBS )master boot sector 主引导扇区

  主引导扇区是分区上的第一个扇区。   硬盘上的每个扇区的大小都是512字节。MBR的大小是512字节,MBS同样也是512字节。主引导扇区--分区上的第一扇区,它具有和MBR同样的引导操作系统的功能。前提是这个主引导扇区上有能够引导操作系统的引导代码。   我想,每个分区的第一个磁道应该都是被保留的(未验证是否正确,我猜测的)。


Windows修复控制台    简述引导故障的解决方法: Windows操作系统引导故障修复方法

  出现引导故障之后,如果此时重新安装Windows XP sp2到C盘,将引导覆盖掉,就可以正常的启动到windows XP sp2了。这种方法比较常用,也相对比较有效。但这种方法并不可取。正确的方法应该是从原安装光盘启动(可以是更高版本),在安装的时候,如果有提示是否升级安装不要升级安装,按Esc键。然后是看屏幕上的提示按 R 键进入修复控制台。控制台下都是用键盘操作的,是黑底白字的命令行。不要被这种陌生感吓坏。当进入windows系统修复控制台后,根据提示,输入阿拉伯数字并按Enter键选择要修复的系统,如果要修复的系统是在第一分区,按1并敲回车键就可以了。现在就可以使用敲命令的方式来修复系统了。控制台下只提供了少数的命令,这些命令不需要都会,掌握一两个有用的能够解决实际问题就可以了。现在先 help 一下,看看提供了多少命令?此时一屏显示不完,按Enter键继续显示。如果现在需要将MBR中的引导代码修改为能够启动到现在的正准备修复的系统的引导代码,输入 fixmbr 然后按 Enter 键。要退出并重启计算机,输入 exit 并按 Enter 键。   如果按照上面的方法修复引导装载程序之后,仍然无法引导系统。此时仍然是进修复控制台,不同的是先 fixboot 重建引导区,然后再 fixmbr 。最后 exit 退出并重系统之后就应该能正常启动系统了。   fixboot 这条命令是向第一主分区的第一扇区写入引导代码,告诉系统启动时将从哪个分区找引导和配置文件。而fixmbr的作用是将第一主分区第一扇区的446字节的引导代码写到MBR的前446字节。   如果你想将重写windows的引导到主引导扇区,只需要fixboot就可以了。如果MBR中的引导是GRUB的,想从第一硬盘第一扇区载入引导信息,只需要 chainloader (hd0,0)+1  ; 如果想从第二硬盘第三扇区载入引导信息,只需要 chainloader (hd1,2)+1  。 其中的 +1 表示的是第一扇区。

请看拙文: 备份/恢复MBR和分区表以及无备份修复MBR和分区表错误,浅谈引导故障和分区方案。 http://www.linuxsir.org/bbs/showthread.php?t=303559

修复方法

仍可找到可以访问该硬盘的Windows系统

如果损坏的不是Windows系统的分区,或可以把硬盘插在其它可以进入Windows系统的计算机上并访问,就可以使用这种方法。

用diskprobe.exe修复

本方法使用随Windows 2000/xp等一同提供的diskprobe.exe修复分区,这个文件在安装光盘的 support/tools/support.cab 中,把跟diskprobe的几个文件解到一个文件夹下,就可以用了。

  • 执行diskprobe.exe,选择DRIVES, Physical Drive,找到要修复的磁盘,双击它,在下面的框中取消Read Only,再点右面的Set Active按钮,会发现上面的Active Handle变成PhysicalDriveX(X=0,1,2,...)了,点击OK
  • 在SECTORS菜单中, 选择Read,在STARTING SECTORS输入0,在Number of Sectors输入1, 点 Read,就进入了MBR。你可以在右边的ASCII文本找到类似Invalid Partition Table....(没有在MBR安装Grub)或有关grub的一些文字,这可以确认你已经处于MBR
  • 查找要恢复的分区,这一步取决于要修复的分区是主分区还是逻辑分区。
    • 如果出现问题的是主分区,那么需要的操作相对简单
      • 单击菜单View中的Partition Table,在标有partition table index的标签中,用旁边的滚动条找到并选中有问题的分区,双击它。在左下角有Relative Sectors的值,记录下这个值。然后单击它旁边的"GO"
      • 在View菜单中选择Bytes,看一下是不是在右边有NTFS字样,下面grub什么的,如果是,那么这就应该是损坏的引导扇区所在了,最好把它存下来,以防万一。接着看下面的步骤。
    • 如果出现问题的是逻辑分区,按下面说的做。
      • 单击菜单View中的Partition Table,在标有partition table index的标签中,找到有问题的分区所在的扩展分区(左边的System ID框会显示Extended),然后可以按Next到下一个分区,也可以用双击继续选择,用Go转移,直到找到有问题的ntfs分区。找到后再双击,到这个分区里面。
      • 记录Current Sector, Relative Sector, Total Sectors,再点Go,进入引导分区,记录Boot Sector(在窗口的标题栏),选择View->Bytes,看一下是不是在右边有NTFS字样,下面grub什么的,如果是,那么这就应该是损坏的引导扇区所在了,最好把它存下来,以防万一。
  • 到VIEW->"NTFS bootsector",如果你是NT 4.0(或以上,现在基本都是这个)选"Volume End",如果是NT V3.5x 选 "Volume Middle"
  • 到VIEW->Bytes看一下这是不是NTFS的引导扇区,应该有NTFS,还有"A disk Read error occurred..."的字样。确认后在SECTORS菜单选Write,在Starting Sector to write Data填记录下的Relative sectors(主分区)或boot sector(逻辑分区),再按Write按钮。
  • 正常的话,分区已经修复,重新启动后看看效果吧。

在Linux下修复

这应是一种理想的解决方案,但我还不了解是否有这样的软件,要能实现上面diskprobe的功能,如果您知道这方面的内容,请补充。 ////////////////////

可以用dd直接读取备份扇区的内容到临时文件,或者直接恢复。备份扇区的地址需要由分区信息进行计算。 分区信息可以由fdisk -l获得。

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

不能进入Windows,在Dos下修复

在这种情况下,软件的选择不多,可以用diskeditor修复,这需要你了解磁盘分区的知识,然后按照前面的原理分析具体操作过程。

估计debug是最简单而可靠的工具^_^

参考资料

个人工具
简体繁体转换