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

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.xdnf.cn/news/16407.html

相关文章:

  • 蓝桥杯java算法例题
  • NOIP 模拟赛 7
  • ZYNQ芯片,SPI驱动开发自学全解析个人笔记【FPGA】【赛灵思
  • 同声传译新突破!字节跳动发布 Seed LiveInterpret 2.0
  • Win11批量部署神器winget
  • 滚珠导轨:手术机器人与影像设备的精密支撑
  • 升级目标API级别到35,以Android15为目标平台(三 View绑定篇)
  • 上位机程序开发基础介绍
  • Round-Robin仲裁器
  • 深入理解 BIO、NIO、AIO
  • RocketMQ学习系列之——客户端消息确认机制
  • jwt 在net9.0中做身份认证
  • [2025CVPR-图象分类方向]CATANet:用于轻量级图像超分辨率的高效内容感知标记聚合
  • C# WPF 实现读取文件夹中的PDF并显示其页数
  • 案例分享|告别传统PDA+便携打印机模式,快速实现高效率贴标
  • Class18卷积层的填充和步幅
  • uniapp之微信小程序标题对其右上角按钮胶囊
  • 测试ppyoloe的小样本few-shot能力,10张图片精度达到69.8%
  • Allegro软件光绘文件Artwork到底如何配置?
  • Python柱状图
  • Lakehouse x AI ,打造智能 BI 新体验
  • 戴尔电脑 Linux 安装与配置指南_导入mysql共享文件夹
  • 关于网络模型
  • FreeRTOS—优先级翻转问题
  • vue项目入门
  • 【C++避坑指南】vector迭代器失效的八大场景与解决方案
  • haproxy七层代理(原理)
  • 从0开始学习R语言--Day57--SCAD模型
  • 深入浅出设计模式——创建型模式之简单工厂模式
  • Hive【Hive架构及工作原理】