catinsunshine 发表于 2006-10-17 14:32:52

修复GRUB恢复系统引导菜单解决方案(ML2.0篇)

周末想玩游戏《无冬之夜》,因电脑上只装有Magic Linux 2.0正式版(简写为ML),于是加装Windows XP以供游戏之用。结果,开机后GRUB系统引导菜单丢失,只能进入XP。哭呀,所有的工作资料都在Magic Linux上,真累了。上网查资料,看帖子,这方面的讨论不少,但最终都不了了之了。怒了,晚上奋战4小时,无数次重启失败后,OK了。现将方案整理如下,以飨网友:

修复环境::
1.Magic Linux 2.0正式版/Windows XP。
2.GRUB默认安装于Linux的MBR.
3.一块硬盘,分区如下(可通过ML2.0安装盘安装系统,在选择安装位置处查看):

分区            格式   类型   标志
/dev/hda1   ext3   P       原ML安装位置
/dev/hda2   N/A   E    L
/dev/hda5   swap    L   
/dev/hda6   fat32    L
/dev/hda3   fat32    P   BL   对应XP中的C盘

思路:
1.        用ML安装盘从光驱启动,加载原ML安装分区。
2.        用chroot命令将根从光盘目录转换到ML安装目录。
3.        重装GRUB
4.        编辑/boot/grub/grub.conf文件内容,设置正确参数,恢复GRUB引导。
步骤如下::
1.        重启电脑,按DEL键进入BIOS设置,更改为从光驱启动。
2.        用ML安装盘引导启动,进入ML安装界面,共有三种选项:A按回车安装系统B输入magic rescue进入紧急救助模式 C 输入magic test进入调试模式。此处进入紧急救助模式:输入magic rescue后回车
3.        数据加载后,进入提示符,依次输入以下命令(#后为解释内容):
第一阶段:加载原ML安装区::
cd /tmpfs      #进入/tmpfs目录
mkdir disk   #创建disk目录
mount /dev/hda1 /tmpfs/disk
#挂载原ML安装分区至/tmpfs/disk目录
#用/dev/hdaX表示原ML所在安装分区,我的是在hda1上,如果在其它分区将X替换为相应的值,如hda2,hda3,……
#如果是SCSI/SATA硬盘或者部分USB移动硬盘,将hdaX更改为sdaX,即:mount /dev/sdaX /tmpfs/disk,根据分区将X替换为相应的数值
chroot /tmpfs/disk
#用chroot命令将根转换到/tmpfs/disk, 以便重装GRUB至原安装区并进入/boot/grub分区更改grub配置文件
第二阶段:重建GRUB::
grub
#进入grub安装界面,提示符由sh#变为grub>
root (hd0,0)
#确认grub的安装分区。Root和括号间有空格。
#用(hdx,y)来说明:x指硬盘的数量,y指原ML所在的分区数减一。如果只有一块硬盘x为0,两块硬盘,第一块为0,第二块为1,多块硬盘,依此类推。如果原安装区在/dev/hda1则y为1-1=0;如果原安装区在/dev/hda2,则y为2-1=1;依此类推。我的原安装区在/dev/hda1,故此处输入root (hd0,0).
#详细参考资料可学习北南南北兄的文章,“在Linux系统中存储设备的两种表示方法”http://www.linuxsir.org/main/?q=node/127。
setup (hd0)
#重建grub,hdX参照上面说明,我的是hd0
quit
#一段提示后,见到succeeded后,输入quit退出grub,提示符返回sh#
第三阶段:修改/boot/grub/grub.conf, 校对参数::
cd /boot/grub   #进入配置文件所在目录
vi grub.conf
#此处会出现提示,说有/boot/grub/grub.conf.swap与grub.conf关联,不用管它,直接按任意键进入grub.conf文件内容修改。
#简单介绍vi操作:A按键盘上的Insert键,进入插入模式 B输入 :w前面是冒号,用于保存退出 C输入:q直接退出不保存。D用箭头键移动,用delete键删除内容。
#根据上面提到的内容,将其中的root(hdx,y)和/dev/hdax等所有错误的数值更改为正确的内容。以我的分区格式为例,原有的错误内容为root(hd0,1)和/dev/hda2,将所有的更换为root(hd0,0)和/dev/hda1.代码分析举例如下:
default=0   #0指默认从window启动,1从ML启动,取决于系统名称菜单的先后位置
timeout=10 #选择等待时间为10秒
splashimage=(hd0,0)/boot/grub/bootsplash.xpm.gz
#指定启动画面位置。原有错误为(hd0,1)更改为(hd0,0),因为我的ML在/dev/hda1分区。
title Windows #显示的菜单标题,可改为你想要的内容
      rootnoverify (hd0,2)
#rootnoverify作用等同于root。因我的XP装在/dev/hda3且只有一块硬盘,据上文分析,正确的应为(hd0,2).原错误内容为(hd0,1)
      chainloader +1
#用chainloader命令将启动控制权交给window的启动器,调用XP启动程序
title MagicLinux
      root (hd0,0)#更改同上
      kernel /boot/vmlinuz-2.6.15.3ro root=/dev/hda1 vga=791 splash=silent
#此处的root=/dev/had1原错误的为/dev/had2
      initrd /boot/initrd-2.6.15.3.img
后面的内容同理,不再赘述。
修改完毕后,输入:w 保存后退出。
exit   #退出chroot
exit   #退出linux rescue
reboot   #重启电脑,修改BIOS,更改为从硬盘启动。

至此,GRUB修复成功,成功进入系统。
后续问题:
进ML后window分区不能随开机自动加载,但可以用mount命令加载。记得有个解决办法,有空再查一下。

yjd333 发表于 2006-10-17 15:23:23

:mrgreen: 写得很详细。。。up

npcomet 发表于 2006-10-17 15:44:50

个人更建议使用grub for dos

jiangtao9999 发表于 2006-10-17 21:38:44

:roll:
grub for dos 这个办法已经老了。现在大家基本不需要 dos 了。
我连 dos 启动盘都没有了。

tanhitzq 发表于 2006-10-17 22:01:59

:roll:
grub for dos 这个办法已经老了。现在大家基本不需要 dos 了。
我连 dos 启动盘都没有了。

grub for dos 基本上都是包含grub for nt的!
我下载过的好多个grub for dos 都包含!

wood3 发表于 2006-10-18 12:33:49

其实最简单的方法就是用wingrub,好像是rh做的一个grub for dos的windows gui。
把这个安装了之后,向mbr写入grub,重启,就能看到原来linux的grub菜单。
启动到linux,再安装一遍grub,菜单就重建好了,windows下的都可以删除了。
我的机子就是这样作的,很方便,不用重新配置grub.conf。

npcomet 发表于 2006-10-18 15:34:25

:roll:
grub for dos 这个办法已经老了。现在大家基本不需要 dos 了。
我连 dos 启动盘都没有了。
taotao我们用的不止有dos还有windows

wongkin 发表于 2006-10-19 15:22:30

顶!
作个记号先!

razu 发表于 2006-10-20 23:48:14

非常感谢,我正需要这样的好文章!!

loverf 发表于 2006-10-21 10:05:49

如果重装xp丢失了启动菜单,或者在安装linux的时候,没有把 GRUB装到MBR导致不能引导linux的,可按照如下方法。

下载grldr文件放到C盘根目录下,再编辑boot.ini文件在最后加入一行:
C:grldr="Start Linux"

启动时从菜单中选择"Start Linux"条目就可以进入你的Linux了。我想,写成Redflag也应该可以吧。
除了这种方法,还有一种就是重装,方法是先装windows,然后务份,再装红旗。这样,win在恢复的时候,就不会把引导菜单替代了。
====================
最简单的方法,或者是你新装个Suse也行,呵呵。

catinsunshine 发表于 2006-10-21 18:11:51

如果重装xp丢失了启动菜单,或者在安装linux的时候,没有把 GRUB装到MBR导致不能引导linux的,可按照如下方法。

下载grldr文件放到C盘根目录下,再编辑boot.ini文件在最后加入一行:
C:grldr="Start Linux"

启动时从菜单中选择"Start Linux"条目就可以进入你的Linux了。我想,写成Redflag也应该可以吧。
除了这种方法,还有一种就是重装,方法是先装windows,然后务份,再装红旗。这样,win在恢复的时候,就不会把引导菜单替代了。
====================
最简单的方法,或者是你新装个Suse也行,呵呵。

1.grldr文件是什么文件?从哪下载?MagicLinux和红旗是有区别的。
2.红旗安装盘记得好像有GRUB恢复功能吧?MagicLinux安装盘没有GRUB恢复功能,与其花半个小时重装,不如按上面方法花5分钟改一下数值,不用破坏原有资料数据,省时省力一些。不用多装一些临时性软件,更环保一些,呵呵

genedemon 发表于 2006-10-23 20:55:23

好文!
如果win下面的分区都是ntfs也能这样修复吗?

npcomet 发表于 2006-10-23 21:51:35

可以 :P

genedemon 发表于 2006-10-23 22:31:12

其实最简单的方法就是用wingrub,好像是rh做的一个grub for dos的windows gui。
把这个安装了之后,向mbr写入grub,重启,就能看到原来linux的grub菜单。
启动到linux,再安装一遍grub,菜单就重建好了,windows下的都可以删除了。
我的机子就是这样作的,很方便,不用重新配置grub.conf。


那这位老大的方法是否也一样可行呢?
呵呵

qdzhuang 发表于 2006-10-24 12:33:18

grub-install /dev/hda就可以了,不必用grub
页: [1] 2
查看完整版本: 修复GRUB恢复系统引导菜单解决方案(ML2.0篇)