系统启动流程

教学目标

  • 了解Linux系统启动流程的基本概念和重要性
  • 掌握Linux系统启动的各个阶段和关键组件
  • 学会排查和解决系统启动故障
  • 熟悉不同初始化系统的工作原理
  • 了解系统启动优化的方法
  • 掌握系统启动相关配置的管理

主要知识点

  • 系统启动流程概述
  • BIOS/UEFI初始化阶段
  • 引导加载程序阶段
  • 内核启动阶段
  • 初始化系统阶段
  • 用户空间启动阶段
  • 系统启动故障的排查
  • 系统启动优化

实用案例分析

案例1:系统启动流程的基本了解

场景:了解Linux系统启动的各个阶段和关键组件。

操作步骤

# 查看系统启动日志
journalctl -b

# 查看系统启动时间
systemd-analyze

# 查看系统启动各个阶段的时间
systemd-analyze blame

# 查看系统启动的关键路径
systemd-analyze critical-chain

# 查看系统启动配置
cat /boot/grub2/grub.cfg  # CentOS/RHEL
cat /boot/grub/grub.cfg    # Debian/Ubuntu

# 查看内核启动参数
cat /proc/cmdline

# 查看系统运行级别
systemctl get-default

# 查看系统服务启动状态
systemctl list-units --type=service

# 查看系统启动过程中的关键文件
ls -la /etc/systemd/
ls -la /etc/init.d/

案例2:BIOS/UEFI初始化阶段

场景:了解和配置系统的BIOS/UEFI设置。

操作步骤

# 查看系统是使用BIOS还是UEFI启动
dmidecode -t 0 | grep -i "bios version"
# 或者
ls -la /sys/firmware/

# 查看UEFI启动变量
# 安装efibootmgr工具
yum install -y efibootmgr  # CentOS/RHEL
apt install -y efibootmgr  # Debian/Ubuntu

# 查看UEFI启动项
efibootmgr -v

# 修改UEFI启动顺序
efibootmgr -o 0000,0001,0002

# 进入BIOS/UEFI设置界面
# 重启系统,在启动过程中按特定键进入
# 常见的按键:F2, F10, F12, Delete, Esc

# BIOS设置要点
# 1. 启动设备顺序:设置硬盘、光驱、USB等的启动顺序
# 2. 安全启动:启用或禁用Secure Boot
# 3. 启动模式:选择Legacy BIOS或UEFI模式
# 4. 硬件检测:确保所有硬件都被正确检测

# UEFI设置要点
# 1. 启动管理:管理UEFI启动项
# 2. 安全启动:配置Secure Boot设置
# 3. 启动模式:选择UEFI或Legacy模式
# 4. 固件更新:检查和更新UEFI固件

案例3:引导加载程序阶段

场景:配置和管理Linux系统的引导加载程序。

操作步骤

# 查看系统使用的引导加载程序
# 查看GRUB配置文件
ls -la /boot/grub*

# 配置GRUB引导加载程序
# 编辑GRUB配置文件
vim /etc/default/grub

# 常见配置选项
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

# 更新GRUB配置
# CentOS/RHEL
grub2-mkconfig -o /boot/grub2/grub.cfg

# Debian/Ubuntu
update-grub

# 安装GRUB引导加载程序
# 安装到MBR
grub2-install /dev/sda  # CentOS/RHEL
grub-install /dev/sda    # Debian/Ubuntu

# 安装到UEFI系统分区
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub  # CentOS/RHEL
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub    # Debian/Ubuntu

# 修复GRUB引导
# 进入救援模式后执行
chroot /mnt/sysimage
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/sda
exit
reboot

案例4:内核启动阶段

场景:了解和配置Linux内核的启动过程。

操作步骤

# 查看系统当前使用的内核
uname -r

# 查看系统安装的所有内核
ls -la /boot/vmlinuz*

# 查看内核模块
lsmod

# 查看内核配置
cat /boot/config-$(uname -r)

# 修改内核启动参数
# 编辑GRUB配置文件
vim /etc/default/grub

# 修改GRUB_CMDLINE_LINUX选项
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet elevator=deadline"

# 更新GRUB配置
grub2-mkconfig -o /boot/grub2/grub.cfg  # CentOS/RHEL
update-grub                            # Debian/Ubuntu

# 查看内核启动日志
dmesg

# 查看内核启动时间
journalctl -k -b

# 调试内核启动问题
# 在GRUB菜单中编辑内核启动参数,添加以下参数
# 1. single:进入单用户模式
# 2. init=/bin/bash:使用bash作为初始化程序
# 3. systemd.unit=emergency.target:进入紧急模式
# 4. systemd.unit=rescue.target:进入救援模式

案例5:初始化系统阶段

场景:了解和配置Linux系统的初始化系统。

操作步骤

# 查看系统使用的初始化系统
ps -p 1 -o comm=

# 查看systemd版本
systemctl --version

# 查看系统运行级别
systemctl get-default

# 修改系统运行级别
systemctl set-default multi-user.target  # 命令行模式
systemctl set-default graphical.target    # 图形界面模式

# 查看系统服务状态
systemctl list-units --type=service

# 查看系统服务依赖关系
systemctl list-dependencies

# 配置系统服务的启动行为
systemctl enable servicename
systemctl disable servicename
systemctl start servicename
systemctl stop servicename

# 查看systemd配置文件
ls -la /etc/systemd/system/
ls -la /usr/lib/systemd/system/

# 创建自定义systemd服务
vim /etc/systemd/system/myapp.service

# 配置内容示例
[Unit]
Description=My Custom Application
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/myapp
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 重新加载systemd配置
systemctl daemon-reload

# 启用并启动服务
systemctl enable myapp
systemctl start myapp

