1、CentOS 7 引导过程
系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux操作系统的引导过程将完成一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。
当Linux 启动时 , 如果出现故障 , 需要通过引导过程来判断故障是如何出现的 , 从而通过确定引导过程中的断点 , 而解决故障。
a、开机自检(BIOS):CPU、硬盘、内存及硬件是否有问题⬇️ |
b、MBR引导:主引导记录通过硬盘启动⬇️ |
c、GRUB菜单:选择不同内核⬇️ |
d、加载内核:/boot加载到内存拥有一个小系统⬇️ |
e、systemd:CentOS 7 第一个运行的进程⬇️ |
f、读取运行级别:/etc/systemd/system/default.target⬇️ |
g、初始化系统:/usr/lib/systemd/system/sysinit.target⬇️ |
h、并行启动服务⬇️ |
i、显示login界面。 |
a. 开机自检
当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行初步检查,检查内存,CPU,显卡等等,当检测到错误的时候机器会中断或者启动不了。检测成功后根据预设的启动顺序移交系统控制权。
b. 查找启动介质
当自检通过后,接着就要选择引导介质或方式,是通过光盘启动,硬盘启动,网络启动,还是U盘启动,这些也是在BIOS中设定的,所以设定的第一启动项是哪个就从那个开始引导。
c. 引导加载器
grub2启动引导阶段:确定引导介质后便开始从介质中装载Bootloader(引导程序grub2),这个是一个微小程序, MBR引导记录的前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统制权移交给内核。
grub2分为两个部分:
- 在MBR引导记录中,大小为446字节,主要功能是引导启动介质的grub主体文件
- /boot/grub2,此为grub的主体文件,/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
d. 加载内核和硬件驱动
在用户选择内核版本后(或timeout后),GRUB2 将加载内核及 initramfs 至内存中,initramfs 属于一个img 的虚拟磁盘,是一个 GZIP 的 cpio 归档文件
initramfs 包含了动态的内核模块 , 初始化脚本及非常多的硬件驱动等 , 在 centos7 中 initramfs自身即包含了一个完整的可用系统。
e. 内核加载第一个程序
kernel 在启动后将初始化所有的硬件 , 通过initramfs 找到硬件相关的驱动程序 , 而后从initramfs 中执行PID 1的 /sbin/init命令(最高进程),在centos7 中init 属于 /lib/systemd/systemd 的软连接 , 以及一个udev 进程来自动建立已经存在的硬件的设备文件。
systemd(init) 进程从 initramfs 中执行initrd.target 系统初始化服务中所有可用单元 , 来引导 RHEL7/CentOS7 的启动,这其中包括了切换到实际的“ /” 硬盘分区及挂载
由initramfs 建立的内存的根区分/sysroot( 物理 '/' 分区 ) 在成功挂载之后,将切换到此根分区上 , 并将 systemd 重新执行安装至真实的根分区中。
f. systemd 执行默认的target配置
centos7表面是有“运行级别”这个概念,实际上是为了兼容以前的系统,每个所谓的“运行级别”都有对应的软连接指向,默认的启动级别是/etc/systemd/system/default.target,根据它的指向可以找到系统要进入哪个模式。
0 | runlevel0.target | poweroff.target | 关机 |
1 | runlevel1.target | rescue.target | 字符界面,单用户模式,不能联网 |
2 | runlevel2.target | multi-user.target | 字符界面 ,多用户,无网络 |
3 | runlevel3.target | multi-user.target | 字符界面,多用户模式,可以联网 |
4 | runlevel4.target | multi-user.target | 保留 |
5 | runlevel5.target | graphical.target | 图形界面 |
6 | runlevel6.target | reboot.target | 重启 |
g. systemd 执行sysinit.target初始化系统及准备操作系统
- systemd启动multi-user.target下的服务
- systemd执行multi-user.target下的/etc/rc.d/rc.local
- Systemd执行multi-user.target下的getty.target及登录服务
- getty.target,它是启动终端的systemd对象。
2、系统初始化进程及文件
a. init 进程
Linux操作系统中的进程使用数字进行标识,每个进程的身份标记号称为pid,在引导linux操作系统的过程中,/sbin/init是内核第一个加载的程序,因此init进程对应的pid号总是为1。init运行以后将陆续执行系统中的其他程序,不断生成新的进程,init进程是系统进程的父进程。
init 程序对比:
系统类型 | 服务名称 | 配置文件位置 |
CentOS 5 | SysV init | /etc/inittab |
CentOS 6 | Upstart | /etc/inittab;/etc/init/*.conf(主要) |
CentOS 7 | systemd | /etc/systemd/system;/usr/lib/systemd/system |
b. systemd 概述
Systemd是Linux操作系统的一种init软件。Centos7系统中采用了全新的systemd启动方式,Systemd启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。Systemd守护负责linux的系统服务,systemctl用于控制systemd管理的系统和服务状态
Systemd将其管理的资源组织成各种类型的单元(unit):
service 单元 | 扩展名.service,用于描述一个系统服务。 |
socket 单元 | 扩展名.socket,用于描述一个系统套接字(UNIX)或互联网套接字(INET/INET6)或FIFO管道。 |
target 单元 | 扩展名.target,将服务单元、挂载单元等单元组织在一起的单元,一般对应Sys-V的运行等级(XXX.target文件表示) |
device 单元 | 扩展名.device,用于描述一个设备文件 |
mount 单元 | 扩展名.mount,用于封装一个文件系统挂载点 |
automount 单元 | 扩展名.automount,用于描述一个文件系统自动挂载点,也就是仅在挂载点确实被访问的情况下才进行挂载。 |
timer 单元 | 扩展名.timer,用于描述一个基于时间触发的动作,用于实现类似 atd, crond 等任务计划服务。 |
swap 单元 | 扩展名.swap,用于描述一个交换分区或者交换文件。 |
path 单元 | 扩展名.path,用于定义文件系统中的一个文件或目录 |
slice 单元 | 扩展名.slice,用于控制特定 CGroup 内所有进程的总体资源占用。 |
c. systemctl 命令
- 描述:服务管理
- 语法:systemctl [模式] name.service
start 启动
stop 停止
restart 重启
reload 重载
status 状态
enable 开机自启动
disable 关闭开机自启
is-enable 查看是否开机自启
mask 禁止设定为开机自启
umask 取消禁止设定为开机自启