Install/GRUB

来自MagicLinux 百科
跳到导航 跳到搜索

周末想玩游戏《无冬之夜》,因电脑上只装有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修复成功,成功进入系统。