Linux运维封神|SELinux详解+CentOS7启动原理+Root密码重置+开机故障排查实战
摘要:CentOS7启动流程、开机故障、Root密码重置是运维高频刚需、面试必考重点!本文一站式吃透SELinux安全机制、全套实操命令、CentOS7完整启动流程、Target运行机制、Root密码两种重置方案、fstab开机故障、GRUB2配置,零基础可学,直接落地生产环境!
关键词:CentOS7启动;Root密码重置;开机故障排查;systemd;GRUB2
一、CentOS 7 系统完整启动原理
现代计算机系统是硬件与软件的复杂组合,CentOS 7 从断电开机到登录提示符加载完成,需要硬件固件、引导程序、内核、系统初始化进程层层配合。CentOS 7 抛弃了传统 init 串行启动模式,全面采用 systemd 并行启动机制,大幅提升开机速度,同时使用 target 目标单元 替代传统启动级别。
1.1 CentOS7 九大标准启动流程

| 阶段 | 名称 | 核心说明 | 关键文件 / 要点 |
|---|---|---|---|
| 1 | POST 开机自检 | 服务器上电,BIOS/UEFI 固件执行硬件自检,初始化 CPU、内存、硬盘、网卡,检测硬件是否正常;按 F2 进入固件设置,修改启动顺序 | BIOS / UEFI 固件 |
| 2 | MBR/UEFI 引导加载 | 固件按启动顺序读取磁盘,加载磁盘引导程序,完成硬件固件向操作系统的控制权交接 | MBR 主启动记录、UEFI 分区 |
| 3 | GRUB2 引导菜单 | 加载 GRUB2 引导程序,读取配置展示启动菜单;可选择内核、编辑内核参数,用于排错、重置 root 密码 | /boot/grub2/grub.cfg |
| 4 | 内核与 initramfs 加载 | GRUB2 把 vmlinuz 内核、initramfs 临时文件系统加载到内存;initramfs 提供驱动,识别硬盘、LVM、RAID,为挂载真实根文件系统做准备 | vmlinuz、initramfs |
| 5 | 启动 PID=1 进程 systemd | 内核初始化硬件完成,执行/sbin/init,CentOS7 为 systemd 软链接;systemd 成为系统第一个进程,接管全部初始化工作 |
/sbin/init → systemd,PID=1 |
| 6 | 加载默认 target 启动目标 | systemd 读取系统默认启动目标,依据单元依赖关系,准备挂载文件系统、启动服务与终端 | default.target |
| 7 | sysinit.target 系统底层初始化 | 挂载磁盘分区、启动日志服务、设置内核参数、生成硬件设备节点 | sysinit.target、/etc/fstab |
| 8 | 加载开机自启服务 | 根据 target 依赖批量启动系统服务,如 sshd、firewalld、crond 等,完成业务环境初始化 | 各类 systemd service 单元 |
| 9 | 启动终端登录界面 | 激活getty.target,打开 tty 终端,出现登录界面,等待用户账号密码登录 |
getty.target、tty1 终端 |
1.2 systemd Target 运行目标机制
systemd 使用 target 单元分组系统服务,替代 CentOS6 及之前的运行级别,支持服务并行启动、依赖管理更清晰。不同target对应不同系统运行状态,层级依次嵌套:graphical.target > multi-user.target > basic.target > sysinit.target
1.3 运行级别与Target对应关系
-
0:关机,对应
poweroff.target,等价init 0 -
1:单用户/救援模式,对应
emergency.target、rescue.target,用于系统修复 -
2:多用户文本模式(无NFS)
-
3:完整多用户文本模式,对应
multi-user.target(生产常用) -
4:预留未使用
-
5:图形化界面,对应
graphical.target -
6:重启,对应
reboot.target,等价init 6
1.4 Target 常用管理命令
bash
# 查看图形化目标依赖关系
systemctl list-dependencies graphical.target
# 查看服务反向依赖(查看服务归属哪个启动目标)
systemctl list-dependencies sshd.service --reverse
# 临时切换当前系统运行目标
systemctl isolate multi-user.target
systemctl isolate graphical.target
# 查看系统默认开机目标
systemctl get-default
# 设置系统默认开机目标
systemctl set-default multi-user.target
1.5 开机临时指定启动Target(排错专用)
系统启动过程中可临时修改内核参数,指定启动目标,多用于系统故障修复,临时生效、重启失效:
-
重启系统,在GRUB2菜单按任意键中断倒计时
-
光标选中需要启动的内核条目,按
e进入编辑模式 -
光标移动至 linux 开头的内核参数行
-
行尾追加参数:
systemd.unit=emergency.target -
按
Ctrl+x临时启动系统,进入对应目标模式
二、CentOS7 Root密码重置两种实战方案
CentOS7 摒弃了传统单用户改密码方式,官方提供两种安全可靠的密码重置方案,适配SELinux开启环境,生产环境可直接使用。
9.1 方法一:rd.break(官方推荐、无风险)
中断阶段:initramfs阶段,未切换真实根文件系统,提示符 switch_root:/#
-
重启系统,GRUB2界面按任意键中断启动
-
选中内核,按
e编辑启动参数
-
找到linux开头行,行尾添加
rd.break
-
可选补充:
console=tty0解决终端显示异常问题 -
按
Ctrl+x启动,进入临时shell -
重新挂载根文件系统为可读写模式
-
切换真实系统根目录
-
重置root密码
-
开启SELinux自动标记(必须操作,否则开机报错)
-
两次exit退出,系统自动重启生效
bash
# 重新挂载根目录为读写
mount -o remount,rw /sysroot
# 切换真实系统根
chroot /sysroot
# 重置root密码
passwd root
# SELinux重新标记(核心步骤)
touch /.autorelabel
# 两次退出重启
exit
exit
9.2 方法二:init=/bin/bash(兼容旧方式、不推荐生产)
中断阶段:内核启动完成后,替代PID1进程,直接进入系统bash终端
-
重启系统,GRUB2界面按任意键中断启动
-
选中内核,按
e编辑启动参数
-
找到linux开头行,行尾添加
init=/bin/bash -
按
Ctrl+x进入root shell -
重新挂载根目录为读写模式
-
重置密码、创建SELinux标记文件
-
必须执行exec /sbin/init 完成完整启动流程,禁止直接断电重启

