(转)CentOS 7系统详细开机启动流程和关机流程
CentOS 7系统详细开机启动流程和关机流程
原文:http://blog.csdn.net/yuesichiu/article/details/51350654
名称
bootup - 系统启动流程
描述
在系统启动过程中要涉及多个不同的组件。按下开机按钮后,首先BIOS/UEFI做最基本的硬件自检与初始化,然后加载预设/手动选择的磁盘/网络上的引导加载器(例如GRUB2),引导加载器进一步从磁盘/网络上加载操作系统内核(例如Linux)。对于Linux来说,内核将会(可选的)解压一个initrd(initial RAM disk)镜像(可以用dracut类的工具生成),并执行由"rdinit="内核引导参数指定的init程序(例如systemd)以寻找并挂载根文件系统。 完成根文件系统的挂载之后,内核启动由"init="内核引导参数指定的init程序(例如systemd)以接管系统的控制权。该init程序将会负责检测所有其他的硬件设备、挂载必要的文件系统、启动所有必要的服务,等等。关机时,init程序将会停止所有服务、卸载所有文件系统、(可选的)返回initrd环境卸载根文件系统,最后关闭电源。
常规启动流程
当成功挂载了"root="内核引导参数指定的根文件系统之后,内核将启动由"init="内核引导参数指定的init程序,从这个时间点开始,即进入了"常规启动流程":检测硬件设备并加载驱动、挂载必要的文件系统、启动所有必要的服务,等等。对于systemd系统来说,上述"init程序"就是systemd进程,而整个"常规启动流程"也以几个特殊的 target 单元(详见 )作为节点,被划分为几个阶段性步骤。在每个阶段性步骤内部,任务是高度并行的,所以无法准确预测其中的单元的顺序,但是不同阶段之间的先后顺序总是固定的。当启动系统时,systemd 将会以 default.target 为启动目标,借助单元之间环环相扣的依赖关系,即可完成"常规启动流程"。通常,default.target 只是一个指向 graphical.target(图形界面) 或 multi-user.target(文本控制台) 的软连接。为了强制启动流程的规范性以及提高单元的并行性,预先定义了一些具有特定含义的 target 单元。下面的图表解释了这些具有特定含义的 target 单元之间的依赖关系以及各自在启动流程中的位置。图中的箭头表示了单元之间的依赖关系与先后顺序,整个图表按照自上而下的时间顺序执行。local-fs-pre.target|v(各个 mounts 与 (各个 swap (各个加密块设备fsck services) devices) devices) (各个底层服务 (各个底层API虚拟| | | services: udevd, 文件系统 mounts:v v v tmpfiles, random mqueue, configfs,local-fs.target swap.target cryptsetup.target seed, sysctl ...) debugfs ...)| | | | |\__________________|_________________ | ___________________|____________________/\|/vsysinit.target|____________________________________/|\________________________________________/ | | | \| | | | |v v | v v(各个 timers) (各个 paths) | (各个 sockets) rescue.service| | | | |v v | v vtimers.target paths.target | sockets.target rescue.target| | | |v \_________________ | ___________________/. \|/. . . . . . . . . . . . . . . . . . . vbasic.target|____________________________________/| emergency.service/ | | || | | vv v v emergency.targetdisplay- (图形界面所必须 (各个系统服务)manager.service 的各个系统服务) || | v| | multi-user.target| | |\_________________ | _________________/\|/vgraphical.target用粗体下划线标识的目标单元经常被用作启动目标。有两种方法可以指定启动目标:(1)使用 systemd.unit= 内核命令行参数(参见systemd手册);(2)使用 default.target 软连接。因为 timers.target 以异步方式包含在 basic.target 中,所以 timer 单元可以依赖于在 basic.target 之后才启动的服务。
initrd 启动流程
在initrd内部,也可以将 systemd 用作init程序(由"rdinit="内核引导参数指定),此时 initrd.target 将是默认目标。initrd内部启动流程的上半部分与前一小节 basic.target 之前的部分完全相同,随后的启动流程将如下图所示。如果成功的将根文件系统挂载到 /sysroot 目录,那么 sysroot.mount 单元将被激活,然后进一步激活 initrd-root-fs.target 目标。initrd-parse-etc.service 将会分析 /sysroot/etc/fstab 文件以挂载 /usr (若需要)与带有 x-initrd.mount 标记的挂载点。这些挂载点都将被挂载到 /sysroot 之下,然后流程到达 initrd-fs.target 目标。再接下来 initrd-cleanup.service 将会使用/usr/bin/systemctl --no-block isolate initrd-switch-root.target命令启动 initrd-switch-root.target 目标。因为 isolate 表示立即停止所有在新的目标单元中不需要的进程,所以此动作实际上是为接下来切换根目录做预先的准备(也就是清理环境)。最后,激活 initrd-switch-root.service 服务,将系统的根目录切换至 /sysroot 目录。(之前的流程与上一小节完全相同):vbasic.target| emergency.service______________________/| |/ | v| sysroot.mount emergency.target| || v| initrd-root-fs.target| || vv initrd-parse-etc.service(各个自定义的 |initrd services) v| (sysroot-usr.mount 以及| fstab 中带有 x-initrd.mount| 标记的各个挂载点)| || v| initrd-fs.target\______________________ |\|vinitrd.target|vinitrd-cleanup.service(使用 isolates 启动 initrd-switch-root.target)|v______________________/|/ v| initrd-udevadm-cleanup-db.servicev |(各个自定义的 |initrd services) |\______________________ |\|vinitrd-switch-root.target|vinitrd-switch-root.service|v切换到主机上的操作系统
关机流程
systemd 系统在关机时同样遵循固定的流程,具体如下图所示:(与所有系统服务互斥) (与所有文件系统 mounts, swaps, cryptsetup devices 互斥)| |v vshutdown.target umount.target| |\______________________ _____________/\ /v(各个底层 services)|vfinal.target|_____________________________________/ \_________________________________/ | | \| | | |v v v vsystemd-reboot.service systemd-poweroff.service systemd-halt.service systemd-kexec.service| | | |v v v vreboot.target poweroff.target halt.target kexec.target用粗体下划线标识的目标单元经常被用作关机目标。
转载于:https://www.cnblogs.com/liujiacai/p/8306784.html
(转)CentOS 7系统详细开机启动流程和关机流程相关推荐
- centos7开机启动自定义脚本_在Centos 7系统中开启启动自定义脚本的方法
以下为你提供在Centos 7系统中开启启动自定义脚本的两种方法,这两种方法均已在centos 7系统上验证成功过. 编写脚本文件 1.创建脚本文件 touch test.sh 2.编写脚本内容 #! ...
- 电脑开机启动php,window_Win10开机自动启动在哪?win10如何设置软件开机启动?,windows 10系统的开机启动项如果 - phpStudy...
Win10开机自动启动在哪?win10如何设置软件开机启动? windows 10系统的开机启动项如果过多的话,会影响电脑的开机速度,而WIN10系统同以往的Window操作系统开机启动不一样,在开始 ...
- Win10系统自定义开机启动项
Win10系统自定义开机启动项 一.打开用户启动文件夹 1.win + r 打开命令行 2.输入shell:startup命令然后点击"确定" 3.将自己要添加的应用快捷程序复制到 ...
- linux系统下开机启动流程
在了解开机启动流程之前,还是得先了解一些磁盘的基本知识.磁盘主要由盘片,机械手臂,磁头,主轴马达构成.盘片就是存储数据的物理单位了.然后盘片上我们可以分成扇区(sector)和柱面(cylinder) ...
- 简述linux开机启动进程,Linux系统启动流程简述
一.第一阶段:硬件引导启动 1.Bios上电自检, 初始化硬件:显卡,内存,磁盘 2.根据Bios设置找到启动介质,初次安装linux系统一般是CD-ROM或者U盘启动,已安装Linux系统选择本地H ...
- 安装win7系统不能开机启动服务器,win7系统开机启动项不能加载的原因分析及解决...
开机启动项是每台电脑都有的东西,就是多和少的问题的,很多人开机的时候喜欢加载很多的启动项,其实这也没什么不好的.现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件,安全卫士 ...
- 【Win10开机软件自启动】win10系统自定义开机启动项的方法
描述: 如题,在win10系统中如何增加自己想要开机启动的软件 方法 1.在我的电脑地址栏中输入,按回车找到目录 %programdata%\Microsoft\Windows\Start Menu\ ...
- xp系统禁止开机启动服务器,win xp开机启动项怎么设置-win xp关闭开机启动项的方法 - 河东软件园...
所谓的启动项,也就是在我们开启电脑的时候系统自动在前台或者是后台所运行的程序.而当操作的系统进行登陆以后,就会在进程表中出现各式各样的进程.然而在我们开启电脑的时候许多的程序都会自启动,给我们带来了不 ...
- xp系统禁止开机启动服务器,xp系统怎么设置开机启动项 xp系统如何禁止开机启动软件...
当我们在使用电脑的时候,我们可以设置某些软件在我们开机时并启动,这样就非常方便了,可是XP系统怎么设置开启启动项呢?其实很简单,下面小编为大家带来xp系统设置开机启动项的步骤教程,不会设置的朋友可以参 ...
最新文章
- NVIDIA Jetson 系列产品开发相关文档,TAO、TLT、NGC
- Global.asax使用1
- 学术论文常用英文句型
- 风险评估资产重要性识别_如何有效的进行风险评估?
- 结合file和iconv命令转换文件的字符编码类型
- DevOps案例研究:庖丁解牛,剖析Google持续交付之道
- php boolean 全大写还是全小写,【PHP培训】PHP为什么大小写规则是如此不规则?
- docker保存对容器的修改
- java jsessionid 会话,如何使用JSESSIONID手动加载Java会话?
- cuzysdk version 3.1 更新说明
- websphere mq 查看队列中是否有数据_如果面试官再问你消息队列,就把这篇甩给他!...
- [Python] itertools.islice(iterable, start, stop[, step]) 创建迭代器并返回所选元素
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_12-webpack研究-webpack安装
- 3G时代日本手机咸鱼难翻身
- 011游移方位惯导系统的力学编排之指令角速度
- [译] 为什么加密货币泡沫会破裂?
- 手机通讯录excel转换vcf
- linux ssl 双向认证 脚本,SSL双向认证的例子
- “手绘爷爷”:花甲之年再续“冰城之恋”
- 信息系统分析与设计 机票预定管理系统