当前位置: 首页 > news >正文

linux-开机启动流程

linux-开机启动流程

  • 一、开机启动流程图
  • 二、开机启动流程
    • 1. power on
    • 2. POST 开机自检
    • 3. 启动顺序检查
    • 4. 加载引导程序
    • 5. grub2引导程序
    • 6. 启动systemd进程
    • 7.运行 /etc/fstab 以及 /etc/rc.local 文件
    • 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个字节

MBR
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说明
0poweroff.target关机
1rescue.target救援模式(单用户)
3multi-user.target多用户命令行模式
5graphical.target图形界面模式
6reboot.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个环境变量的配置文件

登录shell

~开头的文件表示只对当前用户生效

配置文件可以存放自定义命令、脚本、环境变量配置等内容,用于在用户登录或开启终端时自动执行

最终进入 bash 提示符(如 [root@rocky-1 ~]#),完成启动


总结

开机启动流程的意义:

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

相关文章:

  • 解密国密 SSL 证书:SM2、SM3、SM4 算法的协同安全效应
  • 物联网技术:起源、发展、重点技术、应用场景与未来演进
  • [RPA] Excel中的字典处理
  • Y1第4课题解(A~E)
  • Kubernetes深度解析:企业级容器编排平台的核心实践
  • 在OpenMP中,#pragma omp的使用
  • JAVA_FourTEEN_常见算法
  • Python爬虫实战:研究flanker相关技术
  • 通过 Web3 区块链安全评估,领先应对网络威胁
  • Java零基础入门学习知识点2-JDK安装配置+Maven
  • k8s常用基础命令总结
  • P1106 删数问题 - 洛谷
  • 深度学习day02--神经网络(前三节)
  • 使用 Dijkstra 算法 和 旅行商问题(TSP) 规划快递员配送路线(python)
  • Qwen3-235B-A22B-Thinking-2507 - 开源思维推理模型的新标杆
  • ClickHouse 常用的使用场景
  • Java学习第七十四部分——Elasticsearch(ES)
  • 订单数据解密:从数据来源到状态分析的SQL实战指南
  • 【Python】一些PEP提案(四):scandir、类型约束,异步asyncawait
  • 工业缺陷检测的计算机视觉方法总结
  • Linux文件系统权限
  • 【基于CKF的IMM】MATLAB例程,CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附下载链接
  • 基于ENMeval包的MaxEnt模型参数优化总结
  • C#索引器、接口、泛型
  • 构建跨平台远程医疗系统中的视频通路技术方案探究
  • Java 反射机制详解:从基础到实战,彻底掌握 Class、Method、Field 的动态操作
  • 免模型控制
  • 解决笔记本合盖开盖DPI缩放大小变 (异于网传方法,Win11 24H2)
  • TCP模型,mqtt协议01 day41
  • 全国产8通道250M AD FMC子卡