+ -
当前位置:首页 → 问答吧 → 郁闷,该死的gurb,请教huohuliaisili,和Thruth帮忙看看

郁闷,该死的gurb,请教huohuliaisili,和Thruth帮忙看看

时间:2007-03-22

来源:互联网

我以前一直使用wingrub安装grub在c盘,通过xp的boot文件引导grldr,然后引导suse,今天看了 huohuliaisili想验证一次grub引导的问题,使用yast 引导管理器不小心写了两次 hda的mbr,启动系统选择windows1的仍然启动到grub引导菜单(见后面menu。list),结果系统无法引导xp系统,而且在dos下无法查看c盘内容,但在linux 里面加载c盘,可以查看内容,而且用fdisk/mbr 好像无法清除 以前都
是写一次,fdisk/mbr后,再用yast 引导管理器重新没有一点问题,
后来我把hdc这个硬盘在cmos里面关闭了,重新启动先生 grub hard errors,fdisk/mbr无法清除,看附图,貌似安装到 custom boot partition (/dev/hda)
郁闷!



大家看看帮忙如何恢复阿。。。。。。。

两个硬盘 hda,hdc
hda:hda1(主分区,fat32,安装xp),had5,hda6,hda7(扩展分区,fat32)
hdc:hdc1,hdc5,hdc6,hdc7(主分区,fat32),hdc8(linux分区, /home),hdc9(linux分区,/) ,hdc10(swap)

menu.lst
代码:
# Modified by YaST2. Last modification on 三 3月 21 19:31:40 CST 2007
default 0
timeout 8
##YaST - generic_mbr
gfxmenu (hd1,8)/boot/message

###Don't change this comment - YaST2 identifier: Original name: windows 1###
title windows 1
 rootnoverify (hd0,0)
 chainloader (hd0,0)+1

###Don't change this comment - YaST2 identifier: Original name: windows 2###
title windows 2
 rootnoverify (hd0,0)
 chainloader (hd1,0)+1

###Don't change this comment - YaST2 identifier: Original name: floppy###
title Floppy
 rootnoverify (hd0,0)
 chainloader (fd0)+1

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- 

###Don't change this comment - YaST2 identifier: Original name: 2.6.18.8-181-default###
title 2.6.18.8-181-default
 root (hd1,8)
 kernel /boot/vmlinuz-2.6.18.8-181-default
 initrd /boot/initrd-2.6.18.8-181-default
huohuliaisili的帖子内容

代码:
grldr文件第第一主分区的情况:
grldr 最先从第一分区找 /boot/grub/menu.lst ,接下来是第二分区...
.......如果没有找到就找 /grub/menu.lst 同样也从第一分区往后面分区找...
.......


GRUB安装在MBR的情况:
读取MBR中的引导代码,从第一个活动分区启动,找到grub配置文件...

GRUB安装在任意主分区的第一扇区,且此时此主分区被设为活动分区。( fdisk -l **)
读取MBR中的引导代码,从第一个活动分区启动,找到grub配置文件...
如果MBR中没有引导代码,就无法启动。

GRUB安装在逻辑分区上的情况
读取MBR中的引导代码,从第一个活动分区启动,找到grub配置文件。屏幕上出现引导菜单。通过手工选择实现读取指定的逻辑分区上的第一个扇区,通过其中的引导代码启动系统。
请教huohuliaisili,安装grub的时候如何控制把grldr安装在那个分区,呵呵
上传的图像
aaa.jpg (44.0 KB, 7 次查看)

作者: bigbighill   发布时间: 2007-03-22

首先:
  这个menu.lst文件有问题。多块硬盘启动需要先map 。例如 :
map (hd0) (hd1)
map (hd1) (hd0)
有第三块或者更多硬盘的亦类似。
当然,改bios设置中的默认启动也是可以的。按主板热键也行。

然后是 SLES/opensuse 安装grub到分区,一般就安装在 root 根分区或者 boot 分区。安装好后,备份这个分区的第一个扇区(引导区)。 dd if=/dev/hda3 of=/hda3_512(输出的文件名) bs=512 count=1 。这个备份文件就含有引导操作系统的代码,它是能够用来启动系统的。备份MBR亦类似。dd命令强大且危险,千万不要手快。
grub 的 chainloader 命令可以指定装入某个分区的第一个扇区,然后 boot 启动。也能装入文件,例如 MBR 的备份文件以及 引导区的备份文件。改 menu.lst 文件可以实现。
ntldr 也可以。改 c:\boot.ini 文件可实现。
这样就初步解决了引导的问题。

恢复引导区:
  从备份文件恢复引导区。
  恢复 MBR :  # dd if=/mbr of=/dev/hda bs=1 count=512
