您的位置:首页 > 其它

GRUB引导故障排除(转)

2009-12-20 07:19 357 查看
GRUB引导故障排除

在工作和教学中,经常发现同事和同学在碰到Linux启动直接进入GRUB界面但没有启动选单(只剩下一个“grub>”提示符)的状况,这时就认定系统已经没救,开始重新安装,甚至包括一些接触Linux已久的人也是如此。其实出现此种状况,只要了解Linux系统引导过程中GRUB的作用以及工作流程,就非常容易解决。
Linux系统在启动过程中,首先是固件(PC上大多是CMOS/BIOS)的物理检测,诸如检测系统的显卡、CPU和硬盘等,可从系统按下电源后看到此检测信息;检测无问题,将读取硬盘的MBR(主引导记录)中的自举程序,Linux中常用的自举程序如LILO和GRUB。自举程序GRUB在系统启动期间只有一个作用,就是载入内核;内核在引导期间有两个主要的作用,一个是驱动系统硬件,另一个将启动系统进程init;init进程将读取其配置文件/etc/inittab完成后续所有的引导。
所以其实GRUB在引导期间只有一个最重要的作用,就是载入系统内核。那么GRUB在引导期间到底是如何执行引导的呢?让我们来看以下的GRUB配置文件/boot/grub/grub.conf(一定要注意/etc/grub.conf只是此文件的一个软链接)片断示例:
title Thiz Linux Server 7.0
root (hd0,5)
kernel /boot/vmlinuz-2.4.22-3Thiz ro root=LABEL=/
initrd /boot/initrd-2.4.22-3Thiz.img
此段是加载GRUB的最重要的设置段,其中“title”段指定了GRUB引导界面系统的标题;“root”段指定了/boot分区所在的位置;“kernel”段指定了内核所在位置(kernel /boot/vmlinuz-2.4.22-3),内核加载时权限属性为只读(“ro”),以及指定根分区所在位置(root=LABEL=/);initrd指定了Linux镜像文件所在位置。
当Linux系统中GRUB配置文件/boot/grub/grub.conf内容修改错误或损坏时,系统启动后会自动进入GRUB命令行模式(“grub>”),最常见的原因无外乎两个,一是GRUB配置文件中此三段修改错误;二是GRUB配置文件丢失。(还有少数原因,如内核文件或镜像文件损坏、丢失,/boot目录误删除等)此时可以使用如下几种方法进行恢复。
存在GRUB配置文件备份
如果存在GRUB配置文件备份,那么比较省事的办法就是对其进行备份恢复,可以按如下方法进行:
◆ 把安装盘的第一张放到光驱,然后重新启动机器,在BOIS中设定系统用光驱引导;
◆ 等安装界面出来后,按F4键(不同Linux版本此快捷键可能稍有不同,如即时Linux是按F5键盘),进入“boot:”命令提示行输入命令“linux rescue”,进入Linux维护模式;
◆ 一系列键盘以及几项简单的配制(如设置键盘等),这里不多做介绍,然后会出现如下字符:
sh#
此时就可以在此命令行下执行操作了:
sh#cp /backup/grub.conf.bak /mnt/sysimage/boot/grub/grub.conf
假设备份文件为/backup/grub.conf.bak ,因绝大多数Linux光盘修复模式中会将硬盘系统的“/”分区chroot到“/mnt/sysimage”处(在之前的配制中可以看到提示),所以拷贝的目标为“/mnt/sysimage/boot/grub/grub.conf”而非“/boot/grub/grub.conf”
◆ 退出此模式,重启即可。
内核文件、镜像文件、/boot目录等文件损害或丢失,也可以使用此种方法修复。
如果没有GRUB配置文件备份
如果没有备份GRUB配置文件,或者想通过此试验更多了解GRUB的引导过程,可以利用GRUB强大的交互功能,采用如下方法:
在“grub>”命令行下可以进行如下操作:
◆ 查找/boot/grub/grub.conf分区所在目录可用如下命令:
grub> find /boot/grub/grub.conf (hd0,5)
需要注意的是,将得到grub.conf配置文件所在系统的分区,(hd0,5)即表示它在分区hda6。
◆ 查看grub.conf文件错误可用如下命令:
GRUB>cat (hd0,5)/boot/grub/grub.conf
需要注意的是,可以查看到配置文件到底什么地方出现了错误,以便进入后修改。
◆ 指定/boot分区可用如下命令:
root (hd0,5)
需要注意的是,从此步骤开始,即为本文前面所提到的GRUB配置文件中的主要引导步骤,只是一般都是系统读取GRUB配置文件引导,出现问题时我们可以手工指定引导。
◆ 指定内核加载可用如下命令:
kernel /boot/vmlinuz ro root=LABEL=/
◆ 指定镜像文件所在位置可用如下命令:
initrd /boot/initrd-2.4.22-3Thiz.img
◆ 从/boot分区启动可用如下命令:
boot (hd0,5)
此时,即可正常启动,实际上,以上步骤就是执行了GRUB引导期间加载grub.conf文件的步骤,当系统正常引导后将GRUB配置文件修改正确后即可。以上这个方法也可以用于测试新编译的内核。对此故障排除的了解可以加深对GRUB引导以及Linxu系统引导的了解。
此外,还有一种情况是在安装Windwos时,把GRUB从MBR上清除,启动后根本连GRUB的影子都看不到。如出现此问题,可以进入Linux维护模式,执行如下命令:
sh#grub-install /dev/had
之后退出重新启动系统,即可实现GRUB对Linux和Windows的多系统引导(此情况假设将Linux安装于第一块IDE硬盘上,若安装于第二块硬盘或SCSI硬盘上,请做相应更改)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: