系统启动流程
教学目标
- 了解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课后练习
基础练习:
- 查看Linux系统启动的各个阶段和关键组件
- 了解系统使用的初始化系统
- 查看系统启动日志和时间分析
进阶练习:
- 配置GRUB引导加载程序
- 修改内核启动参数
- 创建自定义systemd服务
实践任务:
- 排查和解决系统启动故障
- 优化系统启动速度
- 配置系统自动登录
总结
本章节详细介绍了Linux系统的启动流程,包括:
- 系统启动流程概述:了解Linux系统启动的基本概念和重要性
- BIOS/UEFI初始化阶段:掌握系统硬件初始化的过程和配置方法
- 引导加载程序阶段:熟悉GRUB等引导加载程序的配置和管理
- 内核启动阶段:了解Linux内核的启动过程和参数配置
- 初始化系统阶段:掌握systemd等初始化系统的工作原理和配置
- 用户空间启动阶段:了解用户登录环境的配置和管理
- 系统启动故障的排查:学会排查和解决各种系统启动故障
- 系统启动优化:掌握系统启动速度和性能的优化方法
系统启动流程是Linux系统运维中的重要组成部分,了解系统启动的各个阶段和关键组件,能够帮助用户更好地理解系统的工作原理,排查和解决系统启动故障,优化系统启动性能。通过本章节的学习,用户可以掌握Linux系统启动的各个环节,确保系统能够正常、快速地启动和运行。
在实际工作中,应根据系统的具体硬件配置和应用场景,合理配置系统启动参数和服务,确保系统启动的可靠性和性能。同时,应定期检查系统启动状态,及时发现和解决潜在的启动问题,确保系统的稳定运行。