发布时间:2012-09-08 00:41:43作者:知识屋
在前面,我们学习过RHEL6的开机流程。今天我们就来看看这个开机过程中,各种环节出现问题后的解决办法。winxp故障
回顾一下RHEL6的开机流程
1.加载BIOS的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备; win2003故障
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
看到如下的提示,就进入不了系统了
下面就来看看如何解决这个问题
首先拿出你的系统光盘,放入光驱,设置从光盘启动,进入救援模式(如图)
[!--empirenews.page--]副标题[/!--empirenews.page--]因为我们知道删除了/boot/grub这个目录,所以,我们就来创建这个目录。如果说,我们不知道原因的话,最好到/boot/这个目录中看看,是不是少了什么?如何来建立这目录里面的内容呢?看下面的步骤:
首先chroot
下面就开始重新安装我们的GRUB了
查看安装好的文件
编写自己的grub.conf文件
建立grub.conf这个文件,并输入下面的内容(参考中关于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
当然,你可能说,不知道文件名啊,写错了怎么办,一种办法,自己用笔记下,另外一种办法,就是用VIM的多窗口功能,如果不知道怎么用(参考多窗口功能)
到命令行模式下
:sp /boot
最后两个exit后就跳到重新启动菜单
重新启动后,要记得选择最后一个Boot from local drive(如果说,你在BIOS中设置从硬盘启动,就无所谓了)。这时候会有个关于SELinux的检测过程,时间稍长,随后再重新启动就能登陆系统了。
哈哈,第一个故障成功排除!
3、boot的故障解决
这里boot的故障指的是/boot目录里面的文件被误删除或者是其它的破坏行为。
我们也知道/boot这个目录里面,除了efi和grub目录以及initrd-2.6.32-71.el6.i686.img文件不是kernel-2.6.32-71.el6.i686这个软件包安装的,其它的都是。那么我们就来把其它的全部删除,看看故障情况吧。
[root@yufei ~]# cd /boot
[root@yufei boot]# rm -f 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
[root@yufei boot]# ls
efi grub initrd-2.6.32-71.el6.i686.img
哈哈,只有两个目录和一个文件了。那你们重新启动机子reboot
还是一样,用光盘进入救援模式(参考第2个故障)。
当然,我们还是需要chroot /mnt/sysimage
因为我们要安装内核的相关文件,所以,我们要把光盘里面的kernel-2.6.32-71.el6.i686这个文件安装在系统上,那如何安装呢?
先挂载光盘
mount /dev/scd0 /mnt/hgfs
这里随便也说一下,在救援模式下chroot后,光盘名不是cdrom了,而是scd0
挂载上光盘后,我们进行kernel的重新安装
注意,一定要在后面加上个–force参数(强制)
安装好后,再看/boot目录,是不是已经有了我们想要的东东了
最后两个exit后就跳到重新启动菜单,两次重新启动后,就能正常登陆了。
注意:安装后,会在grub.conf中增加新的启动选项,如果不需要可以自己删除。哈哈……
这里你会不会有什么启发呢?对了,就是上面的grub.conf文件如果你不会写的话,尝试一下用安装内核的办法增加内容,也是个不错的选择,但需要自己先创建这个文件,然后才能写。
虽然一般情况下,没有这个文件,系统同样的启动,但遇到一些特殊应用的时候,系统就启动不了了。
initramfs和initrd的区别请参考(RHEL6由initrd走向initramfs
)
但是奇怪的是:在RHEL6中,还是用mkinitrd这个命令来创建initramfs,不知道为什么会这样?(如果有明白的朋友,可以留言交流)
现在我们来删除这个文件(建议备份)。
要想重新创建这个文件其实很简单就是用mkinitrd这个命令来创建,下面就来看看这个的用法。
[root@yufei ~]# mkinitrd –help
usage: mkinitrd [--version] [--help] [-v] [-f] [--preload <module>]
[--image-version] [--with=<module>]
<initrd-image> <kernel-version>
(ex: mkinitrd /boot/initramfs-2.6.32-71.el6.i686.img 2.6.32-71.el6.i686)
通过上面的帮助,我们可以看到他给的例子就是用mkinitrd创建initramfs的。那么OK,我们也来创建一个。
[root@yufei ~]# mkdir back
[root@yufei ~]# mv /boot/initramfs-2.6.32-71.el6.i686.img ./back
[root@yufei ~]# reboot
我们发现启动后就黑屏了,没有反应。同样还是进入救援模式,然后chroot 。
执行下面的命令,如果要查看具体的创建过程,我们可以加上-v参数。
执行上面的命令要稍等一会,
再来看看/boot目录下面,是不是有了这个initramfs-2.6.32-71.el6.i686.img文件了。
重新启动系统吧!
5、运行级别的故障解决
我们知道,系统运行级别的实际相关文件都在/etc/rc.d这个目录下,所以我们删除这个目录里面的全部文件。
[root@yufei ~]# mkdir /root/back
[root@yufei ~]# mv /etc/rc.d/rc?.d /root/back
重新启动系统错误提示如下
同样,还是进入救援模式
chroot后,
只需要把运行级别inittab文件里面的5改成3或者是2就能登陆系统了,如果是改成1的话,会在Entering non-interactive startkup处卡住。
注1:如果你的默认运行级别是5的话,系统是启动不了的。但如果你的默认运行级别是2、3的话,系统能启动,只是少了很多有服务而已。
注2:在RHEL6中,如果没有inittab这个文件系统同样能启动,但启动的级别是3。
注3:如果想让整个服务和系统安装时候的一样,那么就只能自己动手来增加了(参考其他的系统来配置相应的服务),我相信通过前面的学习,你已经知道如何来增加了吧!(不同的运行级别,只是启动的服务不同,而且都是连接文件+启动的优先级别)因为这个涉及到的操作很多,有兴趣的朋友就自行研究用ln命令来操作。下面我们演示的是通过chkconfig这个命令来增加。
接上面
我们把运行级别调整到3后,进入系统(当然不换到3运行级别也行,直接在救援模式下操作)
首先创建我们的rc?.d这7个目录,不然执行chkconfig命会出错
创建目录
我们来增加一个network服务
我们也可以不用他默认的,根据自己的情况来增加
以sshd为例
增加后,我们再来看看/etc/rc.d/rcN.d中的变化
6、其他启动相关的文件故障
如/etc/rc.d/rc、/etc/init/rcS.conf、/etc/rc.d/rc.sysinit等等,这些文件都是由initscripts这个软件提供的,我们可以提取这个软件包中的文件,进行恢复。
这里只做个简单的介绍
进入救援模式,挂载光盘,拷贝initscripts-$(uname -r).rpm到某个地方,提取文件(rpm2cpio initscripts-$(uname -r).rpm |grep cpio -imd),恢复相应的文件
2013-09-14
电脑开机蓝屏stop:0X000000ED错误代码怎么解决?
路由器总掉线怎么回事? 如何解决?
网络和共享中心打不开怎么办?网络和共享中心打不开的解决方法
点击淘宝聊天链接无反应是什么原因?
宽带错误651什么意思?宽带错误651的解决办法!
硬盘坏了怎么修复 教你如何修复硬盘坏道
宽带连接错误629代码的解决办法
近期热门问题:Google打不开?2014谷歌打不开原因分析
看爱奇艺在线视频画面上有滚动文字怎么办?