Contents
  1. 1. 阶段1:系统启动
    1. 1.1. POST
    2. 1.2. 选择启动设备
  2. 2. 阶段2:MBR加载
    1. 2.1. 什么是MBR
      1. 2.1.1. 主Bootloader程序
      2. 2.1.2. 分区表
      3. 2.1.3. magic number
  3. 3. 阶段3:GRUB加载
  4. 4. 阶段4:kernel
  5. 5. 阶段5:INIT
  6. 6. 阶段6:用户提示符

认识Linux的启动过程对每一个Linux使用者和管理员都是必要的,它能使你一幅清晰的Linux如何工作的图景。本文会介绍按下电源到登录提示出现过程中都经历了哪些过程。下图会给你一个简洁明了的整体认识。

简要启动过程:

1. 按下电源键
2. CPU跳到BIOS
3. BIOS运行POST
4. 寻找第一个可启动设备
5. 加载执行MBR
6. 加载OS
7. 用户提示符

以下是Linux启动过程中的详细阶段。

1) 系统启动(硬件)
2) Boot Loader阶段1(MBR加载)
3) Boot Loader阶段2(GRUB加载)
4) Kernel
5) INIT
6) 用户提示符

阶段1:系统启动

CPU加电后执行的第一个指令就是将控制交给BIOS进行开机自检,BIOS会执行两个任务:

执行POST
选择第一个可启动设备

POST

POST是一个检查硬件可用性的进程,BIOS保存着上次启动时的硬件列表,它会向每一个硬件(包括新加入的硬件)发送一个脉冲并监测是否有回复,从而确定可用性,并更新硬件列表。

选择启动设备

从设备列表中选择第一个可启动设备,并将控制移交CPU。如果找不到可用启动设备,则会报错No boot device found

阶段2:MBR加载

CPU重新获得控制后,将执行启动设备的MBR,MRB只有512Byte,位于HDD的开头或尾部,这取决于制造商。

什么是MBR

MBR(Master Boot recorder)包含以下信息:

主BootLoader程序 446Byte
分区表 64Byte
Magic Number 2Byte

主Bootloader程序

提供Bootloader信息与实际程序的硬盘位置,帮助CPU加载第二阶段的bootloader。

分区表

分区表信息,如分区的起始位置,大小,类型(主/逻辑等),每个分区需要16字节,这就是最多只有4个主分区的原因。

magic number

作为校验码,MBR损坏时可以用来恢复。

当CPU知道以上这些信息后,它将读取第一部分来加载第二阶段的Bootloader。

阶段3:GRUB加载

MBR会将GRUB加载进内存,GRUB位于紧接MBR的30KByte中,CPU读取其中的信息并显示GRUB菜单,加载用户选择的Kernel进入内存并移交控制,如果设置了超时,也会自动选择默认选项。

阶段4:kernel

Kernel是操作系统的核心,它是硬件和软件的协调者。Kernel加载入内存后会一直驻留到系统关闭,Kernel启动后的第一个任务是运行init进程

阶段5:INIT

这是启动过程中的主要阶段。

init进程是所有Linux进程的root/parent进程,它运行的第一个进程是一个位于/etc/rc.d/rc.sysinit的脚本,它将检查所有系统properties,硬件,显示 , SELinux,加载内核模块,检查和mount文件系统等。根据不同的运行级别,脚本会启动/停止各种进程来运行系统并使之可用。init进程读取/etc/inittab,它是一个定义系统程序启动的初始化表。init会一个run level接一个run level地启动对应的脚本。脚本的内容保存在/etc目录下的//etc/rc0.d/etc/rc6.d

当init进程完成托管的run level到达/etc/inittab中定义的默认run level时,它将运行另一个脚本 /etc/rc.local,这是init甚至整个启动过程中的最后一个命令。当所有这些完成以后,控制交还给kernel.

阶段6:用户提示符

这其实不算是启动过程,列在此处只是为了帮助理解。kernel重获控制后将运行多个getty实例等待console的login并产生一个用户Shell进程用于登录。

Contents
  1. 1. 阶段1:系统启动
    1. 1.1. POST
    2. 1.2. 选择启动设备
  2. 2. 阶段2:MBR加载
    1. 2.1. 什么是MBR
      1. 2.1.1. 主Bootloader程序
      2. 2.1.2. 分区表
      3. 2.1.3. magic number
  3. 3. 阶段3:GRUB加载
  4. 4. 阶段4:kernel
  5. 5. 阶段5:INIT
  6. 6. 阶段6:用户提示符