Orange的运维学习日记--30.Linux启动原理详解及故障排查

Orange的运维学习日记–30.Linux启动原理详解及故障排查


在这里插入图片描述

从按下电源键到获得登录提示,CentOS 7 的启动要经历多层次的硬件检测、引导加载、内核初始化以及 systemd 启动等环节。理解这一流程有助于故障排查和性能优化


系统固件阶段

系统刚通电时,UEFI 或 BIOS 会执行开机自检(POST),验证 CPU、内存、键盘、硬盘等关键硬件是否工作正常
POST 完成后,固件按照用户设置的启动顺序(硬盘、光驱、USB)查找可引导设备

  • Legacy BIOS 会读取 MBR(主引导记录)前 446 字节并跳转到该位置执行引导程序
  • UEFI 则扫描 EFI 分区中的 .efi 可执行文件,通过 EFI Shell 或 EFI 引导管理器启动

在此阶段按 F2、F12、Del 等键可进入固件设置界面,用于:

  • 调整启动设备顺序
  • 启用或禁用安全启动
  • 修改 CPU、内存及外围设备参数

引导加载程序:GRUB2

MBR/GPT 引导概念

  • 在 BIOS+MBR 模式下,主启动记录(512 字节)分为引导代码区、分区表和结束标志(0xAA55)。BIOS 读取这段代码并转交控制
  • 在 UEFI+GPT 模式下,固件直接解析 EFI 分区(FAT 格式),执行 .efi 文件来加载内核

安装与配置

GRUB2 是现代 Linux 默认的引导加载器,负责在多系统环境中展示启动菜单,并将内核与 initramfs 装载到内存

  1. 安装到磁盘

    grub2-install /dev/sda
    
  2. 配置脚本与变量

    • /etc/default/grub:定义超时、默认启动项、内核参数
    • /etc/grub.d/:多个脚本按数字顺序合成最终配置
  3. 生成最终配置

    grub2-mkconfig -o /boot/grub2/grub.cfg
    

启动菜单与加密

  • 调整超时时间
    编辑 GRUB_TIMEOUT 并更新配置
  • 追加内核参数
    GRUB_CMDLINE_LINUX 中加入 console=ttyS0rhgb quiet
  • 汉化或主题定制可通过 /etc/grub.d/05_debian_theme 等脚本修改
  • 若需保护引导项,可在 /boot/grub2/user.cfg 中配置 GRUB2_PASSWORD 并生成 PBKDF2 哈希

内核与 initramfs 阶段

内核加载

GRUB2 将指定内核映像 (vmlinuz-*) 和初始内存盘 (initramfs-*.img) 加载到内存
内核解压后借助 initramfs 中的驱动和工具完成根文件系统挂载

dracut 与 initramfs

CentOS 7 使用 dracut 生成 initramfs,包含常见文件系统和存储驱动

  • 配置目录:/etc/dracut.conf.d/

  • 手动重建:

    dracut --force /boot/initramfs-$(uname -r).img $(uname -r)
    
  • 查看内容:

    lsinitrd /boot/initramfs-$(uname -r).img
    

在模块丢失、LVM、RAID 或网络根挂载场景中,initramfs 的完整性与正确配置至关重要


systemd 启动阶段

内核完成初始化后,执行 /sbin/init(CentOS 中为 systemd),PID 1 由 systemd 接管启动流程
systemd 并行调度各类单元(unit),包含服务(.service)、挂载点(.mount)、目标(.target)等

target 及依赖

  • sysinit.target:完成基础初始化,如挂载 /etc/fstab、启动日志(journald)、加载 udev 规则
  • basic.target:在 sysinit 之后,启动网络、设备热插拔、定时任务
  • multi-user.target:多用户文本模式,常用于服务器,无图形界面
  • graphical.target:在 multi-user 基础上启动图形登录管理器(如 GDM)

查看依赖:

systemctl list-dependencies graphical.target

反向依赖:

systemctl list-dependencies sshd.service --reverse

并行化与日志

systemd 通过 socket-activated、DBus-activated 等机制加速启动
日志默认写入二进制格式,可使用 journalctl 查看历史与实时日志