上面备份恢复方法是我抄来的,但没有失手过。重在实用。
  以前安装 solaris 就遇到需要从备份恢复 MBR 的情况。x86的solaris需要一个主分区,默认将引导装在MBR,并改此主分区为第一活动分区(我的为第二主分区)。重装windows后,MBR被改写。此时是通过 ntldr --> C:\boot.ini --> C:\MBR_hda2 --> 启动第二主分区上的solaris 呢,还是直接将 MBR 改回到先前的呢?我选择了后者。

会备份,会恢复,会灵活的设置引导的问题。多系统并存就差不多过关了。

Linux 中的 fdisk 需要会灵活使用以下命令操作。
fdisk /dev/hda
m --> 帮助
p --> 打印分区表
a --> 指定/取消 活动分区
t --> 改变分区类型
n --> 创建一个新的分区
d --> 删除一个分区
l / L --> 列出支持的分区类型及对应的id
q --> 退出但不保存
w --> 退出并且保存

什么时候会用到 Linux 中的 fdisk ??
在分区表出错的情况下需要重建分区表但不格式化(创建文件系统),在活动分区需要手动修改的情况下(例opensuse-10.2-GM-x86_64写引导装载程序到MBR,无法引导)。

正是因为会了这些,所以,我从第一次在物理硬盘上安装非win的系统到现在的一年多的时间一直没有因安装非win系统而丢失过数据。

最后:
fdisk/mbr 慎用或者不用。听说病毒改了MBR用此法可以。
只有一个主分区的情况下,用此命令无妨。若有多个主分区,用此方法不一定能解决问题。

作者: huohuliaisili   发布时间: 2007-03-22

引用:
然后是 SLES/opensuse 安装grub到分区,一般就安装在 root 根分区或者 boot 分区。
经我测试,suse和mandrake 好像他们安装grub的时候一般默认都市安装在root分区或者boot分区(我这种硬盘情况),好像grub 的grldr无法使用c:\boot\grub\menu.lst菜单,一直使用的是/boot/grub/menu.lst (这里的/是linux的根分区),以前我在linux控制台里面,运行
代码:
root (hd0,0)
setup (hd0,0)
也是不行的,其实这个原理应该和 yast引导装载程序安装grub到mbr一样的原理,我以前有时运行两次2上述代码,同样出现这样的问题,感觉第二次安装grub时候,好像并没有把以前安装在mbr的引导grub的代码覆盖而好像是直接写在后面的,从而导致现在使用fdisk/mbr好像无法清除grub,真郁闷,其实就是因为有两个硬盘,我一般安装的suse的时候默认选择不安装grub,一般在xp下面使用 boot.ini 里面添加 c:\grldr="Start Grub"引导suse

最妖怪的是,在dos下面无法查看hda的c盘文件(d,e,f没有问题),但在suse下面一点问题度没有,
后来我用yast引导程序装载器恢复mbr,然后重新选择 boot from mbr,安装结束后,重新打开yast引导程序装载器,仍然是如上图所示

作者: bigbighill   发布时间: 2007-03-22

经过测试,
grub引导代码是被安装到了c盘的首扇区,破坏了引导xp的代码,不知道如何恢复这一分区代码,郁闷!!!!

作者: bigbighill   发布时间: 2007-03-22

引用:
作者: bigbighill
经过测试,
grub引导代码是被安装到了c盘的首扇区,破坏了引导xp的代码,不知道如何恢复这一分区代码,郁闷!!!!
windows系列引导故障修复:
  放入安装光盘(版本高于或等于当前系统版本),从光盘启动。安装过程中有提示要按 R 键的,按R键进控制台。接着是黑底白字的界面,提示:选择要修复的系统并按Enter键。此时例如输入数字 1 ,并按回车键。现在就可以运行一些命令了。
  先 help 一下,看看都有些什么?一屏显示不完,可以按空格或者回车键。
  如果需要修复引导装载程序,可以输入 fixmbr 并按回车键。此时MBR中的那446字节的引导操作系统的代码被改为 Windows 的 nrldr 。如果用的是 vista ,会改为相应的。这时输入 exit 并回车,就是退出并重启了。
  重启后通常就能够使用 windows 的引导装载程序启动 机器了。
  还有一个 fixboot 。这条命令用的时候不多,我猜它的意思是重新创建引导区。在网上看到说用上面的 fixmbr 后如果还是不能修复引导,可以在控制台下先 fixboot ,然后再 fixmbr 。
  有兴趣可以在虚拟机中测试一下。
  Windows这个修复引导装程序的工具很笨。它只是重写了MBR中的那446字节的引导代码,而不考虑主分区表中的活动分区是第一主分区或者第二主分区,或者第三、第四主分区。因为机器启动的时候能够启动的只有主分区,只认主分区,扩展下的逻辑不在此列。
  如果 windows 安装在第一主分区,现在修复的MBR中的引导代码也是windows的。接下来就看第一活动分区的标识是在 1 2 3 4 这四个分区中的哪一个。如果 1 被标识为活动分区,此时从第一主分区启动,然后顺利的找到第一主分区 --> C盘根目录下的引导文件(就是那几个隐藏的文件)。此时,屏幕上会出现如同 C:\boot.ini 文件中的启动菜单。如果只有一个启动项,启动菜单一闪而过,眼睛来不及看清。如果有多个启动项,此时在屏幕上能够看到 timeout 的信息。如果 timeout=0 ,仍然会一闪而过,直接从 default 默认的启动。如果 timeout>=1 ,此时可以用上下光标键选择,此时有键盘操作后timeout的作用失效。直到选定了启动项,选定了要从第几个启动,按下 Enter 键之后,才会进入真正的启动操作系统的过程。
  比如,C:\boot.ini 文件中有一条记录 C:\grldr="GRUB"。此时选择此项并按回车键,就将 C:\grldr="GRUB"装入,现在控制权就交给了grldr 。如果此时的启动项有故障,系统可能挂起,按Ctrl+Alt+Del重启。甚至死机,键盘任意键无反应;或者小键盘区的 Num Lock 和 Soroll Lock 这两个灯会不停的闪烁,键盘任意键无反应。现在能做的只有 Power 或者 reset 。
  同上,又如 C:\hda9_512="从hda9的引导区备份文件512字节读取引导信息尝试启动系统" 。英文双引号中的内容可以修改,它是只在屏幕上显示一下,提示一下操作者。

  如果 windows 安装在第一主分区,现在修复的MBR中的引导代码也是windows的。接下来就看第一活动分区的标识是在 1 2 3 4 这四个分区中的哪一个。如果2标识为活动分区,此时系统可能会挂起。

