图片来自于https://blog.csdn.net/qq_27754983/article/details/75212666

1. UEFI或BIOS启动

服务器加电后,CPU 自动重置成初始状态,启动 BIOS boot program 开机程序。

2. POST自检

接着就会开始实行 POST,BIOS 或 UEFI 进行硬件检查的阶。

3. MBR引导

自检硬件没有问题时候,这里以 BIOS 为例,BIOS 将会直接去找硬盘的第一个扇区,找到前446字节,将 MBR 加载到内存中,MBR 将告诉程序下一阶段去哪里找系统 grub 引导。此阶段属于 grub 的第一阶段。grub 还有1.5阶段和2阶段。

4. grub引导

grub 第1.5和2阶段,信息默认存放在扇区中,如果使用 grub-install 生成的2阶段的文件是存放在 /boot 分区中的。
为了加载内核系统,不得不加载 /boot 分区,而加载 /boot 分区,需要有 /boot分 区的驱动,/boot 分区驱动是放在 /boot 分区中的,啊,我们好像进入了死循环了,Linux 是怎么解决的呢?就是靠放在1.5阶段中的数据,是放在第一个扇区后的后续扇区中,具体占用多少字节,不太清楚,只知道1.5阶段和2阶段总共27个扇区。

stage1.5:
mbr 之后的扇区,识别 stage2 所在的分区上的文件系统。

stage2:
开机启动的时候看到的 Grub 选项、信息,还有修改 GRUB 背景等功能都是 stage2 提供的,stage2 会去读入 /boot/grub/grub.conf 或者 menu.lst 等配置文件。

5. 读取grub.conf文件

读取 grub.conf 文件以确定内核启动的参数,准备启动内核。

6. 加载内核和initramfs模块

加载内核,核心开始解压缩,启动一些最核心的程序。

➜  ~  ll -h /boot/vmlinuz-3.10.-.el7.x86_64
-rwxr-xr-x. root root 5.0M Nov /boot/vmlinuz-3.10.-.el7.x86_64

加载 initramfs 文件,在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作,例如加载第三方 driver 等。

➜  ~ ll -sh /boot/initramfs-3.10.-.el7.x86_64.img
19M -rw-r--r--. root root 19M Oct /boot/initramfs-3.10.-.el7.x86_64.img

7. 启动systemd进程

1) 执行initrd.target

包括挂载 /etc/fstab 文件中的系统,此时挂载后,就可以切换到根目录了

2) 从 initramfs 根文件系统切换到磁盘根目录

3) 选定运行级别

systemd 执行默认 target 配置 centos7 表面是有“运行级别”这个概念,实际上是为了兼容以前的系统,每个所谓的“运行级别”都有对应的软连接指向,默认的启动级别时 /etc/systemd/system/default.target ,根据它的指向可以找到系统要进入哪个模式 模式:

0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target

4) systemd 执行 sysinit.target

在 CentOS6 上是被叫做 rc.sysint 程序,初始化系统及 basic.target 准备操作系统

5) systemd 启动 multi-user.target 下的本机与服务器服务

6) systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local

参考链接:

https://blog.csdn.net/qq_27754983/article/details/75212666

