Install/GRUB
周末想玩游戏《无冬之夜》,因电脑上只装有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系统中存储设备的两种表示方法”。
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修复成功,成功进入系统。