← 返回首页
🚀

Linux启动流程详解

📂 devops ⏱ 2 min 202 words

Linux启动流程详解

启动流程概述

Linux启动流程可以分为以下几个阶段:

BIOS/UEFI → Bootloader → Kernel → systemd → 系统服务 → 登录界面

阶段1:BIOS/UEFI

  1. 上电自检(POST)
  2. 查找启动设备
  3. 加载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:内核启动

内核负责:

  1. 检测硬件
  2. 加载驱动
  3. 挂载root文件系统
  4. 启动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和启动过程,能够快速定位和解决启动问题。