centos7启动流程(从加电开始)的更多相关文章

  1. Centos7启动流程及systemd中Nginx启动配置

    Centos7启动流程: 1.post(Power-On-Self-Test) 加电自检 主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主 ...

  2. Linux操作系统-CentOS7启动流程和服务管理

    Linux操作系统-CentOS7启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.systemd POST --> Boot Sequence --&g ...

  3. CentOS7启动流程

    同样我也找了一张CentOS7的启动流程图. 第一步.硬件启动阶段 这一步和CentOS6差不多,详细请看CentOS6启动流程(含详细流程图) 第二步.GRUB2引导阶段 从这一步开始,CentOS ...

  4. RAID磁盘阵列及CentOS7启动流程

    1. 磁盘阵列 1.1 RAID,磁盘阵列磁盘通过硬件和软件的形式组合成一个容量巨大的磁盘组,提升整个磁盘的系统效能:RAID常见类型: RAID类型 最低磁盘个数 空间利用率 各自的优缺点 级别 说 ...

  5. Linux-CentOS6.9启动流程排错

    1 . CentOS6.9启动流程 POST 加电自检,是BIOS功能的一个主要部分.负责完成对CPU.主板.内存.硬盘子系统.显示子系统.串并行接口.键盘.CD-ROM光驱等硬件情况的检测. Boo ...

  6. centOS7服务管理与启动流程

    centOS7服务管理与启动流程 centOS7启动流程 systemd简介 unit对象 unit类型 特性 service unit文件格式 service unit file文件通常由三部分组成 ...

  7. 计算机从加电到系统(Linux)启动完成

    0x0 背景 在我参加的面试和我面试别人.或者参加别人对别人的面试的事后经常遇到的一个问题就是:请从计算机加电开始描述一下计算机启动到操作系统正式启动起来的全过程.这是一个考验对计算机体系结构和基本知 ...

  8. Linux系统文件与启动流程

    Linux系统文件与启动流程 /etc初始化系统重要文件 /etc/sysconfig/network-scripts/ifcfg-eth0:网卡配置文件 /etc/resolv.conf:Linux ...

  9. CentOS6启动流程

    CentOS6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备 在通电之后,CentOS6会进行加电自检(Power On Self Test),这个过程主要是由BIOS完成的.在自检完毕,会 ...

随机推荐

  1. Spark SQL UDAF示例

    UDAF:用户自定义聚合函数 Scala 2.10.7,spark 2.0.0 package UDF_UDAF import java.util import org.apache.spark.Sp ...

  2. dynamic动态类型的扩展方法

    对于一个动态类型来说,你可以认为它包含任意成员,它们都能通过编译.但到了运行时,到底是否拥有这些成员,就真相大白了.如 dynamic test = ; Console.Write(test.Name ...

  3. Tomcat7配置Https

    使用的是UCloud的免费证书: 教程: https://docs.ucloud.cn/security/ussl/index 购买证书的地址: https://console.ucloud.cn/u ...

  4. ES6的 let const 以及块级作用域

    let声明变量 用法类似于var,但是所声明的变量只在let所在的代码块内有效. 1 . 在ES6环境下,let声明的变量不能在声明之前调用. 例: console.log(i); //会报错,这叫做 ...

  5. ubuntu制作离线包

    一.应用场景a.当我们需要在多台电脑安装同一个软件,并且这个软件很大,下载需要很长时间b.需要安装软件的ubuntu不能上网二.离线安装包的制作2.1.通过如下指令下载XXXX软件所需要的deb包,首 ...

  6. 在VUE-CLI 3下的第一个Element-ui项目(菜鸟专用)

    vue-cli3.0使用及配置 (https://www.cnblogs.com/xzqyun/p/10779891.html  ) 以上是  vue-cli3.0使用及配置   这里我们来引用基于v ...

  7. 理解ClassLoader

    --摘自<Android进阶解密> *Java中的ClassLoader* 1.系统类加载器包括3种: 1)Bootstrap ClassLoader(引导类加载器) C/C++代码实现的 ...

  8. SpringBoot使用Sharding-JDBC读写分离

    本文介绍SpringBoot使用当当Sharding-JDBC进行读写分离. 1.有关Sharding-JDBC 本文还是基于当当网Sharding-Jdbc的依赖,与上一篇使用Sharding-Jd ...

  9. CF76A.Gift [最小生成树]

    CF76A.Gift 题意:noi2014魔法森林弱化版QwQ,最小化\(max(g_i)*G + max(s_i)*S\)的最小生成树 考虑按g升序加边,用已在生成树中的边和新加入的边求当前最小生成 ...

  10. [JZOJ3588]【中山市选2014】J语言(表达式解析+栈)

    Description J语言作为一门编程语言,诞生于20世纪90年代.............. 好学的小H今天又学到了一种新东西——J语言.显然,J语言的背景已经被小H忘得一干二净了,但是小H仍然 ...