【Linux】系统启动与排错

在这里插入图片描述

个人主页:Guiat
归属专栏:Linux

在这里插入图片描述

正文

BIOS/UEFI
Boot Loader
Kernel Init
Init Process
Runlevel/Target

1. 启动流程详解

1.1 启动阶段分解

1. 固件初始化(BIOS/UEFI)
2. 引导加载程序(GRUB2)
3. 内核初始化(vmlinuz)
4. Initramfs解压加载
5. Systemd初始化(PID=16. 目标单元启动(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>提示符尝试手动引导内核
KernelKernel 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 依赖关系检查

network.target
httpd.service
firewalld.service
multi-user.target
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. 学习资源推荐

  1. 掌握systemd.exec手册页:man systemd.exec
  2. 研究/var/log/boot.log日志结构
  3. 练习使用Linux Rescue环境
  4. 学习使用strace追踪系统调用
  5. 参与Linux系统启动优化项目

注: 本文操作在CentOS 8和Ubuntu 22.04 LTS验证,其他发行版可能需要调整命令路径。建议生产环境操作前在测试系统验证,关键操作做好备份(cp /boot/grub2/grub.cfg grub.cfg.bak)。

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guiat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值