若服务器启动不了,重装系统太浪费时间,若是启动过程的问题,学习后可以快速定位系统问题。


  1. 硬件引导启动阶段

1.1 POST(Power On Self Test) 加电自检

加电启动时,系统通过主板上的芯片(BIOS)进行自检。CPU会从预设的内存地址(该地址通过映射指向BIOS代码所在ROM中的位置)处开始执行指令。

1.2 BIOS(Basic Input/Output System)

1.2.1 初始化硬件

CPU、内存、磁盘、显卡、键盘等

1.2.2 查找启动介质

HDD: 查找启动硬盘的第一个扇区(MBR)

1.3 MBR

1.3.1 Bootloader(启动装载程序)

GRUB

分区表

注:

1、在x86系统中,物理内存的前1MB(从0x00000到0xFFFFF)比较特殊,其中的64K映射给ROM,在ROM的起始部分(即0xFFFF0附近),通常会有一个JMP(跳转)指令。

2、ROM(Read-Only Memory,只读存储器),掉电数据保留。

3、RAM(Random Access Memory,随机存取存储器),掉电数据易失。


  1. BootLoader 启动引导阶段

2.1 Stage1

执行BootLoader主程序(位于MBR前446个字节),它的作用是启动Stage1.5或Stage2。

2.2 Stage1.5

Stage1.5是桥梁,由于Stage2较大,存放在文件系统中,需要Stage1.5引导位于文件系统中的Stage2。

2.3 Stage2

Stage2是GRUB 的核心映像。

2.4 grub.conf

Stage2解析grub.conf配置文件,加载内核到内存中。

注:

1、BootLoader:内核运行之前的一段程序,为内核的运行准备环境,是连接硬件和操作系统的桥梁。

2、GRUB:多操作系统启动程序,可以向内核传递启动参数。


  1. 内核引导阶段

3.1 /boot/kernel

内核初始化,加载基本的硬件驱动

3.2 /boot/initrd(硬件驱动初始化)

引导initrd解压载入

3.2.1 阶段一:

1)在内存中释放rootfs(根文件系统)

2)执行initrd文件系统中的init,完成加载其他驱动模块。

3.2.2 阶段二:

执行真正的根文件系统中的/sbin/init进程

注:

1、initrd:在系统引导过程中挂载的一个临时根文件系统(​基于内存,访问不需要驱动​),用来支持两阶段的引导过程。

2、rootfs:系统启动时加载的第一个文件系统(基于存储设备),包含系统在启动过程中需要使用的所有文件和目录、必要的运行库、初始化脚本以及用户空间和内核空间所需的程序和配置文件等。


  1. Sys V init 初始化阶段

4.1 /sbin/init

4.1.1 /etc/inittab

init 进程读取 /etc/inittab 文件,确定系统启动的运行级别。

4.1.2 /etc/rc.d/rc.sysinit

执行系统初始化脚本,对系统进行基本的配置

4.1.3 /etc/rc.d/rcN.d

根据先前确定的运行级别启动对应运行级别中的服务

4.1.4 /etc/rc.d/rc.local

执行用户自定义的开机启动程序

4.2 登录

4.2.1 /sbin/mingetty (命令行登录)

1)验证通过:执行/etc/login

2)加载环境变量等

/etc/profile
~/.bash_profile  
~/.bash_login
~/.profile

3)取得non-login Shell

4.2.2 /etc/X11/prefdm (图形界面登录)

1)gdm kdm xdm

2)Xinit

3)加载 \~/.xinitrc \~/.xserverrc

注:

1、Sys V:SysVinit系统是Linux和类Unix操作系统中传统的初始化系统,它通过一系列脚本来启动和管理系统服务。

2、init进程:该进程是用户空间的第一个进程,负责初始化系统环境,包括加载设备驱动程序、设置系统变量、挂载文件系统等


  1. 启动完成

至此,linux操作系统启动完成。