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

[经验分享] CentOS系列开机启动流程

[复制链接]

尚未签到

发表于 2018-4-26 13:45:47 | 显示全部楼层 |阅读模式
      在我们使用Linux操作系统的时候,只要按下电源键,就会出现一些乱七八糟的代码,过一会就会出现登陆界面,那么在这期间系统自己都做了什么?现在就说一下在这这段时间系统做了些什么。
      系统初始化流程:                                        POST-->Bootsequence(BIOS)-->Bootloader(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()/sbin/init
    第一步:加电自检(POST·)
     系统通电之后,进行硬件自检,是在电脑CPU的控制下,将RAM芯片中的某个程序映射到ROM地址空间,并完成其中的指令检查硬件是否健康。例如CPU设备,网卡,声卡等设备是否完好。当检查完成后,硬件和基本硬件都没有问题,则开始启动BIOS。
      第二步:引导启动 Bootsequence(BIOS)
      系统加电自检过程结束后,系统的控制权就转交Bootloader。Bootloader存储于硬盘上,这个时候机器不能获取外部的存储或者网络信息,譬如日期,时间等一些重要的参数都是从CMOS中获取的。说到了CMOS,那么什么是CMOS呢?CMOS全称是Complementary Metal-Oxide Semiconductor(本意是指互补金属氧化物半导体存储嚣,是一种大规模应用于集成电路芯片制造的原料)是微机主板上的一块可读写的RAM芯片,主要用来保存当前系统的硬件配置和操作人员对某些参数的设定。硬盘也必须格式成某种格式的文件系统才能在操作系统下存储东西,那么,引导程序想要加载硬盘上的操作系统就必须有支持这个文件系统格式的驱动才行,遗憾的是区区446K的空间并不能做到,因此在MBR随后的扇区中会有这个驱动程序,就会去第二段64位字节中去寻找这个驱动,而剩下的两个字节就是校验字节,若返回值为55AA,则有效。在Linux中通常在/boot/vmlinuz-版本-发型号,然后内核就被解压加载到内存中了。
      第三步:加载kernel
      将内核导入后,系统进入自身初始化的环节,首先会探测可识别的所有硬件设备,然后就要加载硬件驱动程序(可能会借助randisk),接下来会以只读的方式挂载根文件系统,最后会运行用户空间的第一个程序(/sbin/init)
      init程序在目前centos各发行版的类别又不一样。
              在centos5上:Sysv init
                  配置文件:/etc/initab
              在centos6上:Upstart
                  配置文件:/etc/initab    /etc/init/*.conf
              在centos7上:systemd
                  配置文件:/usr/lib/systemd/system/,    /etc/systemd/system
          randisk又是什么呢
              其是linux内核的特性之一:使用缓存来加速对磁盘上的文件访问
              centos5:initrd    工具程序:mkinitrd
              centos6、7:initramfs    工程程序:dracut,mkinitrd
      第四步:引导加载器(GRUB加载)
      对于grub,它包含了文件系统的知识。他能从ext2或ext3文件系统中加载linux内核。一旦bootloader完成启动加载器阶段,并能找到引导程序的位置,第一段启动加载引导程序到内存中开始第二段。GRUB引导加载器阶段通过将本来两段的bootloader转换成三个阶段的bootloader。
      stage1:BIOS加载mbr里面的GRUB,因为只有446个字节,不能实现太多的功能,所以就要加载滴1.5个阶段的文件。
      stage1.5:加载识别文件系统的程序,来识别文件系统,不加载就无法识别文件系统,找不到boot,就不能把boot分区设置成LVM。
      stage2:开始寻找内核并启动内核

    第四步:加载kernel
      geub把内核加载到内存后运行,内核一般都是压缩的,首先就要解压。内核加载到内存的时候,文件系统还不能使用,他使用的是Bootloader加载进内存时的initramfs。系统将解压后的内核放置在内存中,调用函数来启动一系列的初始化以及各种设备。
      第五步:读取initrd/etc/inittab配置文件
      配置文件/etc/inittab
          每一行定义一种action以及与之对象的process
              id:一个任务的标识符
              runlevel:在那些级别启动此服务
              action:在什么条件下启动此任务
              process:任务
          action:   
              wait:等待切换至此任务所在的级别时执行一次
              respawn:一旦此任务终止,就自动重新启动之
              initdefault:设定默认运行级别,此时,process省略
              sysinit:设定系统初始化方式,此处一般指定/etc/rc.d/rc.sysinit脚本
          K*:要停止的服务:K##,优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的
          S*:要启动的服务:S##,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动
  

          chkconfig:管控/etc/init.d/每个服务脚本在各个级别下的启动或关闭状态
              查看:chkconfig --list name

              添加:chkconfig --add name
              删除:chkconfig --del name  
              修改指定的连接类型:
                  chkconfig [--level levels] name <on|off|restat>
                      --level levels:指要控制的级别:默认为2345
      在内核加载完后,启动的第一个进程是/sbin/init,init进程会读取/etc/initab,这个进程最主要的功能是准备软件环境,所有的动作都在/etc/initab中配置,执行initab来设定系统的运行默认级别,并用init #来改变系统默认级别。
      系统的级别:0--7
          0:关机,shutdown   

          1:单用户模式。root用户,无需认证,维护模式
          2:多用户模式:会启动网络功能,但不会启动NFS,维护模式
          3:多用户模式:完全功能模式,文本界面
          4:预留级别:目前无特别使用目的,但习惯以三级别使用
          5:多用户模式:完全功能模式,图形界面
          6:重启:reboot
      第六步:启动系统服务/etc/rc.d/rc/sysinit
          

      执行/etc/rc.d/rc/sysinit的初始化会做很多的设置:
          1:设置主机名
          2:设置欢迎信息
          3:激活udev和selinux
          4:挂载/etc/fstab文件中定义的所有文件系统
          5:检测根文件系统,并以读写方式重新挂载根文件系统
          6:设置系统时钟
          7:根据/etc/sysctl.conf文件设置内核参数
          8:激活LVM和软RAID设备
          9:激活swap设备
          10:加载额外设备的驱动程序
          11:清理操作
     
  OST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端

     

          

  

运维网声明 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-452369-1-1.html 上篇帖子: CentOS启动流程详解 下篇帖子: CentOS 7实现DNS+DHCP动态更新
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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