自从MagicLinux(以下简称ML)1.2正式版发布,我的爱机里便多了一款非MS系统,并一直顺利的使用到前几天重装WINDOWS 2003系统。
我把GRUB安装在了/boot分区中,重新安装完WINDOWS 2003,漂亮的GRUB引导菜单便被单调的WINDOWS启动菜单覆盖了。与此同时,在用PQ调整分区的时候发现GRUB改写MBR后会使PQ报错。现在ML被覆盖的只是引导信息,因此,我想直接用WINDOWS启动菜单来引导ML。
于是,一头扎进网络寻找对策,最后发现了GRUB FOR DOS,从其官方文档和网友们的使用心得中我发现,问题似乎可以解决了。死马当作活马医,立即DOWN了一个GRUB FOR DOS中文版下来,安装、重启,发现WINDOWS引导菜单中多出一个GRUB FOR DOS的菜单项,选择进入,机器便在GRUB的引导菜单环境下了。
既然到了GRUB环境,那引导ML就只差半步了。喝口水,继续…
重启进入windows环境,进入GRUB FOR DOS的目录里面,一般为C:/BOOT目录,用文本编辑器(尽量不要用记事本)打开目录中的/grub/menu.lst,你会发现启动菜单的配置都在这。其各部分含义如下:
头部
timeout 10 //菜单倒计时长度 秒
default 2 //默认菜单项
fontfile (hd0,0)/boot/grub/fonts //字体
splashimage (hd0,0)/boot/grub/WinXP.gz //背景图片
接下来,是真正的菜单项
title Win9x_grub_bootdisk //菜单项显示的文字
kernel (hd0,0)/boot/grub/memdisk.gz //启动参数,下行同
initrd (hd0,0)/boot/bootdisk/boot.zip
解决问题的关键就在这个菜单项中,现在把它的启动参数提取出来仔细研究一下
kernel //指示了GRUB引导的内核引导模块的路径
(hd0,0) //说明指向了第一块硬盘的第一个分区(GRUB的主分区计数从0开始,非主分区从4开始,比如我的C盘为hda0,D盘为hda4)
/boot/grub/memdisk.gz //跟上面的参数连在一起指示内核引导模块的完整路径
initrd //指示内核的路径
知道了这几点,我们就可以改造这个菜单,让GRUB来引导ML了。
首先找到一个叫做explore2fs的工具,它可以让你在windows环境下读取Linux分区的数据,界面类似资源管理器。运行这个程序,它会把你硬盘中的Linux分区都显示在左边的列表中,注意,这里显示的盘符计数并不是你实际的盘符序号,可能不正确,比如,我的ML安装时,有3个分区:/boot分区(hda15),/swp分区(hda16),主分区(hda17),但显示hda12和hda14,/swp分区是不显示的。知道了这一点,只要找到原GRUB安装目录,把原来的启动菜单配置恢复即可。
我的GRUB安装在了/boot分区中,打开/hda12/grub/grub.config,里面的内容和一开始打开的menu.lst文件格式是一样的。这时只要把相应的菜单项复制到menu.lst中,保存、退出、重启,你会发现ML又可以启动了。
修复中,一点点的疏忽就可能导致修复失败,下面把一些注意事项总结到下面:
1、 GRUB的主分区序号是从0开始的,非主分区从4开始如:C盘为hda0,D盘为hda4。
2、 之前安装ML的时候GRUB应该安装在ML的引导分区,如果没有安装至此,应先将GRUB安装在ML的引导分区中,具体操作请查看GRUB官方说明
另:由于笔者水平有限,或许问题只能针对特定的环境,如有不妥之处,请各位不吝赐教。