运行级别映射

CentOS 6 及更早版本使用 SysV runlevel(0–6)
CentOS 7 全面转向 systemd target

RunlevelTarget描述
0poweroff.target关机
1rescue.target单用户模式、系统修复
2保留
3multi-user.target多用户文本界面
4保留
5graphical.target多用户图形界面
6reboot.target重启

切换:

systemctl isolate multi-user.target  
systemctl isolate graphical.target

设为默认:

systemctl set-default multi-user.target
systemctl get-default

重置 root 密码方法

方法一:rd.break 暂停至 initramfs

1 在 GRUB 编辑菜单 linux16 行尾追加 rd.break
2 启动后进入 initramfs shell,根分区挂载在 /sysroot(只读)
3 重新挂载并切换根

mount -o remount,rw /sysroot  
chroot /sysroot

4 重置密码并标记 SELinux 重新标记

passwd root  
touch /.autorelabel

5 退出两次,系统继续启动并完成 SELinux 重标记

方法二:init=/bin/bash 直接进入

1 linux16 行尾追加 init=/bin/bash
2 启动后根文件系统只读,重新挂载为读写后:

mount -o remount,rw /  
passwd -d root  
touch /.autorelabel  
exec /usr/lib/systemd/systemd

3 系统接管并继续启动,首次登录无需密码


/etc/fstab 引起的启动故障

/etc/fstab 定义系统文件系统和交换分区的自动挂载,语法不当可能导致启动卡顿或进入 emergency

常见故障场景

  • 挂载点不存在
    系统会自动创建对应目录并挂载,无需人工干预
  • 设备名或 UUID 错误
    systemd 在超时(约 1 分 30 秒)后进入 emergency 模式,需手动修改或注释错误行
  • 文件系统损坏
    initramfs 内尝试自动修复失败后进入 emergency
    可使用 xfs_repairfsck.ext4 等工具修复后继续启动

防护建议

  • 建议使用 UUID 或 LABEL 代替 /dev/sdXn
  • 为非关键挂载项添加 nofailx-systemd.device-timeout=10
  • 定期运行 fsck 或 xfs_repair 检查磁盘健康

grub2 故障排查与修复

MBR 结构回顾

主引导扇区(512B)划分为:

  • 引导程序区(446B)
  • 分区表(4×16B)
  • 结束标志(2B,0xAA55)

引导区损坏

使用以下命令清空 MBR 前 446 字节后将无法正常从硬盘引导

dd if=/dev/zero of=/dev/sda bs=1 count=446

修复步骤:
1 从光盘或 U 盘启动进入 Rescue 模式
2 chroot /mnt/sysimage 并确认读写挂载
3 执行

grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

4 退出 chroot 并重启

引导映像丢失

误操作移动或删除 /boot/vmlinuz-* 或 initramfs 后,GRUB 菜单将报错找不到文件
恢复策略:

  • 在 Rescue 模式挂载 /boot,从安装包或其他服务器复制文件
  • 重新运行 grub2-mkconfig 更新配置

硬盘加密与安全思考

通过 LUKS 对整盘加密,可避免物理窃取后数据泄露

  • /boot 分区保持明文,以便 GRUB 读取
  • 解密逻辑盘后,系统才能挂载根分区
  • rescue 环境或 LiveCD 也需输入解密密码才能访问加密分区

部署建议:

  • 使用 TPM+PIN 增强开机安全
  • /etc/crypttab 和 dracut 配置进行适当加固
  • 定期更换和备份密钥

务器复制文件

  • 重新运行 grub2-mkconfig 更新配置

硬盘加密与安全思考

通过 LUKS 对整盘加密,可避免物理窃取后数据泄露

  • /boot 分区保持明文,以便 GRUB 读取
  • 解密逻辑盘后,系统才能挂载根分区
  • rescue 环境或 LiveCD 也需输入解密密码才能访问加密分区

部署建议:

  • 使用 TPM+PIN 增强开机安全
  • /etc/crypttab 和 dracut 配置进行适当加固
  • 定期更换和备份密钥
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值