电源启动与硬件自检(BIOS/UEFI阶段)
-
通电自检(POST)
按下电源键后,主板固件(BIOS或UEFI)启动:- BIOS(传统模式):检测CPU、内存、硬盘等基础硬件,通过蜂鸣声或屏幕提示错误。
- UEFI(现代标准):图形化界面,支持大容量硬盘和安全启动(Secure Boot),速度更快。
- 用户可见现象:屏幕显示厂商Logo,硬件状态指示灯闪烁。
-
定位引导设备
固件按预设顺序(如硬盘>U盘>网络)搜索引导加载程序(Boot Loader),通常存储在磁盘的MBR(主引导记录)或GPT分区表的EFI系统分区中。
引导加载程序阶段(GRUB为例)
Linux默认使用GRUB(GRand Unified Bootloader):
-
GRUB加载流程
- Stage 1:MBR中的微型代码(512字节)加载Stage 1.5。
- Stage 1.5:识别文件系统(如ext4),加载Stage 2。
- Stage 2:显示图形化菜单(若有多个内核或操作系统)。
- 用户可见现象:出现GRUB菜单,倒计时选择启动项。
-
内核加载
用户选择(或默认)后,GRUB:- 从
/boot
分区读取内核镜像(如vmlinuz-5.15.0-xx
)和初始内存盘(initramfs)。 - 将系统控制权移交给内核。
- 从
内核初始化与硬件驱动
-
内核解压与初始化
内核接管后:- 解压自身并初始化内存管理、调度器。
- 加载
initramfs
(临时根文件系统),内含关键驱动(如磁盘、文件系统驱动),避免因驱动缺失导致启动失败。
-
挂载根文件系统(/)
内核根据GRUB传递的root=
参数(或initramfs
探测)挂载真正的根分区,若使用加密磁盘(如LUKS),此时会提示输入密码。
用户空间启动:systemd或传统init
根文件系统挂载后,启动第一个用户进程:
-
现代系统(systemd):
/sbin/init
指向systemd
(PID=1),它是所有进程的父进程。- 解析默认目标:读取
/etc/systemd/system/default.target
(通常为graphical.target
或multi-user.target
)。 - 并行启动服务:按依赖关系并发启动服务(如网络、日志),显著加速启动。
- 生成登录管理器:启动
gdm
(GNOME)或lightdm
等,显示登录界面。
- 解析默认目标:读取
-
传统系统(SysV init):
使用/etc/inittab
定义运行级别(如3为命令行,5为图形界面),按顺序执行/etc/rc.d/
中的启动脚本(串行执行,速度较慢)。
用户登录与桌面环境
- 登录管理器启动
输入用户名和密码后,登录管理器验证身份并启动X Server/Wayland(图形显示协议)。 - 加载桌面环境
执行用户级初始化脚本(如~/.bashrc
),启动桌面环境(如GNOME、KDE)或窗口管理器(如i3)。
常见问题与排查
- 启动卡在GRUB:检查
/boot
分区是否损坏(尝试Live CD修复)。 - 内核恐慌(Kernel Panic):驱动冲突或硬件故障,需查看日志(
dmesg
)。 - 进入紧急模式:文件系统错误或服务失败,按提示输入密码排查
/etc/fstab
或服务配置。
技术总结
Linux开机流程本质是控制权逐级传递:
固件 → 引导加载程序 → 内核 → 初始化系统 → 用户空间
这种分层设计确保了灵活性与稳定性:开发者可替换任一组件(如用LILO替代GRUB),而普通用户通过配置文件(如/etc/default/grub
)即可定制启动行为。
引用说明: 参考Linux内核官方文档(kernel.org)、systemd设计规范(freedesktop.org)及《Linux内核设计与实现》(Robert Love著),技术细节符合POSIX标准与主流发行版(Ubuntu/CentOS)实现。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7365.html