乐闻世界logo
搜索文章和话题

Linux 系统启动流程包括哪些阶段,从 BIOS/UEFI 到用户登录的详细过程是什么?

2月17日 23:36

Linux 系统启动流程是理解系统工作原理的重要知识,掌握启动流程有助于故障排查和系统优化。

BIOS/UEFI 启动阶段:

  • BIOS(Basic Input/Output System):
    • 传统固件接口
    • 执行 POST(Power-On Self-Test)自检
    • 检测硬件设备
    • 查找可启动设备
    • 加载 MBR(Master Boot Record)
  • UEFI(Unified Extensible Firmware Interface):
    • 现代固件接口
    • 支持 GPT 分区表
    • 启动速度更快
    • 支持安全启动
    • 加载 EFI 应用程序

引导加载程序阶段:

  • GRUB(Grand Unified Bootloader):
    • 最常用的 Linux 引导加载程序
    • 支持 GRUB Legacy(0.97)和 GRUB 2
    • 配置文件:/boot/grub/grub.cfg(GRUB 2)、/boot/grub/menu.lst(GRUB Legacy)
    • 支持 Linux、Windows 等多系统引导
    • 提供命令行界面进行故障恢复
  • LILO(Linux Loader):
    • 传统的 Linux 引导加载程序
    • 配置文件:/etc/lilo.conf
    • 已被 GRUB 取代
  • systemd-boot:
    • 简单的 UEFI 引导加载程序
    • 配置文件:/boot/loader/entries/*.conf
    • 适合简单的启动场景

内核加载阶段:

  • 加载内核镜像:/boot/vmlinuz-*
  • 加载 initramfs(初始 RAM 文件系统):/boot/initrd.img-*
  • 内核解压缩并初始化
  • 检测和初始化硬件设备
  • 挂载根文件系统
  • 启动 init 进程(PID 1)

init 进程阶段:

  • SysVinit(传统 init 系统):
    • 配置文件:/etc/inittab
    • 运行级别(runlevel):0-6
      • 0:关机
      • 1:单用户模式
      • 2:多用户模式(无网络)
      • 3:多用户模式(有网络)
      • 4:未使用
      • 5:图形界面模式
      • 6:重启
    • 启动脚本:/etc/rc.d/rc*.d/ 或 /etc/rc*.d/
    • 使用 chkconfig 管理服务
  • systemd(现代 init 系统):
    • 配置文件:/etc/systemd/system/
    • 目标(target):类似于运行级别
      • poweroff.target:关机
      • rescue.target:救援模式
      • multi-user.target:多用户模式
      • graphical.target:图形界面模式
      • reboot.target:重启
    • 使用 systemctl 管理服务
    • 支持并行启动,启动速度更快
    • 更好的日志集成(journalctl)

系统服务启动阶段:

  • SysVinit:
    • 按 runlevel 顺序启动服务
    • 执行 /etc/rc.d/rcN.d/ 目录下的脚本
    • S 开头的脚本表示启动(Start)
    • K 开头的脚本表示停止(Kill)
  • systemd:
    • 并行启动服务
    • 根据依赖关系确定启动顺序
    • 执行 .service 文件定义的服务

登录阶段:

  • 显示登录提示符
  • 用户输入用户名和密码
  • 验证用户凭据
  • 启动用户 shell
  • 执行用户配置文件:/.bash_profile、/.bashrc

启动过程的关键文件:

  • /boot/grub/grub.cfg:GRUB 2 配置文件
  • /boot/grub/menu.lst:GRUB Legacy 配置文件
  • /etc/inittab:SysVinit 配置文件
  • /etc/systemd/system/default.target:systemd 默认启动目标
  • /etc/fstab:文件系统挂载配置
  • /etc/hostname:主机名配置
  • /etc/hosts:主机名到 IP 映射

启动故障排查:

  • GRUB 故障:
    • 修复 GRUB:grub-install /dev/sda
    • 重建 GRUB 配置:update-grub 或 grub2-mkconfig -o /boot/grub2/grub.cfg
    • 进入 GRUB 命令行:按 'c' 键
  • 内核故障:
    • 查看内核日志:dmesg、journalctl -k
    • 尝试恢复模式:在 GRUB 菜单选择 recovery mode
    • 使用旧内核启动
  • 文件系统故障:
    • 修复文件系统:fsck /dev/sda1
    • 检查 /etc/fstab 配置
  • 服务启动故障:
    • 查看服务状态:systemctl status service
    • 查看服务日志:journalctl -u service
    • 禁用故障服务:systemctl disable service

启动优化:

  • 减少 GRUB 等待时间:修改 /etc/default/grub 中的 GRUB_TIMEOUT
  • 禁用不必要的启动服务:systemctl disable service
  • 使用 systemd-analyze 分析启动时间:
    • systemd-analyze:查看总启动时间
    • systemd-analyze blame:查看各服务启动时间
    • systemd-analyze critical-chain:查看关键启动链
  • 使用并行启动:systemd 默认支持
  • 优化内核参数:修改 /etc/default/grub 中的 GRUB_CMDLINE_LINUX
标签:Linux