一天一点学习Linux之RHEL6开机故障排除

2011年01月05日 Linux基础 评论 6 条 阅读 19,792 views 次

在前面,我们学习过RHEL6的开机流程。今天我们就来看看这个开机过程中,各种环节出现问题后的解决办法。

回顾一下RHEL6的开机流程

1.加载BIOS的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备;
2.读取并执行第一个开机设备内MBR的boot Loader(grub等程序);
3.依据boot loader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序;
4.内核启动init
5.系统初始化:(/etc/init/rcS.conf exec /etc/rc.d/rc.sysinit)
6.init找到/etc/inittab文件,确定默认的运行级别(X) (/etc/init/rcS.conf exec telinit $runlevel)
7.触发相应的runlevel事件(/etc/init/rc.conf exec /etc/rc.d/rc $RUNLEVEL)
8.开始运行/etc/rc.d/rc,传入参数X
9./etc/rc.d/rc脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本
10./etc/rcX.d/中的脚本按事先设定的优先级依次启动
11.最后执行/etc/rc.d/rc.local
12.加载终端或X-Window接口

我们就根据上面的流程来制造问题,然后解决故障!

 

1、硬件故障解决

不用说,系统启动的时候就会报错,自检过不了,那么下面的所有步骤都是空谈。这个问题的解决办法就是找到硬件问题,然后排除。

2、GRUB故障解决

在破坏GRUB之前,我们先来看看/boot这个目录里面的文件是什么?
[root@yufei boot]# ls
config-2.6.32-71.el6.i686         initrd-2.6.32-71.el6.i686.img
efi                               symvers-2.6.32-71.el6.i686.gz
grub                              System.map-2.6.32-71.el6.i686
initramfs-2.6.32-71.el6.i686.img  vmlinuz-2.6.32-71.el6.i686
[root@yufei boot]# rpm -qf config-2.6.32-71.el6.i686 initramfs-2.6.32-71.el6.i686.img symvers-2.6.32-71.el6.i686.gz System.map-2.6.32-71.el6.i686 vmlinuz-2.6.32-71.el6.i686
kernel-2.6.32-71.el6.i686
kernel-2.6.32-71.el6.i686
kernel-2.6.32-71.el6.i686
kernel-2.6.32-71.el6.i686
kernel-2.6.32-71.el6.i686

我们看到,/boot这个目录里面,除了efi和grub目录以及initrd-2.6.32-71.el6.i686.img文件不是kernel-2.6.32-71.el6.i686这个软件包安装的,其它的都是。

[root@yufei boot]# rpm -qf efi/EFI/redhat/grub.efi
grub-0.97-68.el6.i686
[root@yufei boot]# rpm -qdf grub
/usr/share/doc/grub-0.97/AUTHORS
/usr/share/doc/grub-0.97/COPYING
/usr/share/doc/grub-0.97/ChangeLog
/usr/share/doc/grub-0.97/NEWS
/usr/share/doc/grub-0.97/README
/usr/share/doc/grub-0.97/TODO
/usr/share/doc/grub-0.97/menu.lst
/usr/share/info/grub.info.gz
/usr/share/info/multiboot.info.gz
/usr/share/man/man1/mbchk.1.gz
/usr/share/man/man8/grub-install.8.gz
/usr/share/man/man8/grub-md5-crypt.8.gz
/usr/share/man/man8/grub-terminfo.8.gz
/usr/share/man/man8/grub.8.gz

上面的这两个和grub-0.97-68.el6.i686这个文件有关了。哈哈,关于上面的命令,我们已经学习过man,如果有兴趣的朋友,可以打开来看看,学习一下。我只是提一下,rpm是RPM格式的软件包管理程序。

至于这个文件是怎么来的,我们后面再继续。
OK,我们知道上面的内容了,下面我们就来破坏GRUB,直接用rm -fr /boot/grub这个命令
[root@yufei boot]# rm -fr /boot/grub/
[root@yufei boot]# ls
config-2.6.32-71.el6.i686         symvers-2.6.32-71.el6.i686.gz
efi                               System.map-2.6.32-71.el6.i686
initramfs-2.6.32-71.el6.i686.img  vmlinuz-2.6.32-71.el6.i686
initrd-2.6.32-71.el6.i686.img
[root@yufei boot]# reboot

看到如下的提示,就进入不了系统了
grub1

下面就来看看如何解决这个问题
首先拿出你的系统光盘,放入光驱,设置从光盘启动,进入救援模式(如图)

1

2

3

4

5

6

7

8

9

因为我们知道删除了/boot/grub这个目录,所以,我们就来创建这个目录。如果说,我们不知道原因的话,最好到/boot/这个目录中看看,是不是少了什么?如何来建立这目录里面的内容呢?看下面的步骤:
首先chroot
chroot
这个时候,我们就在系统的环境中工作了,否则我们是在光盘的环境中工作。
我们看看我们的系统磁盘情况fdisk

下面就开始重新安装我们的GRUB了

grub-install

查看安装好的文件

grub

编写自己的grub.conf文件

建立grub.conf这个文件,并输入下面的内容(参考http://www.opsers.org/2011_01_1529.html中关于grub.conf的格式)
default=0
timeout=5
title Red Hat Enterprise Linux (New GRUB)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.32-71.el6.i686 ro root=/dev/sda1
        initrd /boot/initramfs-2.6.32-71.el6.i686.img

grub.conf

当然,你可能说,不知道文件名啊,写错了怎么办,一种办法,自己用笔记下,另外一种办法,就是用VIM的多窗口功能,如果不知道怎么用(参考http://www.opsers.org/2010_12_1499.html多窗口功能)       
到命令行模式下
:sp /boot

vim_sp

最后两个exit后就跳到重新启动菜单
reboot

重新启动后,要记得选择最后一个Boot from local drive(如果说,你在BIOS中设置从硬盘启动,就无所谓了)。这时候会有个关于SELinux的检测过程,时间稍长,随后再重新启动就能登陆系统了。
SELinux
这里顺便也演示了hiddenmenu这个的作用