帮人整理一台IBM X60笔记本上的windows系统,不曾想变成了配置GRUB的问题。试了许多办法后终于解决,把整个解决过程记录了一下,以备将来之用。
这台机器装了双系统,里面有个Linux。重装上海*版本的Windows后,一切正常,但没想到主盘的MBR被覆盖,无法进入Linux了。
好几年没有弄linux了,只知道linux的引导程序叫LILO,从google上搜了一通未果,又问了个朋友,原来现在主流的引导程序都是GRUB。
再搜GRUB的解决方案,得到的标准答案是用REDHAT的第一张安装盘启动后进行修复。
快速从网上下载REDHAT 企业版4.0的第一张盘,约100多兆,刻盘。
启动机器后,进行linux rescue模式,系统不停提示救援文件的位置,无法到达linux的命令行状态,可能是机器中的linux版本不一致吧。
再上网,找到还有GRUB4DOS 0.4.2和WINGRUB,是sf.net的开源软件,下载后把GRUB4DOS解压到c:\boot\grub目录下,不会用。为了方便,又安装wingrub,在tools菜单中找到写MBR的项,也不会用,就先用默认配置吧,写入MBR,重启。
无法启动,连windows都无法进入,找来番茄花园的安装盘,右侧顶端有一项修复MBR的小工具,进入Windows XP。
在wingrub中,将MBR内容移除。这样引导权又交给windows,查找c:\boot.ini文件来引导。按照grub4dos的说明,在Boot.ini文件中加上1行。重启。
Windows重新OK,但选择linux后,弹出一个GRUB默认的长菜单,每一项都无法进入。
find and load CMLDR of Windows NT/2K/XP
find and load IO.SYS of Windows 9x/Me
find and boot Mandriva with menu.lst already installed
find and boot Linux with menu.lst already installed
commandline
floppy (fd0)
back to dos
reboot
memdrive duplicated from floppy image file (hd0,0)/sbm.bin
memdrive based on win98 partition (hd0,6)
按c进入命令行状态,出现grub>提示符。
开始利用google搜索出的解决办法启动linux,首先找到linux安装在哪个分区上。最后,确认为(hd0,2), 在grub提示符键入的第一命令是:
再输入kernel的命令,在根目录下找到vmlinuz-2.4.18-3文件,grub命令行中支持TAB键非常方便,可以帮你查找指定目录中的文件名,但kernel后面的root参数把我难住了,一般的root=/dev/hda1到root=/dev/hda6,试了一遍,都不行,启动到一半就提示找不到什么init文件。
突然,想起来以前的linux的grub是正常的,找到grub.conf后,原来kernel这一行是这样的:
看来这个本本是SATA硬盘,一直用IDE盘,而且内核34与2.4.18的写法也不一样,在2.4.18中为/dev/hda6,是否在34内核中将STAT盘模拟为SCSI盘?
好了,可以进入久违的LINUX了。
尝试grub-install来修复MBR,但在填后面这个设备参数时还是不行,从/dev/hda到/dev/sda都试了,还是不能将GRUB重写到MBR中。
无奈,进入windows,将root、kernel、boot等三行,追加到c:\boot\grub\menu.lst文件中,双系统启动恢复了。
小结:
首先的控制权windows,引导配置文件是:c:\boot.ini
选start grub后,交给grldr,由grub查找c:\boot\grub\menu.lst文件来启动。
这种方式的安装虽然解决了问题,但不同于通常的办法。一般先由linux的grub获得控制权,然后根据菜单选择,直接进入windows和linux,我这种办法麻烦了一些,但也解决了问题,懒得再深究了。
看来问题很小,但修复起来还真需要些技巧,主要原因是每个机器上分区的配置不一样,启动参数都需要调整是最大的麻烦。
另外,还遇到一个小问题,此IBM隐藏了1个分区,linux用了2个分区,由于主分区不能超过4个,所以windows只能用一个C盘了,无法用D盘了。看来哪天还要用PQ将IBM的隐藏分区删除掉!但是否能linux造成影响?