设为首页 收藏本站
查看: 917|回复: 0

[经验分享] centos7的启动过程

[复制链接]

尚未签到

发表于 2018-4-21 11:34:37 | 显示全部楼层 |阅读模式

  •   开机启过程
  •   POST—>BOOT    SEQUENCE—> BOOTLOADER—>KERNEL +    INITRAMFS(INITRD)—>ROOTFS—>/sbin/init
  •   POST:加电自检

    •   当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行检查,检查内存,CPU等等吧,当检测到错误的时候机器会中断或者启动不了,这个做过电脑维护的人都知道,内存氧化可导至开不了机,还有的机器如果没插鼠标键盘自检也不会通过卡在那里了,不会继续往下走。

  •   Boot    sequence:选择引导顺序

    •   当自检通过后,接着就要选择引导介质或方式,是通过光盘启动,硬盘启动,网络启动,还是U盘启动,这些也是在BIOS中设定的,所以设定的第一启动项是哪个就从那个开始引导,这个装过WINDOWS的都很熟悉了。

  •   Bootloader:引导加载器

    •   确定引导介质后便开始从介质中装载引导程序如grub2,这个是一个微小程序,我们知道MBR引导记录大小为512字节,其中前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核。
    •   grub2就是Linux中Bootloader程序,由于MBR记录限制,所以grub2分为两个部分:
    •   1.在MBR引导记录中,大小为446字节,主要功能是引导启动介质的grub主体文件
    •   2.partition,/boot/grub[2],此为grub的主体。

  •   KERNEL +    INITRAMFS(INITRD)—>ROOTFS :加载内核

    •   这时候kernel开始初始化,探测可识别的硬件设备,加载硬件启动程序。以只读方式加载根文件系统
    •   kernel在内存中加载时,为了模拟系统环境,会生成一个ramdisk文件,来进行下一步操作,等到加载到真正的根文件系统时,就会退出ramdisk,切换到真正的根文件系统中去。
    •   ramdisk:内存上临时虚拟的系统
    •   ramdisk(虚拟磁盘,双缓冲,双缓存)---->     ramfs(虚拟文件系统)
    •   centos5:initrd
    •   工具程序:mkinitrd
    •   centos6,7:initramfs
    •   工具程序:dracut,mkinitrd

  •   /sbin/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

  •   至此,内核空间就已经启动完毕,内核启动完成接着开始启动用户态启动过程。systemd是个守护进程,pid号为1,后面所有启动的服务或进程都是systemd的子进程及子进程的子进程。
  •   那么用户态的启动顺序又是什么样的呢?

    •   设置默认允许级别—>初始化脚本,完成系统初始化--->关闭及启动对应级别下的服务----->设置登录终端----->[启动图形终端]



  •   Systemd新特性:

    •   系统引导时实现服务并行启动,没有顺序之分
    •   按需激活进程
    •   支持系统状态快照
    •   基于依赖关系定义服务控制逻辑

  •   关键特性:

    •   基于socket的激活机制:socket与服务程序分离;按需激活程序或服务,可并行启动
    •   基于bus的激活机制:
    •   基于device的激活机制:当某个硬件设备变得可用时就可激活某设备
    •   基于path的激活机制
    •   系统快照:保存各unit的当前状态信息于持久存储设备中
    •   向后兼容sysv     init脚本

  •   不兼容:

    •   systemctl命令固定不变,非由systemd启动的服务,systemctl无法与之通信

  •   核心概念:unit

    •   配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的信息,保存至:
    •   /usr/lib/systemd/system
    •   /run/systemd/system
    •   /etc/systemd/system

  •   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,用于定义文件系统中的一个文件或目录

  •   管理系统服务

    •   启动:systemctl     start name.service
    •   停止:systemctl     stop name .service
    •   重启:systemctl     restart name.service
    •   重载:systemctl     reload name.service
    •   条件式重启:systemctl     try-restart name.service
    •   查看某服务当前是否运行:systemctl     is-active name.service
    •   查看所有已经激活的服务:systemctl     list-units –type service systemctl list-units –type service –-all
    •   开机自启动:systemctl     enable name.service
    •   开机不启动:systemctl     disable name.service
    •   查看所有服务开机自启动状态:systemctl     list-unit-files –-type service
    •   查看服务是否开机自启:systemctl     is-enabled name.service
    •   查看服务的依赖关系:systemctl     list-dependencies name.service
    •   禁止设定为开机自启:systemctl     mask name.service
    •   取消禁止设定为开机自启:systemctl     unmask name.service



  •   Target    units:(模拟运行级别)

    •   unit配置文件,以.target后辍名结尾
    •   关机:runlevel0.target,poweroff.target
    •   救援:runlevel1.target,rescue.target
    •   多用户:multi-user.target
    •   图形:graphical.target
    •   重启:reboot.target
    •   级别切换:systemctl     isolate name.target
    •   查看级别:systemctl     list-units –-type target       systemctl     get-default
    •   设置级别:systemctl     set-default name.target
    •   切换至紧急救援模式:systemctl     rescue
    •   切换至emergency模式:systemctl     emergency(服务不加载不启动,驱动不加载,更彻底)

  •   其它常命令

    •   关机:systemctl     halt,systemctl poweroff
    •   重启:systemctl     reboot
    •   挂起:systemctl     suspend
    •   快照:systemctl     hibernate
    •   快照并挂起:systemctl     hybrid-sleep



  •   常规启动流程
