版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
centos7的启动流程和centos6的差别,在于grub的版本不同了,但是思想都一样的用于启动,只是文件格式不同了。还有启动的第一个进程也变了。
启动流程
POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分,负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串行并行接口、键盘等硬件情况的检测
BIOS:Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自检程序等
BootLoader:引导加载器,引导程序
MBR:第一个扇区
前446个字节 BootLoader
中间64字节 分区表
最后2字节 55aa结束符
GRUB分为三个阶段
1阶段:指向MBR前446个字节
1.5阶段:MBR之后的扇区,让1阶段中的BootLoader能识别2阶段所在的分区上的文件系统,也就是boot分区信息
2阶段:指向/boot/grub/,通过目录下配置文件找内核路径(grub.conf)
kernel
自身初始化
探测可识别到的所有硬件设备
加载硬件驱动程序(借助ramdisk加载驱动)
以只读方式挂载根文件系统
内核初始化,centos7使用systemd代替init
执行initrd.target所有单元,包括挂在/etc/fstab
从initramfs根文件系统切换到磁盘根目录
systemd执行默认target配置,配置文件/etc/systemd/system/default.target,这是一个软链接,与默认运行级别有关
systemd执行sysinit.target初始化系统
systemd启动multi-user.target下的本机服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local
systemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical需要的服务
centos7使用的第一个进程为systemd,下面介绍systemcd特性:
systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程
systemd新特性:
系统引导时实现服务并行启动
这个就是为什么centos7比centos6启动速度快的原因。
按需启动守护进程
目前不需要的不启动,等用是被激活。
自动化的服务依赖关系管理
centos6上:A服务依赖于B服务,B服务不启动时,A服务启动不了
centos7上:A服务依赖于B服务,但是启动A服务时,systemd会自动启动B服务
同时采用socket和D-bus总线激活服务
像Telnet-server这样的服务长期睡眠状态,由systemd代理监听23端口,有请求时激活Telnet服务,centos6用的是xinetd监听
系统快照状态
unit:核心概念
unit表示不同类型的systemd对象,通过配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的配置
配置文件:运行优先级从低到高
/usr/lib/systemd/system/:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/run/systemd/system/:系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system/:管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行
unit类型:
systemctl -t help :查看unit类型
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,文件系统的自动挂载点
path until:.path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool目录
servies unit文件格式
service unit file文件通常由三部分组成
[Unit]:定义unit类型无关的通用选项,用于提供unit的描述信息,unit行为及依赖关系等
unit此段的常用选项:
description:描述信息
after:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与before相反
requires:依赖到其他的unit,强依赖,被依赖的units无法激活时,当unit无法启动
wants:依赖到其他的unit。弱依赖
conflicts:定义unit之间的冲突
[Service]:与特定类型相关的专用选项,此处为service类型,比如target等,要到哪个写哪个
service段的常用选项:
type:定义影响execstart及相关参数的功能的unit进程启动类型
simple:默认值,这个daemon主要由execstart接的指令串来启动,启动后常驻于内存中
forKing:由execstart启动的程序透过spawns延伸出其他子程序来作为次daemon的主要服务,原生福程序在启动结束后就是终止
oneshot:与sinple类似,不过这个程序在工作完毕后就结束了,不会常驻内存中
dbus:与simple类似,但这个daemon必须要在取得一个D-bus的名称后,才会继续运作,因此通常也要同时设定busname= 才行
notify:咋启动完成后会发送一个通知消息,还需要配合notifyaccess来让systemd接收消息
idle:与simple类似,要执行这个daemon必须要所有的工作都顺利完成后才执行,这类的daemon通常是开机到最后才执行的服务
[Install]:定义由"systemctl enable"以及"systemctl disable"命令在实现服务启用或禁用时用到的一些选项
install段的常用选项:
alias:别名。
requiredby:被那些units所依赖,强依赖
wantdby:被那些units所依赖,弱依赖
also:安装本服务的时候还要安装别的相关服务
注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而後可以选择重启
systemctl daemon-reload
nginx服务unit文件示例:
文件内容中要要严格区分大小写
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx server
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/nginx
[Install]
WantedBy=multi-user.target