bash
# 重新挂载根目录
mount -o remount,rw /
# 重置密码
passwd root
# SELinux标记文件
touch /.autorelabel
# 拉起systemd完成启动
exec /sbin/init
9.3 两种密码重置方案对比
| 对比项 | rd.break | init=/bin/bash |
|---|---|---|
| 中断阶段 | initramfs阶段,切换真实根之前 | 内核启动后,替代systemd(PID1) |
| 根文件系统位置 | 真实根在/sysroot,需chroot切换 | 直接加载真实系统/目录 |
| SELinux适配 | 需创建.autorelabel,兼容SELinux开启 | 需创建.autorelabel,否则开机异常 |
| 磁盘兼容性 | 支持LVM、RAID、iSCSI,驱动完整 | 驱动正常,兼容所有磁盘格式 |
| 退出方式 | 两次exit,自动正常启动 | 必须执行exec /sbin/init,禁止直接重启 |
| 风险等级 | 极低,官方标准方案 | 高,误操作易损坏文件系统 |
| 生产推荐 | ✅ 优先使用 | ❌ 仅测试使用 |
三、/etc/fstab 开机故障三大场景实战修复
/etc/fstab 控制系统开机自动挂载分区,配置错误会导致系统开机超时、进入emergency紧急模式,是运维高频故障。
3.1 环境准备(模拟分区挂载)
bash
# 创建磁盘分区
parted /dev/sdb mklabel msdos
parted /dev/sdb unit MiB mkpart primary 1 10241
# 格式化为xfs文件系统
mkfs.xfs /dev/sdb1
# 创建挂载点
mkdir /data01
# 写入fstab持久挂载
echo '/dev/sdb1 /data01 xfs defaults 0 0' >> /etc/fstab
# 验证挂载
mount -a
df -h /data01
3.2 故障一:挂载点目录不存在
故障现象:开机检测不到挂载点目录,挂载失败,进入紧急模式
修复方案:
-
进入emergency模式,输入root密码登录
-
创建缺失挂载点目录:
mkdir /data01 -
执行
mount -a验证挂载 -
exit 退出,系统正常启动
3.3 故障二:设备名称写错/设备不存在
故障现象:fstab中设备名错误(如sdb1写成sdb2),系统开机超时1分30秒,进入紧急模式
修复方案:
-
紧急模式登录root
-
编辑
vim /etc/fstab,修正设备名或注释错误条目 -
mount -a检测无报错 -
reboot 重启系统
3.4 故障三:文件系统损坏
故障模拟:破坏分区文件系统
bash
dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
故障现象:开机自动修复文件系统失败,进入紧急模式
修复方案:
bash
# 修复xfs文件系统
xfs_repair /dev/sdb1
# 修复完成后挂载验证
mount -a
exit
四、GRUB2 引导配置详解
GRUB2是CentOS7默认引导程序,负责系统启动菜单、内核参数加载,掌握其配置可解决开机菜单异常、内核参数修改、超时时间调整等问题。
4.1 GRUB2 核心配置文件
-
/boot/grub2/:GRUB2核心目录,包含grub.cfg、grubenv等核心文件 -
/etc/grub2.cfg:默认BIOS启动软链接,指向/boot/grub2/grub.cfg -
/etc/grub2-efi.cfg:UEFI启动模式专用配置文件 -
/etc/default/grub:GRUB2全局变量配置文件(手动修改唯一文件) -
/etc/grub.d/:启动脚本目录,按数字顺序执行,生成启动菜单 -
/boot/grub2/grubenv:记录默认启动内核条目
⚠️ 注意:禁止直接修改grub.cfg ,该文件为自动生成文件,修改无效!所有自定义配置需修改 /etc/default/grub 和 /etc/grub.d/ 脚本,再重新生成配置。
4.2 实战:修改GRUB2菜单超时时间
bash
# 编辑GRUB2全局配置
vim /etc/default/grub
# 修改超时时间(单位:秒)
GRUB_TIMEOUT=10
# 重新生成grub.cfg配置文件(生效配置)
grub2-mkconfig -o /etc/grub2.cfg
# 重启验证
reboot
效果如下:

五、全文总结
-
启动流程:POST自检→GRUB2引导→内核加载→systemd初始化→终端登录
-
systemd Target替代传统启动级别,支持并行启动,启动效率更高
-
Root密码重置优先使用rd.break官方方案,安全无风险
-
fstab配置错误是开机紧急模式最主要原因,优先检查挂载配置
-
GRUB2配置禁止直接修改cfg文件,修改默认配置后重新生成即可
原创不易,欢迎点赞、收藏、关注!持续更新Linux运维实战干货,帮你从零吃透运维核心技能!