案例6:用户空间启动阶段

场景:了解和配置Linux系统的用户空间启动过程。

操作步骤

# 查看用户登录配置
cat /etc/passwd
cat /etc/shadow

# 查看用户登录shell
echo $SHELL

# 查看用户登录环境配置
ls -la ~/.bash*
ls -la ~/.profile

# 查看系统登录配置
cat /etc/login.defs
cat /etc/pam.d/login

# 查看系统欢迎信息
cat /etc/motd
cat /etc/issue

# 查看用户登录记录
last
lastlog

# 查看用户当前登录状态
who
w

# 配置用户自动登录
# 编辑getty服务配置
vim /etc/systemd/system/getty@tty1.service.d/autologin.conf

# 配置内容示例
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin username --noclear %I $TERM

# 重新加载systemd配置
systemctl daemon-reload

# 重启getty服务
systemctl restart getty@tty1.service

案例7:系统启动故障的排查

场景:排查和解决Linux系统启动故障。

操作步骤

# 进入单用户模式排查故障
# 在GRUB菜单中编辑内核启动参数,在末尾添加
# single
# 或者
# init=/bin/bash

# 修复文件系统错误
e2fsck -f /dev/sda1

# 检查磁盘空间
df -h

# 检查内存
test

# 查看系统启动日志
journalctl -b

# 查看内核启动日志
dmesg

# 检查引导加载程序配置
grub2-mkconfig -o /boot/grub2/grub.cfg  # CentOS/RHEL
update-grub                            # Debian/Ubuntu

# 修复GRUB引导
# 进入救援模式后执行
chroot /mnt/sysimage
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot

# 检查系统服务状态
systemctl list-units --failed

# 检查系统配置文件
# 检查/etc/fstab文件
cat /etc/fstab

# 检查网络配置
cat /etc/sysconfig/network-scripts/ifcfg-eth0  # CentOS/RHEL
cat /etc/network/interfaces                    # Debian/Ubuntu

# 检查SELinux状态
getenforce

# 临时禁用SELinux
setenforce 0

# 检查防火墙状态
systemctl status firewalld
systemctl status iptables

# 排查启动时的硬件问题
# 查看硬件信息
dmidecode
lspci
lsusb

# 检查硬件驱动
lsmod

# 检查系统温度
sensors

案例8:系统启动优化

场景:优化Linux系统的启动速度和性能。

操作步骤

# 分析系统启动时间
systemd-analyze
systemd-analyze blame

# 禁用不需要的系统服务
systemctl disable bluetooth
systemctl disable cups
systemctl disable avahi-daemon

# 启用并行启动
systemctl set-default multi-user.target

# 优化GRUB配置
vim /etc/default/grub

# 减少GRUB超时时间
GRUB_TIMEOUT=2

# 启用GRUB快速启动
GRUB_FORCE_HIDDEN_MENU="true"

# 更新GRUB配置
grub2-mkconfig -o /boot/grub2/grub.cfg  # CentOS/RHEL
update-grub                            # Debian/Ubuntu

# 优化内核启动参数
vim /etc/default/grub

# 添加以下参数
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet elevator=deadline net.ifnames=0 biosdevname=0"

# 更新GRUB配置
grub2-mkconfig -o /boot/grub2/grub.cfg  # CentOS/RHEL
update-grub                            # Debian/Ubuntu

# 优化系统服务的启动顺序
# 使用systemd-analyze critical-chain查看关键路径
# 调整服务的依赖关系

# 启用tmpfs挂载
# 编辑/etc/fstab文件,添加以下内容
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0

# 优化磁盘I/O调度算法
# 修改内核启动参数,添加elevator=deadline或elevator=cfq

# 优化系统启动时的网络配置
# 禁用网络服务的等待时间
# 编辑网络服务配置
vim /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service

# 修改以下参数
TimeoutStartSec=10

# 重新加载systemd配置
systemctl daemon-reload

课后练习

  1. 基础练习

    • 查看Linux系统启动的各个阶段和关键组件
    • 了解系统使用的初始化系统
    • 查看系统启动日志和时间分析
  2. 进阶练习

    • 配置GRUB引导加载程序
    • 修改内核启动参数
    • 创建自定义systemd服务
  3. 实践任务

    • 排查和解决系统启动故障
    • 优化系统启动速度
    • 配置系统自动登录

总结

本章节详细介绍了Linux系统的启动流程,包括:

  1. 系统启动流程概述:了解Linux系统启动的基本概念和重要性
  2. BIOS/UEFI初始化阶段:掌握系统硬件初始化的过程和配置方法
  3. 引导加载程序阶段:熟悉GRUB等引导加载程序的配置和管理
  4. 内核启动阶段:了解Linux内核的启动过程和参数配置
  5. 初始化系统阶段:掌握systemd等初始化系统的工作原理和配置
  6. 用户空间启动阶段:了解用户登录环境的配置和管理
  7. 系统启动故障的排查:学会排查和解决各种系统启动故障
  8. 系统启动优化:掌握系统启动速度和性能的优化方法

系统启动流程是Linux系统运维中的重要组成部分,了解系统启动的各个阶段和关键组件,能够帮助用户更好地理解系统的工作原理,排查和解决系统启动故障,优化系统启动性能。通过本章节的学习,用户可以掌握Linux系统启动的各个环节,确保系统能够正常、快速地启动和运行。

在实际工作中,应根据系统的具体硬件配置和应用场景,合理配置系统启动参数和服务,确保系统启动的可靠性和性能。同时,应定期检查系统启动状态,及时发现和解决潜在的启动问题,确保系统的稳定运行。

« 上一篇 系统语言与字符集 下一篇 » 网络基础知识