zoukankan      html  css  js  c++  java
  • CentOS 6 系统启动流程

    第一阶段:

    BIOS启动引导

    主板加电,系统自动载入BIOS(Basic Input Output System)系统

    BIOS载入CMOS,读取CMOS中设定的硬件工作参数

    BIOS进行POST自检,对各种硬件设备进行检测.

    BIOS进行硬件检测的初始化

    BIOS定义开机设备顺序


    第二阶段:

    bootloader(grub)

    操作系统启动的第一个重要部分是核心的启动.而核心的启动需要让系统知道核心在哪里.

    这时需要Boot loader来实现核心的载入.

    所以BIOS下一步是找到Boot loader并启动.


    stage1(MBR)

    通常Boot loader是被固定装载在启动磁盘的第1个扇区(sector)的512字节范围内

    这512字节的区域的名字就叫做MBR(Master Boot Record,主引导记录)

    linux 5,6使用的Boot loader的名字就叫grub

    但由于其特殊性,grub的组成部分是被分散安装在磁盘的多个区域的.第一个扇区512字节中的446字节就是grub的stage1内容.

    MBR就是stage1就是第一扇区,其中内容非常简单,仅仅是告诉BIOS,去加载第二扇区的内容并执行


    stage1.5

    简单来说第二扇区的内容也很简单,就是去读第三扇区的stage1.5,执行第三扇区内容后,内存中就有了文件系统支撑代码,此时便能够通过文件系统查找文件了.

    第二扇区的内容有两种情况

    1)内容是grub的stage1.5,stage1.5的内容与/boot/grub/xxx_stage1_5文件源码的开头512字节内容相同,xxx是什么取决于启动磁盘的文件系统,比如e2fs_stage1_5.而这部分内容的作用就是取出第三扇区之后的部分内容,这些内容便是文件系统支撑代码,于是当stage1.5被执行后,系统便可以识别文件系统,并通过文件系统访问磁盘文件了.此后会读取/boot/grub/stage2文件将stage2文件载入系统并执行.

    2)第二扇区直接加载存放在/boot分区启动扇区的stage2而不是/boot/grub/stage2.此时如/boot/grub/stage2丢失,也不会影响启动.系统默认是这个模式,修复grub时,在grub交互式模式中,使用install命令可以恢复这种模式.

    通常我们做实验时第一次删除了/boot/grub/stage2文件后,系统是可以正常启动的.因为默认是上面第二种情况,而通常我们修复的时候使用了grub三种安装方式中的前两种比较快捷方便的方法即: 1.grub-install 2.grub>setup ,而这两种方法会把第二扇区恢复为上面的第一种情况.这时如果再删除/boot/grub/stage2文件,则无法启动并且会报 error 15 错误. 如果想恢复到第二种模式,需要使用grub的install命令,即grub的第3种安装方法,grub>install. 具体使用方法可以gg暂不详述.


    stage2

    系统执行stage2,stage2会通过grub.conf配置文件生成启动菜单并读取内核,initrd,解压缩并载入内存.


    第三阶段:

    内核

    此时内核已启动,开始检测硬件,但后续的工作还需要initrd来协助.initrd是一个基于内存的虚拟文件系统 (Initial RAM Filesystem) 在Centos5上的具体文件名为 /boot/initrd ,Centos 6中为 /boot/initramfs ,执行后会生成一个临时根目录,里面包含了除集成在kernel以外的,当前系统所需的各种驱动程序.系统会加载这些驱动,最后释放这个虚拟文件系统,切换到真正的根上并执行系统1号进程/sbin/init.


    第四阶段:

    init

    init读取配置文件/etc/inittab,按照配置文件执行一系列初始化操作

    1.初始化脚本/etc/rc.d/rc.sysinit

    (1) 设置主机名

    (2) 设置欢迎信息

    (3) 激活udev和selinux

    (4) 挂载/etc/fstab文件中定义的文件系统

    (5) 检测根文件系统,并以读写方式重新挂载根文件系统

    (6) 设置系统时钟

    (7) 激活swap设备

    (8) 根据/etc/sysctl.conf文件设置内核参数

    (9) 激活lvm及software raid设备

    (10) 加载额外设备的驱动程序

    (11) 清理操作

    2.确定运行级别

    3.运行/etc/rc.d/rcN.d/下的服务,N为数字,对应准备启动的系统运行级别,里面的内容为K和S开头的指向/etc/rc.d/init.d目录下的服务脚本.S开头为开机启动的服务,K开头的为关闭当前运行模式时运行需要执行的脚本(切换模式,关机等),S或K后面的数字越小,优先级越高.

    4.运行/etc/rc.d/rc.local脚本,这个脚本是用户自定义执行脚本,S99local就是rc.local的软连接.

    5.最后执行终端或X-window.之后用户便可以登陆

  • 相关阅读:
    SpriteKit改变Node锚点其物理对象位置不对的解决
    亲热接触Redis-第二天(Redis Sentinel)
    Java设计模式(二)-单例模式
    Android—构建安全的Androidclient请求,避免非法请求
    自己主动化測试使用mybatis更新数据库信息实例
    UML回想-通信图
    第十六课 数组的引入 【项目1-5】
    被这个样式惊醒
    netty自定义解码器
    解决netty客户端接收报文不完整的情况
  • 原文地址:https://www.cnblogs.com/Q--T/p/8167826.html
Copyright © 2011-2022 走看看