系统启动和服务控制
一、启动过程
开机自检:开机以后,根据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