linux-开机启动流程

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等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。

电脑的硬件有哪些?

  1. 机箱:主板,内存条,硬盘,cpu,电源,显卡,网卡,声卡,风扇
  2. 外设: 机箱外部的设备: 键盘、鼠标、耳机、音箱、摄像头,麦克风、显示器等

什么是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)

  1. GRUB 第一阶段(MBR 中):由于 MBR 空间有限,仅能执行简单操作 ------ 加载位于硬盘分区中的 GRUB 第二阶段
  2. 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
  1. 加载内核与 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 \~#),完成启动


总结

开机启动流程的意义:

  1. 掌握让某个软件开机自动运行
  2. 开机不能正常启动,是什么原因,或者那个环节出现了问题
  3. 防止黑客植入木马,去查询黑客会把木马放到哪些地方?