linux-开机启动流程
- 一、开机启动流程图
- 二、开机启动流程
-
- [1. power on](#1. power on)
- [2. POST 开机自检](#2. POST 开机自检)
- [3. 启动顺序检查](#3. 启动顺序检查)
- [4. 加载引导程序](#4. 加载引导程序)
- [5. grub2引导程序](#5. grub2引导程序)
- [6. 启动systemd进程](#6. 启动systemd进程)
- [7.运行 /etc/fstab 以及 /etc/rc.local 文件](#7.运行 /etc/fstab 以及 /etc/rc.local 文件)
- [8. login 登录](#8. login 登录)
- 总结
一、开机启动流程图

硬件的角度来看启动流程

二、开机启动流程
1. power on
开机
2. POST 开机自检
开机自检:上电自检(POST,Power On Self Test)
由主板上的BIOS程序去完成检查电脑里的硬件是否存在
包括对CPU、系统主板、基本内存、扩展内存、系统ROM BIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。
电脑的硬件有哪些?
- 机箱:主板,内存条,硬盘,cpu,电源,显卡,网卡,声卡,风扇
- 外设: 机箱外部的设备: 键盘、鼠标、耳机、音箱、摄像头,麦克风、显示器等
什么是BIOS程序?
BIOS(Basic Input/Output System,基本输入输出系统)是计算机启动时运行的固件程序,负责硬件初始化、系统自检(POST)和引导操作系统
BIOS存在于主板的电路板上,一般以ROM(只读存储器)的形式存储
如何进入BIOS程序
台式机: DEL 或者delete
笔记本: F1 F2 F8 F10 F12 等 fn+F2
服务器: F1
虚拟机:F2
3. 启动顺序检查
BIOS --》boot
第1启动顺序 非常关键
系统会优先从第一个设备尝试启动,若失败则依次尝试下一个

| 第1启动顺序 | removable device 可移动设备 --》u盘,移动硬盘 --》安装系统 |
|---|---|
| 第2启动顺序 | hard drive 硬盘 |
| 第3启动顺序 | cdrom 光驱 --》vcd/dvd 读取光盘的设备 --》安装系统 |
| 第4启动顺序 | Network --》从网络启动--》网络中安装服务器启动 --》安装 |
4. 加载引导程序
MBR :主引导记录 master boot record
是硬盘里的非常重要的一个位置(磁盘最开始的位置),占一个扇区的空间,一个扇区是512个字节

BIOS检查每个设备的第一个扇区(MBR),若最后 2 字节为 0x55AA(启动标识),则认定为可启动设备,读取 MBR 中的第一阶段引导程序(grub2)到内存
5. grub2引导程序
加载 Linux 内核和临时文件系统(initramfs)
- GRUB 第一阶段(MBR 中):由于 MBR 空间有限,仅能执行简单操作 ------ 加载位于硬盘分区中的 GRUB 第二阶段
- GRUB 第二阶段:读取/boot/grub2/grub.cfg配置文件,显示启动菜单(若有多个系统或内核版本),等待用户选择(默认超时后自动选择)
加载/boot里的文件系统驱动
[root@rocky-1 ~]# ls /boot
config-5.14.0-570.17.1.el9_6.x86_64 loader
efi symvers-5.14.0-570.17.1.el9_6.x86_64.gz
grub2 System.map-5.14.0-570.17.1.el9_6.x86_64
initramfs-0-rescue-58a991a6f6e346d084259ecba89a43ff.img vmlinuz-0-rescue-58a991a6f6e346d084259ecba89a43ff
initramfs-5.14.0-570.17.1.el9_6.x86_64.img vmlinuz-5.14.0-570.17.1.el9_6.x86_64
initramfs-5.14.0-570.17.1.el9_6.x86_64kdump.img
[root@rocky ~]# ls /boot/grub2/
device.map fonts grub.cfg grubenv i386-pc locale
- 加载内核与 initramfs到内存:根据用户选择,从
/boot分区读取内核文件和临时文件系统镜像到内存
vmlinuz-5.14.0-570.17.1.el9_6.x86_64 内核文件 --》二进制文件--》直接运行
内核是操作系统内部最核心的软件
initramfs-5.14.0-570.17.1.el9_6.x86_64.img --》压缩文件 --》 给内核配置文件或者程序的文件
initialize 初始化
ram RAM random access memory 随机访问存储器 --》内存
rom ROM read only memory 只读存储器---》光盘
fs --》file system
6. 启动systemd进程
根文件系统挂载后,内核会执行根目录下的初始化程序(usr/lib/systemd/systemd),并将进程 ID(PID)设为 1(系统第一个用户态进程),负责启动后续所有用户态服务
启动对应的运行级别里的服务
现代Linux系统已用systemd取代Sysv init,运行级别被target替代
| 传统运行级别 | systemd target | 说明 |
|---|---|---|
| 0 | poweroff.target | 关机 |
| 1 | rescue.target | 救援模式(单用户) |
| 3 | multi-user.target | 多用户命令行模式 |
| 5 | graphical.target | 图形界面模式 |
| 6 | reboot.target | 重启 |
查看默认的运行级别
root@rocky-1 multi-user.target.wants# systemctl get-default
multi-user.target
root@rocky-1 multi-user.target.wants# runlevel
N 3
N:表示前一个运行级别为 "无"
3:表示当前运行级别为 3
root@rocky-1 multi-user.target.wants# cat /etc/inittab
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
设置默认启动为命令行模式
root@rocky-1 multi-user.target.wants# systemctl set-default multi-user.target
运行 /etc/systemd/system/multi-user.target.wants/ 下的服务
在目录下添加链接文件
root@rocky-1 multi-user.target.wants# systemctl enable sshd
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
里面的文件都是链接文件,指向Linux中开机自启的服务
root@rocky-1 multi-user.target.wants# ls
getty.target systemd-logind.service systemd-user-sessions.service
systemd-ask-password-wall.path systemd-update-utmp-runlevel.service
去除链接文件
root@rocky-1 multi-user.target.wants# systemctl disable sshd
Removed "/etc/systemd/system/multi-user.target.wants/sshd.service".
7.运行 /etc/fstab 以及 /etc/rc.local 文件
/etc/fstab 是文件系统挂载配置文件,记录了系统启动时需要自动挂载的分区、磁盘或网络存储
root@rocky-1 \~# cat /etc/fstab
/etc/fstab
Created by anaconda on Tue May 27 13:03:41 2025
Accessible filesystems, by reference, are maintained under '/dev/disk/'.
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
After editing this file, run 'systemctl daemon-reload' to update systemd
units generated from this file.
/dev/mapper/rl-root / xfs defaults 0 0
UUID=e232db92-2650-419f-ac1f-45ebbce6dd4c /boot xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
/etc/rc.local 是系统中用于存放开机自启动命令的脚本文件,在系统启动后期执行,适合添加自定义初始化操作
作用:执行用户自定义的开机命令
必须赋予可执行权限
root@rocky-1 \~# cat /etc/rc.local
#!/bin/bash
THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
It is highly advisable to create own systemd services or udev rules
to run scripts during boot instead of using this file.
In contrast to previous versions due to parallel execution during boot
this script will NOT be run after all other services.
Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
that this script will be executed during boot.
touch /var/lock/subsys/local
8. login 登录
根据/etc/passwd和/etc/shadow来检测用户名和密码是否正确
登录后按顺序加载4个环境变量的配置文件

~开头的文件表示只对当前用户生效
配置文件可以存放自定义命令、脚本、环境变量配置等内容,用于在用户登录或开启终端时自动执行
最终进入 bash 提示符(如 root@rocky-1 \~#),完成启动
总结
开机启动流程的意义:
- 掌握让某个软件开机自动运行
- 开机不能正常启动,是什么原因,或者那个环节出现了问题
- 防止黑客植入木马,去查询黑客会把木马放到哪些地方?