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等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。
电脑的硬件有哪些?
- 机箱:主板,内存条,硬盘,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 ~]#),完成启动
总结
开机启动流程的意义:
- 掌握让某个软件开机自动运行
- 开机不能正常启动,是什么原因,或者那个环节出现了问题
- 防止黑客植入木马,去查询黑客会把木马放到哪些地方?