Linux启动流程详解
Linux启动流程详解
启动流程概述
Linux启动流程可以分为以下几个阶段:
BIOS/UEFI → Bootloader → Kernel → systemd → 系统服务 → 登录界面
阶段1:BIOS/UEFI
- 上电自检(POST)
- 查找启动设备
- 加载Bootloader
查看BIOS信息
# 查看系统信息
sudo dmidecode -t bios
# 查看启动设备
sudo efibootmgr
阶段2:Bootloader(GRUB)
GRUB负责加载内核和initramfs。
GRUB配置
# /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX="quiet splash"
# 生成配置
sudo update-grub
GRUB菜单
* Ubuntu
Advanced options for Ubuntu
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
进入GRUB编辑模式
# 在GRUB菜单按e键编辑
# 修改内核参数后按Ctrl+X启动
阶段3:内核启动
内核负责:
- 检测硬件
- 加载驱动
- 挂载root文件系统
- 启动init进程
查看内核日志
# 查看启动日志
dmesg
# 查看内核版本
uname -a
# 查看加载的模块
lsmod
内核参数
# 查看当前内核参数
cat /proc/cmdline
# 常用内核参数
# single/single-user 单用户模式
# init=/bin/bash 指定init程序
# root=/dev/sda1 指定root设备
阶段4:systemd初始化
systemd是Linux系统的初始化系统。
systemd目标(target)
# 查看默认目标
systemctl get-default
# 设置默认目标
systemctl set-default multi-user.target # 命令行
systemctl set-default graphical.target # 图形界面
# 查看所有目标
systemctl list-units --type=target
常用目标
| 目标 | 说明 |
|---|---|
| poweroff | 关机 |
| rescue | 单用户模式 |
| multi-user | 多用户命令行 |
| graphical | 图形界面 |
| emergency | 紧急模式 |
启动流程查看
# 查看启动时间
systemd-analyze
# 查看各服务启动时间
systemd-analyze blame
# 查看启动关键链
systemd-analyze critical-chain
阶段5:系统服务
服务启动顺序
# 查看服务依赖关系
systemctl list-dependencies
# 查看服务是否启用
systemctl is-enabled nginx
# 查看服务状态
systemctl status nginx
启动故障排查
进入单用户模式
# 在GRUB菜单按e键
# 找到linux行,添加single或init=/bin/bash
# 按Ctrl+X启动
修复文件系统
# 进入单用户模式后
fsck /dev/sda1
查看启动日志
# 查看本次启动日志
journalctl -b
# 查看上次启动日志
journalctl -b -1
# 查看启动失败的服务
systemctl --failed
实践:自定义启动服务
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/opt/myapp/start.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
# 启用自定义服务
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
总结
理解Linux启动流程对于系统管理和故障排查至关重要。掌握GRUB、systemd和启动过程,能够快速定位和解决启动问题。