文章目录
正文
1. 启动流程详解
1.1 启动阶段分解
1. 固件初始化(BIOS/UEFI)
2. 引导加载程序(GRUB2)
3. 内核初始化(vmlinuz)
4. Initramfs解压加载
5. Systemd初始化(PID=1)
6. 目标单元启动(multi-user.target等)
1.2 关键文件定位
/boot/grub2/grub.cfg # GRUB配置文件
/etc/default/grub # GRUB参数设置
/boot/vmlinuz-* # 内核文件
/usr/lib/systemd/system/ # Systemd单元目录
2. 启动故障排查
2.1 常见故障定位表
阶段 | 现象 | 诊断方法 |
---|---|---|
BIOS/UEFI | 无启动画面 | 检查硬件连接/CMOS电池 |
GRUB | 黑屏或grub>提示符 | 尝试手动引导内核 |
Kernel | Kernel panic信息 | 分析内核参数/驱动兼容性 |
Initramfs | 卡在Loading initial ramdisk | 重建initramfs文件 |
Systemd | 启动服务失败 | journalctl -u service_name |
2.2 GRUB急救模式
grub> ls # 查看磁盘分区
grub> set root=(hd0,msdos1)
grub> linux /vmlinuz-5.4.0 root=/dev/sda1
grub> initrd /initramfs-5.4.0.img
grub> boot
3. 系统修复工具集
3.1 救援模式进入方法
# CentOS/RHEL
1. 启动时按e进入GRUB编辑
2. 在linux行尾添加 init=/bin/bash
3. Ctrl+X启动
# Ubuntu
1. 选择Advanced options
2. 选择Recovery mode
3.2 文件系统修复
# 检查文件系统
fsck -y /dev/sda1
# 强制挂载(只读模式)
mount -o ro,remount /
# 重新挂载根目录
mount -o remount,rw /
4. 日志分析技术
4.1 日志查看命令
journalctl -b # 本次启动日志
journalctl -k # 内核相关日志
journalctl --since "2023-08-15" --until "1 hour ago"
# 图形化工具
systemd-analyze plot > boot.html
4.2 启动耗时分析
systemd-analyze time
# 示例输出:
# Startup finished in 2.3s (kernel) + 5.6s (userspace) = 7.9s
systemd-analyze blame
# 显示各服务启动耗时前10名
5. 内核参数调优
5.1 常用启动参数
# 临时修改(GRUB启动时按e)
nomodeset # 禁用显卡模式设置
systemd.unit=rescue.target # 进入救援模式
init=/bin/sh # 直接进入shell
# 永久修改
grubby --update-kernel=ALL --args="console=ttyS0,115200"
5.2 内核崩溃处理
# 配置kdump
yum install kexec-tools
systemctl enable kdump
# 分析vmcore
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/vmcore
6. 服务启动管理
6.1 Systemd故障诊断
# 查看失败服务
systemctl --failed
# 详细服务状态
systemctl status httpd -l
# 重置失败状态
systemctl reset-failed
6.2 依赖关系检查
systemctl list-dependencies httpd.service
systemd-analyze critical-chain httpd.service
7. 高级排错技巧
7.1 串口控制台配置
# GRUB配置
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
# systemd日志重定向
systemctl enable serial-getty@ttyS0.service
7.2 内存测试模式
# 启动内存检测
memtest86+ # GRUB菜单选项
# 压力测试工具
yum install stress-ng
stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 60s
8. 典型故障处理案例
8.1 案例:只读文件系统
# 现象:无法创建文件,提示Read-only file system
# 处理步骤:
1. mount | grep "\sro[\s,]"
2. fsck -f /dev/sda1
3. mount -o remount,rw /
4. 检查硬盘SMART状态:smartctl -a /dev/sda
8.2 案例:服务启动死锁
# 现象:系统卡在Starting Service XXX
# 处理步骤:
1. 切换控制台:Ctrl+Alt+F2
2. journalctl -f -u service_name
3. systemctl stop service_name
4. 检查单元依赖关系:systemd-analyze dot service_name | dot -Tsvg > deps.svg
9. 学习资源推荐
- 掌握systemd.exec手册页:
man systemd.exec
- 研究/var/log/boot.log日志结构
- 练习使用Linux Rescue环境
- 学习使用strace追踪系统调用
- 参与Linux系统启动优化项目
注: 本文操作在CentOS 8和Ubuntu 22.04 LTS验证,其他发行版可能需要调整命令路径。建议生产环境操作前在测试系统验证,关键操作做好备份(cp /boot/grub2/grub.cfg grub.cfg.bak
)。
结语
感谢您的阅读!期待您的一键三连!欢迎指正!