用粗体下划线标识的目标单元经常被用作启动目标。有两种方法可以指定启动目标:
(1)使用 systemd.unit= 内核命令行参数(参见systemd手册);
(2)使用default.target 软连接。
因为 timers.target 以异步方式包含在 basic.target 中,所以 timer 单元可以依赖于在 basic.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 ...)
             |                  |                  |                    |                    |
             \__________________|_________________| ___________________|____________________/
                                                 \|/
                                                  v
                                           sysinit.target
                                                  |
             ____________________________________/|\________________________________________
             /                  |                  |                    |                    \
             |                  |                  |                    |                    |
             v                  v                  |                    v                    v
       (各个 timers)      (各个 paths)             |             (各个 sockets)        rescue.service
             |                  |                  |                    |                    |
             v                  v                  |                    v                    v
       timers.target      paths.target             |             sockets.target        rescue.target
             |                  |                  |                    |
             v                  \_________________ |___________________/
             .                                   \|/
             . . . . . . . . . . . . . .. . . . . v
                                            basic.target
                                                  |
             ____________________________________/|                                emergency.service
             /                  |                  |                                        |
             |                  |                  |                                        v
             v                  v                  v                                 emergency.target
         display-        (图形界面所必须    (各个系统服务)
     manager.service      的各个系统服务)          |
             |                  |                  v
             |                  |         multi-user.target
             |                  |                  |
             \_________________ | _________________/
                              \|/
                               v
                       graphical.target


  •   initrd 启动流程
                                                    basic.target
                                                  |                                emergency.service
                           ______________________/|                                        |
                           /                       |                                        v
                           |                  sysroot.mount                         emergency.target
                           |                       |
                           |                       v
                           |             initrd-root-fs.target
                           |                       |
                           |                       v
                           v            initrd-parse-etc.service
                    (各个自定义的                  |
                   initrd services)                v
                           |            (sysroot-usr.mount 以及
                           |            fstab 中带有 x-initrd.mount
                           |               标记的各个挂载点)
                           |                       |
                           |                       v
                           |                initrd-fs.target
                          \______________________ |
                                                 \|
                                                  v
                                             initrd.target
                                                  |
                                                  v
                                        initrd-cleanup.service
                                (使用isolates 启动 initrd-switch-root.target)
                                                  |
                                                  v
                           ______________________/|
                           /                       v
                           |       initrd-udevadm-cleanup-db.service
                           v                       |
                   (各个自定义的                   |
                  initrd services)                 |
                          \______________________ |
                                                 \|
                                                  v
                                      initrd-switch-root.target
                                                  |
                                                  v
                                      initrd-switch-root.service
                                                  |
                                                  v
                                        切换到主机上的操作系统

  •   关机流程
systemd系统在关机时同样遵循固定的流程,具体如下图
(与所有系统服务互斥)  (与所有文件系统 mounts, swaps, cryptsetup devices 互斥)
                              |                                     |
                              v                                     v
                       shutdown.target                        umount.target
                              |                                      |
                             \______________________  _____________/
                                                    \ /
                                                     v
                                            (各个底层 services)
                                                     |
                                                     v
                                               final.target
                                                     |
               _____________________________________/\_________________________________
               /                         |                        |                      \
               |                         |                        |                      |
               v                         v                        v                      v
    systemd-reboot.service   systemd-poweroff.service   systemd-halt.service   systemd-kexec.service
               |                         |                        |                      |
               v                         v                        v                      v
        reboot.target           poweroff.target          halt.target          kexec.target
用粗体下划线标识的目标单元经常被用作关机目标。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-449997-1-1.html 上篇帖子: centos 7 安装python3和PIP3 下篇帖子: Centos6 系统启动过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表