2015-10-5系统崩溃记录

在3系统级别切换至5系统级别的时候,出现了报错

[root@localhost linux]# init 5

Calling the system activity data collector (sadc)…

并且在切换到3系统级别的时候也是出现了同样的提示

Calling the system activity data collector (sadc)…

立刻拍摄当前系统快照,并且恢复上一次系统快照,进行系统级别切换的操作

之前快照版本的系统没有任何问题,再次切换到当前版本系统时,错误依旧

整理了一下两个版本系统之间我做的系统改动

  1. 我关闭了selinux防火墙

  2. 我更改了系统字体,由en-US改为了zh-CN

  3. 我把开机系统自动启动级别5改为了3

  4. 我关闭了大部分开机自启动服务

  5. 我更改了CRT远程服务的端口,由22改为了52113

  6. 我更改了网络监听地址,由0.0.0.0改为自己本身ip

进过逻辑排查,我排除了2.5.6的可能性,把原因锁定在了1.4上,但不排除3的可能性

按照顺序来,我先把selinux防火墙重新开启,发现了自己十月一日更改时做的备份,备份真的很重要,也方便很多,直接cp回来就OK了

[root@localhost selinux]# getenforce     

Disabled

[root@localhost selinux]# ls /etc/selinux/  

config                  restorecond.conf       semanage.conf

config.cp.20151001  restorecond_user.conf  targeted

重新开启防火墙,

[root@localhost selinux]# cp config.cp.20151001 config

cp: overwrite `config'? y

检查一下

[root@localhost selinux]# cat config | grep  SELINUX=

SELINUX=enforcing

这个防火墙比较蛋疼,必须要重启

启动看到这个,selinux启动还要读条。。。

2015-10-5系统崩溃记录_可能性

Selinux启动是搞定了,但是并没有什么作用提示依然存在

接着就更改启动级别

[root@localhost linux]# cat /etc/inittab

# inittab is only used by upstart for the default runlevel.

#

# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

# System initialization is started by /etc/init/rcS.conf

#

# Individual runlevels are started by /etc/init/rc.conf

#

# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf

#

# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,

# with configuration in /etc/sysconfig/init.

#

# For information on how to write upstart event handlers, or how

# upstart works, see init(5), init(8), and initctl(8).

#

# Default runlevel. The runlevels used are:

#   0 - halt (Do NOT set initdefault to this)

#   1 - Single user mode

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode

#   4 - unused

 

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

#

id:3:initdefault:

查看启动文件可以看到目前的启动级别是3级别,直接启动进来没有任何问题,那我现在改回到5级别为系统的默认启动级别,这里为了尽快处理问题为主,直接vi修改

修改好了再检查一下

[root@localhost linux]# cat /etc/inittab |grep id:

id:5:initdefault:

继续重启

然后发现,系统直接进不去了

卡在了读取界面

2015-10-5系统崩溃记录_记录_02

切换到CRT观察一下,意外的是CRT竟然登录进去了,说明系统启动完成了,只是无法加载图形化界面,那基本就可以确定了是关于5系统级别的某项启动服务没有开启

为了验证自己的猜想,在CRT下直接init 3切换一下级别

果然3级别直接让我输入账号密码准备让我登录了

2015-10-5系统崩溃记录_system_03

既然确定具体原因了,就不浪费时间了,直接把矛头指向开机启动服务

2015-10-5系统崩溃记录_可能性_04

我现在要做的就是把排除每一个启动服务,当然一些用肉眼看就能排除的就不需要额外浪费功夫了,比如network,ip6,VMtools等,为了减少工作量,我找到了上一个快照版本系统的启动服务的状态,能明显看出来,我关掉了很多

2015-10-5系统崩溃记录_防火墙_05

最后,罪魁祸首被抓了出来,messagebus这个服务

事件监控服务,负责在各个系统进程之间传递消息。google是这么定义它的

不过在我这里,他也就起到能init 5的作用,检查的时候还发现,我把haldaemon服务也给关掉了,平时都用CRT这些错误还真的很难发现

开启这两个服务的开机自启动

[root@localhost linux]# chkconfig |egrep 'messagebus|haldaemon' | awk '{print "chkconfig " $1 " on"}' | bash

检查一下

[root@localhost linux]# chkconfig --list | egrep 'messagebus|haldaemon'

haldaemon       0:off   1:off   2:on    3:on    4:on    5:on    6:off

messagebus      0:off   1:off   2:on    3:on    4:on    5:on    6:off

然后init 5一下,登录成功