CentOS 7 系统启动流程和服务控制systemd

一、启动过程

在这里插入图片描述
开机自检:开机以后,根据bios的设置对cpu、内存、显卡、键盘等设备进行初步检测,并初始化硬件,根据启动顺序移交控制权,一般为硬盘

MBR引导:硬盘根据MBR的设置,和引导信息调用启动菜单grub2

GRUB2菜单:引导装在程序,显示启动菜单给用户选择,并根据所选项加载linux内核文件,将控制权移交给内核

加载linux内核:从本地硬盘中加载内核和内存文件系统(initramfs)内核接过控制权以后,将完全掌控整个linux的运行过程
CentOS 7.6的内核路径:/boot/vmlinuz-3.10.0-957.el7.x86_64
而内存文件系统包含了启动时的所有的硬件内核模块、初始化脚本等

初始化进程:在initramfs中找到驱动程序的所有硬件,然后作为PID 1从initramfs执行/lib/systemd/systemd,systemd启动initrd.target中所有单元,包括挂载/etc/fstab,然后从initramfs根文件系统切换到磁盘根目录并且systemd启动默认target(字符界面还是图形化界面)也就是
/etc/systemd/system/default.target,最后等待用户登陆

与CentOS6的区别

1、引导方式

由grub改用grub2引导,grub2相较于grub一代的提升:更健壮、可移植、更强大。支持BIOS、EFI和OpenFirmware,支持GPT和MBR分区表。支持非Linux系统,如苹果HFS文件系统和Windows的NTFS文件系统
grub2的特点:1、模块化设计;2、支持多体系硬件架构;3、支持国际化多语言;4、独立内存管理;5、支持脚本语言。
配置文件:/boot/grub/grub.conf

2、初始化程序

systemd 是 linux 系统中最新的初始化系统(init),它的诞生主要是为了将更多的服务并发启动,从而提高系统启动的速度,其最大的优点在于具有提供按需启动服务的能力,只有在某个服务真正被请求时才进行启动,而sysvinit会将所有可能用到的后台服务进程全部启动运行,并且系统必须等待所有的服务都启动就绪之后,才允许用户登录。它是由Redhat的一个员工首先提出来的,它在内核启动后,服务什么的全都被systemd接管,kernel只是用来管理硬件资源

优点:功能强大,使用方便
缺点:体系庞大,非常复杂

在这里插入图片描述

3、运行级别

CentOS7版本之前的系统使用init初始化进程,有0-6一共7个运行级别来代表特定的操作模式,每个级别可以启动特定的服务,默认启动级别会在配置文件/etc/inittab中设置,而从CentOS7版本开始运行级别由target取代,每个所谓的“运行级别”都有对应的软链接指向,默认的启动级别是
/etc/systemd/system/default.target,根据它的指向可以找到系统要进入哪个模式

CentOS6 CentOS7 说明
level 0 poweroff 关机
level 1 rescue 救援模式,用于系统维护
level 2 multi-user 字符界面的多用户模式(不可访问网络)
level 3 multi-user 完整多用户模式(字符界面)
level 4 multi-user 未分配
level 5 graphical 图形界面
level 6 reboot 重启

二、服务控制

1、概述

systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器,它融合之前service和chkconfig的功能于一体,可以使用它永久性或只在当前会话中启用/禁用服务。

2、配置文件

  • /etc/systemd/system/ 存放不同级别的开启自启服务
  • /run/systemd/system/ 系统执行过程中所产生的服务脚本所在目录
  • /usr/lib/systemd/system 每个服务最主要的启动脚本设置,类似于之前的/etc/initd.d

*优先级从上到下

3、systemd单元

  • service unit:文件扩展名为.service,用于定义系统服务
  • target unit:文件扩展名为.target,用于模拟实现“运行级别”
  • device unit: .device,用于定义内核识别的设备
  • mount unit :.mount,定义文件系统挂载点
  • socket unit :.socket,用于标识进程间通信用的socket文件,也可以在系统启动时,延迟启动服务,实现按需启动
  • snapshot unit:.snapshot,系统快照
  • swap unit:.swap,用于表示swap设备
  • automount unit:.automount,文件系统的自动挂载点如:/misc目录
  • path unit:.path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如spool目录
  • time:.timer由systemd管理的计时器
    在这里插入图片描述

4、systemd服务管理

在使用systemctl命令时,可以省略服务单元名称的标识.service,也就是如果输入的是无后缀标识的,它会默认把后缀标识当做.service来处理。

1、服务管理命令

systemctl --version
#查看systemd的版本
在这里插入图片描述
systemctl start name.service
#开启服务
在这里插入图片描述
systemctl stop name.service
#停止服务
在这里插入图片描述
systemctl restart name.service
#重启服务(相当于先停止再启动,服务的PID会改变)
在这里插入图片描述
systemctl reload name.service
#重新加载服务的配置文件(服务不会中断)
在这里插入图片描述
systemctl status name.serivce
#查看服务的状态
在这里插入图片描述

systemctl enable name.service
#设置服务开机自启
在这里插入图片描述
systemctl disable name.service
#设置服务开机不自启
在这里插入图片描述
systemctl is-enabled name.service
#查看服务是否开机启动
在这里插入图片描述
systemctl list-unit-files|grep enabled
#查看已启动的服务列表
在这里插入图片描述
systemctl is-active name.service
#查看服务是否在启动成功状态
systemctl is-failed name.service
#查看服务是否在启动失败状态在这里插入图片描述
有时候系统存在安装了相互冲突的服务的情况,为了防止管理员意外的启动这些相互冲突的服务,systemd提供了屏蔽服务的命令,使得屏蔽的服务不会在系统启动时启动,也不会被其他的systemd单元启动,也无法被手动启动,例如防火墙iptables和firewalld就是互相冲突的,可以屏蔽其中一个

systemctl mask name.service
#屏蔽服务
systemctl unmask name.service
#取消屏蔽服务
在这里插入图片描述

2、服务的配置文件解析

在这里插入图片描述

3、其他命令

systemctl get-default
#查看当前系统默认启动的target
在这里插入图片描述

systemctl set-default multi-user.target
#设置默认启动的target为multi-user.target
在这里插入图片描述
systemd-analyze
#查看系统启动耗时, 等同于systemd-analyze time
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shengjie87/article/details/106879828