Linux启动过程概述
Linux系统的启动过程是一个复杂但有序的过程,从按下电源按钮到出现登录提示,系统经历了多个阶段。
了解这些阶段对于系统管理员和开发人员至关重要,有助于故障排除和性能优化。
关键概念
- BIOS/UEFI: 系统固件,初始化硬件
- Bootloader: 加载操作系统内核
- Kernel: 系统核心,初始化硬件和进程
- Init System: 系统初始化和服务管理
启动过程概览图
1. BIOS/UEFI
硬件初始化
2. Bootloader
加载内核
3. Kernel
初始化系统
4. Init System
启动服务和用户空间
5. Login Prompt
用户登录
启动阶段详解
1 BIOS/UEFI 阶段
硬件初始化和自检
当计算机通电时,首先执行的是存储在主板ROM中的BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口)程序。
- POST(加电自检):检查硬件组件是否正常工作
- 硬件初始化:初始化CPU、内存、存储设备等
- 引导设备选择:根据配置顺序查找可引导设备
- 加载引导扇区:读取引导设备的第一个扇区(MBR或GPT分区)
# 查看BIOS信息 (需要安装dmidecode)
sudo dmidecode -t bios
sudo dmidecode -t bios
2 Bootloader 阶段
引导加载程序
引导加载程序负责加载操作系统内核到内存并启动它。常见的Linux引导加载程序有GRUB、LILO和SYSLINUX。
- MBR/GPT引导:从主引导记录或GPT分区表读取引导程序
- GRUB阶段:GRUB2是大多数Linux发行版使用的引导加载程序
- 内核选择:显示启动菜单,允许用户选择要启动的内核版本
- 内核加载:将选定的内核和initramfs加载到内存
# 查看GRUB配置
cat /boot/grub/grub.cfg
# 重新生成GRUB配置
sudo update-grub
cat /boot/grub/grub.cfg
# 重新生成GRUB配置
sudo update-grub
3 内核初始化
Linux内核启动
内核解压缩并初始化系统,包括:
- 内核解压:解压缩内核映像
- 硬件检测:检测和初始化硬件设备
- 挂载根文件系统:使用initramfs临时根文件系统
- 启动init进程:启动第一个用户空间进程(PID 1)
# 查看当前运行的内核版本
uname -r
# 查看内核启动参数
cat /proc/cmdline
uname -r
# 查看内核启动参数
cat /proc/cmdline
4 Init 系统
系统初始化和服务管理
init系统是Linux启动过程中第一个用户空间进程(PID 1),负责启动和管理系统服务。
Systemd(现代发行版)
- 并行启动服务,提高启动速度
- 使用单元文件(unit files)管理服务
- 提供系统状态快照和日志功能
# 查看系统启动时间
systemd-analyze
# 列出所有服务单元
systemctl list-unit-files
systemd-analyze
# 列出所有服务单元
systemctl list-unit-files
SysVinit(传统系统)
- 顺序启动服务,通过运行级别管理
- 使用/etc/init.d/目录中的脚本
- 简单但启动较慢
# 查看当前运行级别
runlevel
# 切换到运行级别3
init 3
runlevel
# 切换到运行级别3
init 3
5 登录管理器
用户登录
系统启动后,用户可以通过以下方式登录:
- 图形登录:通过显示管理器(如GDM、LightDM)
- 文本登录:通过getty进程在虚拟控制台提供登录提示
- 自动登录:配置系统自动登录特定用户
# 查看当前登录的用户
who
# 查看登录历史
last
who
# 查看登录历史
last
相关命令和工具
启动分析命令
-
dmesg- 查看内核环形缓冲区消息 -
journalctl- 查询systemd日志 -
systemd-analyze- 分析系统启动性能 -
uptime- 显示系统运行时间
服务管理命令
-
systemctl- 控制系统和服务 -
service- 管理系统服务(SysVinit) -
chkconfig- 管理服务启动项 -
init- 切换运行级别