用grub for dos 拯救MagicLinux

自从MagicLinux(以下简称ML1.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),但显示hda12hda14/swp分区是不显示的。知道了这一点,只要找到原GRUB安装目录,把原来的启动菜单配置恢复即可。

我的GRUB安装在了/boot分区中,打开/hda12/grub/grub.config,里面的内容和一开始打开的menu.lst文件格式是一样的。这时只要把相应的菜单项复制到menu.lst中,保存、退出、重启,你会发现ML又可以启动了。

 

修复中,一点点的疏忽就可能导致修复失败,下面把一些注意事项总结到下面:

1、  GRUB的主分区序号是从0开始的,非主分区从4开始如:C盘为hda0D盘为hda4

2、  之前安装ML的时候GRUB应该安装在ML的引导分区,如果没有安装至此,应先将GRUB安装在ML的引导分区中,具体操作请查看GRUB官方说明

 

 另:由于笔者水平有限,或许问题只能针对特定的环境,如有不妥之处,请各位不吝赐教。

标签:
文章分类 我跟饭碗的那些破事

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

点赞
如果您觉得很赞,我将非常乐意接受虚拟币的捐赠,以示您对我的肯定。

比特币钱包地址:
1PqpqA8FyH3NbfCrbcRd1YxQk3LEsSEYDV
莱特币钱包地址:
LRTdmovGGVEHCKWz7JdL9aiB7VZkuNycJf
站点勋章
网站统计