|
周末想玩游戏《无冬之夜》,因电脑上只装有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.3 ro 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命令加载。记得有个解决办法,有空再查一下。 |
|