第十七章 Linux系统启动原理及故障排除
本节所讲内容:
17.1 centos系统启动过程及相关配置文件
17.1.1 centos6启动相关的配置文件
查看centos6默认系统启动级别:
[root@node-2 ~]# vim /etc/inittab
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: #这里决定系统启动的级别
说明一下各个启动级别的含义
0:关机
1:单用户模式
2:多用户模式但无网络服务
3:完整多用户模式
4:暂未启用
5:图形化界面模式
6:重启
17.1.2 centos6设置服务开机启动
[root@node-2 ~]# chkconfig --list | grep sendmail
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@node-2 ~]# chkconfig --level 35 sendmail off
[root@node-2 ~]# chkconfig --list | grep sendmail
sendmail 0:off 1:off 2:on 3:off 4:on 5:off 6:off
[root@node-2 ~]#cat /etc/rc.local
此文件是设置开机启动的控制文件,如果开机要运行脚本,可以将脚本具体路径添加到此文件中
[root@node-2 ~]# runlevel #查看系统启动级别
N 3
[root@node-2 ~]# init 3 #切换到运行级别3上
17.1.3 centos7系统启动过程
CentOS7引导顺序

  1. UEFi或BIOS初始化,运行POST开机自检
  2. 选择启动设备
  3. 引导装载程序, centos7是grub2
  4. 加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
  5. 加载内核选项
  6. 加载initramfs初始化伪文件系统
  7. 内核初始化,centos7使用systemd代替init
  8. 执行initrd.target所有单元,包括挂载/etc/fstab
  9. 从initramfs根文件系统切换到磁盘根目录
  10. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  11. systemd执行sysinit.target初始化系统及basic.target准备操作系统
  12. systemd启动multi-user.target下的本机与服务器服务
  13. systemd执行multi-user.target下的/etc/rc.d/rc.local
  14. Systemd执行multi-user.target下的getty.target及登录服务
  15. systemd执行并启动需要的服务
    从centos7开始redhat公司用systemd代替initd管理系统,让我这位"老人家"一开始很不适应
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    1 root 20 0 43248 3636 2548 S 0.0 0.2 0:00.84 systemd
    17.1.4 centos7系统管理系统服务
    命令: systemctl COMMAND name.service
    1)启动: systemctl start name.service
    2)停止: systemctl stop name.service
    3)重启: systemctl restart name.service
    4)状态: systemctl status name.service
    5)重载: systemctl reload name.service
    6)开机启动: systemctl enable name.service
    7)开机不启动: systemctl disable name.service
    8)开机是否启动: systemctl is-enabled name.service
    9)所有服务的开机自启状态:systemctl list-unit-files --type service
    17.1.5 centos7系统的运行级别
    [root@node-1 ~]# ll /usr/lib/systemd/system/*.target | grep runlevel
    lrwxrwxrwx 1 root root 15 Aug 29 2018 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
    lrwxrwxrwx 1 root root 13 Aug 29 2018 /usr/lib/systemd/system/runlevel1.target -> rescue.target
    lrwxrwxrwx 1 root root 17 Aug 29 2018 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
    lrwxrwxrwx 1 root root 17 Aug 29 2018 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
    lrwxrwxrwx 1 root root 17 Aug 29 2018 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
    lrwxrwxrwx 1 root root 16 Aug 29 2018 /usr/lib/systemd/system/runlevel5.target -> graphical.target
    lrwxrwxrwx 1 root root 13 Aug 29 2018 /usr/lib/systemd/system/runlevel6.target -> reboot.target
    [root@node-1 ~]# runlevel #查看系统启动级别
    N 3
    [root@node-1 ~]# init 3 #切换到运行级别3上
    开机运行与centos6设置是一样的
    [root@node-1 ~]# echo '/usr/sbin/ntdate -u times.aliyun.com &> /dev/null' >> /etc/rc.local && chmod +x /etc/rc.local

17.1.6 centos7系统的运行服务优化
网上有很多教程,都是用systemctl list-unit-files | grep enable 过滤查看开机启动服务项。
[root@node-1 multi-user.target.wants]# systemctl list-unit-files | grep enable
[email protected] enabled
crond.service enabled
[email protected] enabled
lvm2-monitor.service enabled
microcode.service enabled
rhel-autorelabel-mark.service enabled
rhel-autorelabel.service enabled
rhel-dmesg.service enabled
rhel-domainname.service enabled
rhel-import-state.service enabled
rhel-loadmodules.service enabled
rhel-readonly.service enabled
rsyslog.service enabled
sshd.service enabled
systemd-readahead-collect.service enabled
systemd-readahead-drop.service enabled
systemd-readahead-replay.service enabled
dm-event.socket enabled
lvm2-lvmetad.socket enabled
lvm2-lvmpolld.socket enabled
default.target enabled
multi-user.target enabled
runlevel2.target enabled
runlevel3.target enabled
runlevel4.target enabled

根据查到的内容再用systemctl stop name.service && systemctl disable name.service
本人一般是这样处理的:
1)[root@node-1 ~]# cd /etc/systemd/system/multi-user.target.wants #实际工作中服务器不安装图形化界面的
2)[root@node-1 multi-user.target.wants]# ll
total 0
lrwxrwxrwx. 1 root root 37 May 19 2018 crond.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx. 1 root root 39 May 19 2018 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root 36 May 19 2018 sshd.service -> /usr/lib/systemd/system/sshd.service
3)根据实际需要停用、禁止开机启动相关的服务
如想停用且禁用crond服务
[root@node-1 multi-user.target.wants]#systemctl stop crond && systemctl disable crond
[root@node-1 multi-user.target.wants]# ll
total 0
lrwxrwxrwx. 1 root root 39 May 19 2018 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root 36 May 19 2018 sshd.service -> /usr/lib/systemd/system/sshd.service
17.2 Linux系统故障排除
故障1:修改SSH端口后无法启动,会有Permission denied报错
处理过程:
1、vim /etc/ssh/sshd_config -->port 9022
2、systemctl restart sshd 无法启动,报Permission denied......
3、用sshd -t 检查配置文件无问题
4、getenforce 发现为enforcing
5、元凶在这儿呀,加条规则: semanage port -a -t ssh_port_t -p tcp 9022
6、systemctl restart sshd 重启后正常,世界终于安静会儿

故障2:SSH服务无法启动,报一堆英文错误
处理过程:
1、用sshd -t 检查配置文件出现了:Permissions 0715 for '/etc/ssh/ssh_host....key' too ......
2、这个是典型的权限问题,于是查一下正常机器这几个文件的相关权限
[root@node-1 ~]# ll /etc/ssh/ssh_host
-rw-r-----. 1 root ssh_keys 227 May 19 2018 /etc/ssh/ssh_host_ecdsa_key
-rw-r-----. 1 root ssh_keys 387 May 19 2018 /etc/ssh/ssh_host_ed25519_key
-rw-r-----. 1 root ssh_keys 1679 May 19 2018 /etc/ssh/ssh_host_rsa_key
3、chmod 640 /etc/ssh/sshhost
_key
4、systemctl restart sshd 重启后正常

以上故障是我平时工作中遇到实际处理过程