Linux Centos7 启动流程分析

先看两张图,对照图来分析

 

 第一步、硬件启动阶段

详细请看图

第二步、GRUB2引导阶段

        从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2。

  这一步的流程:显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub2/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。

  在这里grub.cfg配置文件已经比较复杂了,但并不用担心,到了CentOS7中一般是使用命令进行配置,而不直接去修改配置文件了。不过我们可以看到grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成。

  一般修改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。

 第三步、内核引导阶段

 这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd

第四步、systemed初始化阶段(又叫系统初始化阶段)

CentOS7中我们的初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备操作系统。接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动

  注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。

        System概述(了解):systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的以来关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。

  与多数发行版使用的System V风格的init相比,systemd采用了以下的新技术:A.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;B.用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

        unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息。(也就是CentOS6中的服务器启动脚本)

(1)./etc/systemd/system/default.target

  这是一个软链接,和默认运行级别相关

# ll /etc/systemd/system/default.target

lrwxrwxrwx. 1 root root 36 12月  9 15:47 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

我们可以到这个目录下看看

# cd /lib/systemd/system/

# ls *.target

anaconda.target            local-fs.target           runlevel2.target

basic.target               machines.target           runlevel3.target

bluetooth.target           multi-user.target         runlevel4.target

cryptsetup-pre.target      network-online.target     runlevel5.target

cryptsetup.target          network-pre.target        runlevel6.target

ctrl-alt-del.target        network.target            shutdown.target

default.target             nfs-client.target         sigpwr.target

emergency.target           nss-lookup.target         sleep.target

final.target               nss-user-lookup.target    slices.target

getty-pre.target           paths.target              smartcard.target

getty.target               poweroff.target           sockets.target

graphical.target           printer.target            sound.target

halt.target                rdma-hw.target            suspend.target

hibernate.target           reboot.target             swap.target

hybrid-sleep.target        remote-cryptsetup.target  sysinit.target

initrd-fs.target           remote-fs-pre.target      system-update.target

initrd-root-fs.target      remote-fs.target          timers.target

initrd-switch-root.target  rescue.target             time-sync.target

initrd.target              rpcbind.target            umount.target

iprutils.target            rpc_pipefs.target         virt-guest-shutdown.target

kexec.target               runlevel0.target

local-fs-pre.target        runlevel1.target

这里可以看到runlevel开头的target文件,对应着CentOS6的启动级别,不过一样是软链接,指向了同目录下的其他文件,也算一种向下兼容吧

# ll runlevel*.target

lrwxrwxrwx. 1 root root 15 4月   5 22:10 runlevel0.target -> poweroff.target

lrwxrwxrwx. 1 root root 13 4月   5 22:10 runlevel1.target -> rescue.target

lrwxrwxrwx. 1 root root 17 4月   5 22:10 runlevel2.target -> multi-user.target

lrwxrwxrwx. 1 root root 17 4月   5 22:10 runlevel3.target -> multi-user.target

lrwxrwxrwx. 1 root root 17 4月   5 22:10 runlevel4.target -> multi-user.target

lrwxrwxrwx. 1 root root 16 4月   5 22:10 runlevel5.target -> graphical.target

lrwxrwxrwx. 1 root root 13 4月   5 22:10 runlevel6.target -> reboot.target

        可以看到我的default.target与runlevel5.target指向的是同一个文件,可以看出我的默认运行级别是5。

(2)./usr/lib/systemd/system/

这个目录存储每个服务的脚本,类似CentOS6的/etc/init.d/。

(2)./run/systemd/system/

系统执行过程中产生的脚本。

(3)./etc/systemd/system/

类似于CentOS6的/etc/rc.d/rc#.d/SXX类文件的功能,管理员建立的执行脚本,大部分是软链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海海向前冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值