centos7的systemd

系统启动流程

	POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --> /sbin/init
	init: 
		CentOS 5: SysV init
		CentOS 6: Upstart
		CentOS 7: Systemd

systemd

	系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。
	新特性:
		系统引导时实现服务并行启动
		按需启动守护进程
		自动化的服务依赖关系管理
		同时采用socket式与D-Bus总线式激活服务
		系统状态快照
	核心概念:unit
		unit 表示不同类型的systemd对象,通过配置文件进行标识和配置。
		文件中主要包含了系统服务、监听socket 、保存的系统快照以及其它与init 相关的信息。
	配置文件:
		/usr/lib/systemd/system: 
			每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
		/run/systemd/system:
			系统执行过程中所产生的服务脚本,比/usr/lib/systemd/system目录优先运行
		/etc/systemd/system:
			管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx 类的功能,比/run/systemd/system目录优先运行
	关键特性:
		基于socket 的激活机制:	socket 与服务程序分离
		基于d-bus 的激活机制:	
		基于device 的激活机制:	
		基于path 的激活机制:	
		系统快照:	保存各unit的当前状态信息于持久存储设备中,向后兼容sysv init 脚本
	不兼容:
		systemctl 命令固定不变,不可扩展
		非由systemd 启动的服务,systemctl无法与之通信和控制

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 unit:	 .path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool  目录

服务管理

	centos7几乎一切服务都是由systemctl来管理service unit,centos7之前的service同时仍然兼容。