这些是 windows 引导过程,以及解决方案和原理。是我这一年多的猜测和总结。

作者: huohuliaisili   发布时间: 2007-03-22

其实以前我出现这次同样错误,都是手快,写了两次mbr,就会出现这种情况,后来我一直修改boot文件引导grldr,昨天我看了讨论grub的问题,所以我再次测试一次,又出现这种问题,今天上午我决定用xp光盘启动安装修复引导,后来文件拷贝结束,重新启动系统(以前经常使用这种方法修复引导),居然grub仍然没有被清除,当时一时心急,format c:/s ,ghost恢复xp系统,重新启动,仍然出现grub没有清除,再次fdisk/mbr 修复,启动xp成功!
现在还有几个疑问:
1、用xp光盘安装系统重新修复xp后启动,出现grub没有清除的时候,如果直接 fdisk/mbr也许可能修复引导xp系统。
2、suse的yast引导装载器 安装 grub的时候,不知是否生成grldr 文件?

作者: bigbighill   发布时间: 2007-03-22

引用:
作者: bigbighill
其实以前我出现这次同样错误,都是手快,写了两次mbr,就会出现这种情况,后来我一直修改boot文件引导grldr,昨天我看了讨论grub的问题,所以我再次测试一次,又出现这种问题,今天上午我决定用xp光盘启动安装修复引导,后来文件拷贝结束,重新启动系统(以前经常使用这种方法修复引导),居然grub仍然没有被清除,当时一时心急,format c:/s ,ghost恢复xp系统,重新启动,仍然出现grub没有清除,再次fdisk/mbr 修复,启动xp成功!
现在还有几个疑问:
1、用xp光盘安装系统重新修复xp后启动,出现grub没有清除的时候,如果直接 fdisk/mbr也许可能修复引导xp系统。
2、suse的yast引导装载器 安装 grub的时候,不知是否生成grldr 文件?
ghost恢复不会改引导区,不改mbr。这就是为什么当grub覆盖了nrldr的时候,使用ghost恢复C盘仍然改变到先前的windows的启动画面的原因。
fdisk/mbr 是将 mbr 中的引导代码清空(我猜的)。这条命令我只在 DOS 中使用过。
一个问题的解决方法本不是一定的。问题的解决在于使用者的思路和经验。当然,其中也可能做一些不必要做的事情,只要不影响硬盘上的数据且不造成硬件故障都是可以重新再来的。

suse的yast引导装载程序(设置工具) 安装 GRUB 的时候,不生成grldr文件。只在当前(修复的)suse系统的 /boot/ 目录下生成正确的 /boot/grub/ 目录(含目录下的文件)。并且不更改 menu.lst 这个文件。

总结:
  引导代码指定了要找到某个分区上的某个目录下的引导装载程序文件及配置文件,然后再根据配置文件中的信息引导系统。当然,GRUB 引导装载程序可以用编辑模式或者命令模式启动系统。而windows的引导装载程序没有提供类似的功能。

作者: huohuliaisili   发布时间: 2007-03-22

关于 grub的安装,有详细的介绍
http://www.linuxselfhelp.com/gnu/gru...b_3.html#SEC10

作者: bigbighill   发布时间: 2007-03-23