前言
系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备
从CentOS7版本,系统启动和服务管理都交给systemd进行管理
一、CentOS 7 引导过程及服务管理
1.1、引导过程
1.1.1、引导过程总览
Linux操作系统的引导过程一般包括以下几个阶段:开机自检 、MBR引导、GRUB菜单、加载Linux内核与内存文件系统、加载硬件驱动以及初始化进程。
(1)开机自检
服务器主机开机以后,将根据主板BIOS(Basic Input/Output System,基本输入输出系统)中的设置对CPU、内存、显卡、键盘等设备进行初步检测,并初始化部分硬件,检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本机硬盘。
自检过程中可以根据主机的POST信息进入配置,通常按某一组合键进入,常用F2或者Delete。
(2)MBR引导
当从本机硬盘中启动系统时,首先根据硬盘的第一个扇区中MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(CentOS7中为grub2)
(3)GRUB菜单
对于Linux系统来说,GRUB算是使用最广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核
(4)加载Linux内核与内存文件系统
系统引导器程序会从本地硬盘中加载内核以及内存文件系统(CentOS 7 中使用initramfs)
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度,内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。默认的内核放在/boot目录下。
内存文件系统initramfs 是经过gzip 的cpio归档,其中包含启动时所有必要的硬件内核模块,初始化脚本等。
(5)加载硬件驱动以及初始化进程
内核初始化在initramfs中找到驱动程序的所有硬件,然后作为PID1从initramfs执行/sbin/init,CentOS 7中将其复制为systemd,systemd启动initrd.target中所有单元,并挂载根文件系统/sysroot,内核与文件系统由内存文件系统切换至系统根文件系统,并重新运行/sysroot.systemd。systemd启动默认target(图形或者字符终端),最后等待用户进行登录
1.1.2、systemd进程
Linux系统中的进程(运行中的程序)使用数字进行标记,每个进程的身份标记称为PID。从CentOS 7版本的系统开始systemd称为PID恒为1的初始化进程,是内核第一个加载的程序。
systemd进程是维护整个Linux系统运行的所有进程的“始祖”,因此systemd进程是不允许被轻易终止的
需要切换不同的系统运行状态时,可以向systemd进程发送正确的执行命令,由systemd自身来完成相关操作。
systemd诞生的主要目的是为了将更多的服务并发启动,从而提高系统启动速度。其最大的优点在于具有提供按需启动服务的能力,只有在某个服务被真正请求时才进行启动。当服务结束时systemd就将其关闭,等待下次需要时启动。
1.2、使用systemd进程
systemd不是单独一个命令,而是一个集合体
1.2.1、systemd单元
在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型。以下列出最常见的单元
1.2.2、systemd服务管理
systemctl命令可以控制系统服务,次命令涵盖了之前版本操作系统中的service命令和chkconfig命令两者的功能,在使用systemctl命令时,可以省略服务单元名称的标识.service。也就是如果输入资源无后缀标识,systemctl会默认把后缀标识当做.service来处理
(1)查看服务启动状态
语法:systemctl status name.service
1)查看某个服务是否在启动成功状态
systemctl is-active named.service
2)查看某个服务是否在启动失败状态
systemctl is-faild named.service
(2)启动与停止服务
语法:systemctl start name.service
systemctl stop name.service
systemctl restart name.service
systemctl reload name.service
(3)设置开机启动
1)将服务设置为开机自动启动
systemctl enable name.service
2)将服务设置为开机不启动,即禁用服务
systemctl disable name.service
(4)查看依赖关系
systemctl list-dependencies
(5)屏蔽服务
1)屏蔽服务命令
systemctl mask name.service
2)取消屏蔽使用命令
systemctl umask name.service
1.2.3、服务配置文件
systemd在开机时会默认从/etc/systemd/system/目录中读取服务的配置文件用于启动该服务,实际上/etc/systemd/system/目录中存放着的都是软连接文件,指向/usr/lib/systemd/system/目录中真正的配置文件。这里的配置文件有着相似的格式
1.2.4、Target类型单元
CentOS 7 抛弃了之前版本运行级别的概念,转而引入了target类型单元来将系统启动时需要启动的大量systemd单元进行分类。简单来说target就是一个单元组,通过一连串的依赖关系将许多相关的systemd单元组织在一起。
使用“systemctl list-unit-files–type target”命令可以查看当前系统上的所有target。
为了兼容,CentOS 7也定义了一些target与之前版本的运行级别相对应
可以使用“systemctl get-default”命令查看当前系统的默认启动target
使用“systemctl set-default”命令设置默认启动的target
使用“systemctl isolate”命令在不同的target之间切换
1.2.5、systemd其他命令
(1)更改系统主机名
1)修改永久使用的主机名
hostname set-hostname 参数
2)查看主机名的状态
hostname status
(2)日志系统
1)输出本次启动后的所有日志信息
journalctl -b
2)显示固定时间段的日志信息
journalctl --since=
(3)语言设置
列出当前系统所支持的语言
localectl list-locales
设置语言
localectl list-locale LANG=
(4)时间相关设置
设置系统日期
timedatectl set-time YYYY-MM-DD
设置系统时间
timedatectl set-time HH:MM:SS
设置系统时区
timedatectl set-timezone time_zone
(5)登录系统的用户信息
列出当前登录系统的用户
loginctl list-users
(6)启动耗时
查看每个服务的启动耗时
systemd-analyze blame
1.3、排除启动类故障
1.3.1、MBR扇区故障
1.3.2、修复GRUB引导故障
1.3.3、遗忘root用户的密码
二、CentOS 7 服务控制及优化启动过程
2.1、服务控制及切换运行级别
2.1.1、服务控制
systemctl命令可以控制系统服务,此命令涵盖了之前版本操作系统的service命令和chkconfig 命令两者的功能
使用systemctl命令,可以省略服务单元名称的标识.service,即:不输入后缀标识,systemctl命令默认将后缀标识当做.service来处理
2.1.2、切换运行级别
(1)查看系统的运行级别
runlevel
(2)切换系统的运行级别
通过init程序进行,只要使用与运行级别想对应的数字(0~6)作为命令参数即可
2.2、优化启动过程
2.2.1、系统服务的管理工具
ntsysv 工具
提供一个交互式,可视化窗口(伪图形化界面)
可以在字符终端运行
便于集中管理多个服务
systemctl 工具
不提供交互式,可视化窗口
管理单个服务效率更高
2.2.2、ntsysv工具
ntsysv 进入一个伪图形的交互式操作界面
- 符号代表开机自启
空格 代表开启不自启
Tab键 切换到选项(确定,取消)
空格键可以输入 * 或者取消 *
2.2.3、systemctl 工具
1)将服务设置为开机自动启动
systemctl enable name.service
2)将服务设置为开机不启动,即禁用服务
systemctl disable name.service