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 ~]#),完成启动
总结
开机启动流程的意义:
- 掌握让某个软件开机自动运行
- 开机不能正常启动,是什么原因,或者那个环节出现了问题
- 防止黑客植入木马,去查询黑客会把木马放到哪些地方?