```
##运行级别
```
	target units: 
		unit 配置文件:
			.target,用于模拟实现运行级别
		ls /usr/lib/systemd/system/*.target
		systemctl list-unit-files --type target --all
	运行级别:
		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
	查看依赖性:
		systemctl list-dependencies graphical.target
		
	级别切换:
		init N ==> systemctl isolate name.target
		systemctl isolate multi-user.target
		注意:只有/lib/systemd/system/*.target 文件中AllowIsolate=yes才能切换,修改文件需执行systemctl daemon-reload 才能生效
	查看target:
		systemctl list-units --type target
	获取默认运行级别:
		/etc/inittab ==> systemctl get-default
		runlevel 
		who -r
	修改默认级别:
		/etc/inittab ==> systemctl set-default name.target
		systemctl set-default multi-user.target
		ls –l /etc/systemd/system/default.target
	切换至紧急救援模式:
		相当于init 1
		systemctl rescue
	切换至emergency 模式:
		systemctl emergency
	其它常用命令:
		传统命令init ,poweroff ,halt ,reboot 都成为 systemctl 的软链接
		关机:systemctl halt 、systemctl poweroff
		重启:systemctl reboot
		挂起:systemctl suspend
		休眠: :systemctl hibernate
		休眠并挂起:systemctl hybrid-sleep
```
##CentOS7 引导启动顺序
```
	UEFi 或BIOS 初始化,运行POST 开机自检
	选择启动设备
	引导装载程序, centos7 是grub2
	加载装载程序的配置文件:/etc/grub.d/ ,/etc/default/grub ,/boot/grub2/grub.cfg
	加载initramfs 驱动模块
	加载内核选项
	内核初始化,centos7 使用systemd 代替init
	执行initrd.target 所有单元,包括挂载/etc/fstab
	从initramfs 根文件系统切换到磁盘根目录
	systemd执行/etc/systemd/system目录下的配置
		systemd 执行默认target 配置,配置文件/etc/systemd/system/default.target
		systemd 执行sysinit.target 初始化系统及basic.target 准备操作系统
		systemd 启动multi-user.target 下的本机与服务器服务
		systemd 执行multi-user.target 下的/etc/rc.d/rc.local
		systemd 执行multi-user.target 下的getty.target及登录服务
		systemd 执行graphical 需要的服务
```
##service unit 文件格式
```
	/etc/systemd/system :
		系统管理员和用户使用
	/usr/lib/systemd/system :
		发行版打包者使用
	相关布尔值
		1 、yes 、on 、true  都是开启
		0 、no 、off、false  都是关闭
	时间单位
		默认是秒,所以要用毫秒(ms )分钟(m )等须显式说明
	service unit file 文件通常由三部分组成:
		[Unit] :	定义与Unit 类型无关的通用选项;用于提供unit 的描述信息、unit 行为及依赖关系等
		[Service] :	与特定类型相关的专用选项;此处为Service 类型
		[Install] :	定义由“systemctl enable” 以及"systemctl  disable“ 命令在实现服务启用或禁用时用到的一些选项
	Unit 段的常用选项:
		Description :	描述信息
		After :	定义unit 的启动次序,表示当前unit 应该晚于哪些unit 启动,其功能与Before 相反
		Requires :	依赖到的其它units ,强依赖,被依赖的units 无法激活时,当前unit 也无法激活
		Wants :	依赖到的其它units ,弱依赖
		Conflicts :	定义units 间的冲突关系
	Service 段的常用选项:
		Type :	定义影响ExecStart 及相关参数的功能的unit 进程启动类型
		simple :	默认值,这个daemon(后台进程)主要由ExecStart所接的指令串来启动,启动后常驻于内存中
		forking :	由ExecStart 启动的程序透过spawns(繁衍)延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
		oneshot :	与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
		dbus :	与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作. 因此通常也要同时设定BusNname=  才行
		notify :	在启动完成后会发送一个通知消息。还需要配合NotifyAccess来让 Systemd  接收消息
		idle :	与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
		EnvironmentFile :	环境配置文件
		ExecStart :	指明启动unit要运行命令或脚本的绝对路径
		ExecStartPre:	ExecStart前运行
		ExecStartPost:	ExecStart后运行
		ExecStop :	指明停止unit要运行的命令或脚本
		Restart :	当设定Restart=1时,则当次daemon服务意外终止后,会再次自动启动此服务
	Install 段的常用选项:
		Alias :	别名,可使用systemctl command Alias.service
		RequiredBy :	被哪些units所依赖,强依赖
		WantedBy :	被哪些units所依赖,弱依赖
		Also :	安装本服务的时候还要安装别的相关服务
	注意:
		对于新创建的unit文件,或者修改了的unit文件,要通知systemd 重载此配置文件, 可以选择重启
		systemctl daemon-reload
	示例:
		vim /etc/systemd/system/bak.service
			[Unit]
			Description=backup /etc
			Requires=atd.service
			[Service]
			Type=simple
			ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"
			[Install]
			WantedBy=multi-user.target
		systemctl daemon-reload
		systemctl start bak
```		
##设置内核参数
```
	只影响当次启动
	启动时,在linux16 行后添加
	systemd.unit=desired.target
	systemd.unit=emergency.target
	systemd.unit=recure.target
	recure.target比emergency支持更多的功能,例如日志等
```
##启动排错
```
	文件系统损坏,先尝试自动修复,失败则进入emergency shell,提示用户修复
	在/etc/fstab 不存在对应的设备和UUID等一段时间,如不可用,进入emergency shell
	在/etc/fstab 不存在对应挂载点systemd尝试创建挂载点,否则提示进入emergency shell.
	在/etc/fstab 不正确的挂载选项提示进入emergency shell
```
##破解CentOS7 的root 口令
```
	方法一
		启动时任意键暂停启动
		按e 键进入编辑模式
		将光标移动linux16 开始的行,添加内核参数rd.break
		按ctrl-x 启动
		mount –o remount,rw /sysroot
		chroot /sysroot
		passwd root
		touch /.autorelabel
		exit
		reboot
	方法二
		启动时任意键暂停启动
		按e 键进入编辑模式
		将光标移动linux16 开始的行,改为rw init=/sysroot/bin/sh
		按ctrl-x 启动
		chroot /sysroot
		passwd root
		touch /.autorelabel
		exit
		reboot
		
```
##修复GRUB2
```
	GRUB “the Grand Unified Bootloader” ”
		引导提示时可以使用命令行界面
		可从文件系统引导
	主要配置文件 /boot/grub2/grub.cfg
	修复配置文件
		grub2-mkconfig > /boot/grub2/grub.cfg
		grub2-mkconfig  -o /boot/grub2/grub.cfg
	修复grub
		grub2-install /dev/sda (BIOS 环境)
		grub2-install (UEFI 环境)
	调整默认启动内核
		vim /etc/default/grub
		GRUB_DEFAULT=0
```
posted @ 2018-02-14 00:01  shenxm  阅读(315)  评论(0编辑  收藏  举报