RH134学习进程——十.控制启动过程
十.控制启动过程
1.选择启动target目标
在 RHEL9(基于 systemd 的系统) 中,target 是 systemd 初始化系统中的 “目标单元”,可以理解为一组系统单元(Unit,如服务、挂载点、设备等)的集合,用于定义系统的运行状态,替代了传统 Linux 系统中的 “运行级别”。
如:
把 RHEL9 的 target 想象成 “手机的场景模式”:
rescue.target → 相当于 “手机的‘维修模式’”:系统进入单用户可修复环境(类似手机的 “安全模式”),适合忘记密码、系统故障时用来修复。
graphical.target → 相当于 “手机的‘娱乐模式’”:系统会启动图形桌面、多用户登录等功能,适合日常办公、用图形界面操作的场景。
1.1 RHEL9启动过程
阶段1:固件与引导加载器
(1)电源启动 → 系统固件(UEFI/BIOS)执行POST自检和硬件初始化;
(2)固件搜索可启动设备(UEFI设置或MBR主启动记录);
(3)加载GRUB2引导加载器并移交控制权;
(4)GRUB2配置显示启动菜单供内核选择;
(5)加载内核和initramfs到内存中;
(6)控制权移交给内核;
阶段2:内核与initramfs
(1)内核初始化硬件并执行initramfs中的systemd(PID=1);
(2)initramfs中的systemd执行initrd.target所有单元;
(3)挂载根文件系统到/sysroot目录;
阶段3:系统初始化
(1)切换根文件系统从initramfs到磁盘上的真实根文件系统
(2)systemd重新执行使用磁盘中的systemd程序
(3)查找默认target并启动相应服务单元
(4)系统就绪显示登录界面
1.2系统重启关机
systemctl poweroff
停止所有运行的服务,卸载所有的文件系统(或者在文件系统无法卸载时,以只读的形式重新挂载),然后关闭系统;
systemctl reboot
停止所有运行的服务,卸载所有的文件系统,然后重启系统;
或者
直接使用poweroff和reboot,它们是systemctl软链接。
1.3常见systemd target
| 目标 | 用途说明 |
| graphical.target | 系统支持多用户、图形界面+文本登录(需安装图形桌面环境),依赖 multi-user.target |
| multi-user.target | 系统仅支持多用户、文本登录(无图形界面),服务器场景常用运行状态 |
| rescue.target | 进入救援模式,单用户可写环境(sulogin提示),用于系统修复(如密码重置、服务故障排查) |
| emergency.target | 进入紧急模式,单用户只读环境(sulogin提示),用于极端故障排查(如根文件系统损坏) |
| poweroff.target | 执行系统关机流程,有序停止所有服务后断电 |
| reboot.target | 执行系统重启流程,有序停止所有服务后重启 |
| getty.target | 管理文本登录提示符,为multi-user.target等提供命令行登录入口 |
1.4切换target
在运行系统中,使用systemctl isolate命令切换其他target;
如:
systemctl isolate 目标.target
isolate的核心逻辑是:
(1)停止当前 target 及其依赖中不需要的所有服务;
(2)启动目标 target 中尚未启动的所需服务。
通过这种 “按需启停”,实现系统运行状态的实时切换(无需重启系统)。
限制:
只有在 target 的unit 文件中设置了 AllowIsolate=yes 的目标,才能被 isolate 切换。
可切换示例:
graphical.target;multi-user.target;rescue.target等(这些 target 用于定义系统的核心运行状态,支持动态切换)。
不可切换示例:
cryptsetup.target;basic.target等(这些 target 是作为 “基础依赖”存在的,unit 文件中未设置“ AllowIsolate=yes”,仅用于被其他 target 依赖,不支持直接切换运行状态)。
1.5设置默认target
系统启动时,systemd会激活default.target。
通常:/etc/systemd/system/中的default.target 的软连接指向 graphical.target
或 multi-user.target
1.6一般流程
(1)查看默认target
systemctl get-default

(2)设置target
systemctl set-default 目标.target
如:
systemctl set-default multi-user.target

(3)验证默认设置:
查看默认设置
systemctl get-default

成功改变默认设置
2.重置root密码
2.1从loader重置root密码
RHEL6 及更早版本:
管理员可将系统启动到 runlevel 1(单用户模式),启动后会直接获得 root 提示符(无需密码验证),从而直接重置 root 密码。
RHEL9:
initramfs(初始 RAM 文件系统)是系统启动时加载的临时根环境,包含硬件驱动、初始化脚本等关键组件。在 RHEL9 中,可通过让 initramfs 脚本 “暂停”,从而进入 root shell 重置密码:
2.2步骤:
2.2.1在boot loader阶段
(1)重启系统
systemctl reboot
(2)中断boot loader倒计时
按任意键(Enter除外)中端倒计时
(3)选择要启动的内核条目(带有rescue一词的条目)
如:

(4)编写此条目
按“e”编写选定条目
如:

(5)找到命令行并修改
找到linux开头的行,在最后输入rd.break
解释:
rd=Ramdisk(内存磁盘)
这里的 rd 特指 initramfs(初始 RAM 文件系统)—— 系统启动时内核加载的临时根环境,包含启动必需的驱动、工具和初始化脚本。
break=中断,暂停
表示让 initramfs 中的初始化脚本“停止执行”,不再继续往下完成 “切换到真正根文件系统” 和 “启动 systemd 验证密码” 的流程。
如:


(6)应用新配置并启动
Ctrl+x
2.2.2进入root shell并修改密码
此时系统会显示root shell,磁盘的实际根文件系统会只读挂载到/sysroot,需要将根文件系统更改为读写模式;
(1)重新挂载根文件系统以读写模式;
mount -o rw,remount /sysroot
如:

(2)切换到实际的根目录
通过 rd.break 进入临时 root shell 时,当前的根目录(/)是 initramfs(临时 RAM 文件系统),而非你磁盘上的实际系统根目录。
命令:
chroot /sysroot
解释:
chroot 是 “change root” 的缩写,作用是将当前进程的根目录切换到 /sysroot(即你磁盘上的实际系统根目录)。

(3)重置root密码
passwd root
如:

(4)更新SELinux上下文(避免密码文件权限问题)
touch /.autorelabel

(5)退出并重启
输入两次exit

完成root密码的重新配置,尝试登录以验证2。
2.3检查日志
systemd journal 是 systemd 系统的集中式日志管理工具,用于记录系统启动、服务运行、内核消息等各类日志。
如果systemd journal在重启后持久保留,则可以使用journalctl工具来检查启动失败日志;
默认存储(临时存储):
日志保存在 /run/log/journal 目录,该目录是临时文件系统,重启后日志会被删除,仅适用于临时排查当前会话的日志。
持久化存储:
若需日志在重启后保留,需配置为存储到 /var/log/journal 目录(永久文件系统)。
2.3.1检查日志流程

2.3.2配置日志持久化
(1)编辑配置文件
需要修改/etc/systemd/journald.conf,将“[Journal]”段中添加或修改参数:“Storage”参数设置为“persistent”
如:
vim /etc/systemd/journald.conf

修改:

(2)重启日志服务
systemctl restart systemd-journald.service

配置后,日志会持久存储在 /var/log/journal,重启后不再丢失,便于长期排查系统启动、服务故障等问题。
2.3.3检查日志
journalctl 是管理 systemd journal 的核心工具,可通过以下命令精准排查启动故障:
命令格式:
journalctl -b -1 -p err
解释:
-b:指定 “启动会话”,-b -1 表示上一次启动的日志(若不指定 -1,则显示当前启动会话的日志)。
-p err:指定日志级别为 “错误(err)” 及更严重级别(如 crit、alert、emerg),用于快速过滤启动过程中的错误信息,定位故障根源。
3.修复在启动时出现的问题
3.1诊断和修复文件系统问题
文件系统或 /etc/fstab(文件系统挂载配置文件)的错误会直接阻止系统正常启动,systemd 会通过 “紧急修复 shell” 来暴露问题。
常见场景:
| 问题类型 | 系统响应结果 |
| 损坏文件系统 | systemd 尝试自动修复,若问题严重无法修复,系统将降至紧急 shell(需输入 root 密码进入)。 |
| /etc/fstab中设备/ UUID不存在 | systemd 会等待设备可用,超时后降至紧急 shell。 |
| /etc/fstab挂载点不存在 | 系统直接降至紧急 shell。 |
| /etc/fstab挂载点错误 | 系统直接降至紧急 shell。 |
3.2紧急shell与emergency.target的修复逻辑
当系统进入紧急 shell时,管理员可利用 emergency.target(紧急模式)进行诊断修复;
优势:
在显示紧急 shell 前,不会自动挂载任何文件系统,避免因错误挂载加剧故障,为手动修复提供 “纯净环境”。
3.3修复文件系统问题
为了访问因为文件系统问题,无法完成启动的系统,systemd的架构提供emergency boot target;它将打开一个需要root密码才能访问的紧急shell;
在编辑内核条目中Linux一行中,末尾输入:
“systemd.unit=emergency.target”
即可绕过正常启动流程中 “启动作业失败导致的崩溃”,直接进入可操作的修复 shell,然后进行修复操作
3.4修复步骤:
3.4.1登录紧急模式
(1)登录紧急模式,编辑内核
在编辑内核条目中Linux一行中,末尾输入:
“systemd.unit=emergency.target”
(2)Ctrl+x启动
(3)使用root密码进入root用户
3.4.2修复文件
(1)确定当前挂载的文件系统
使用mount命令确定systemd守护进程当前挂载了哪些文件系统;
命令:
mount
(2)修改根文件系统
如果根文件系统使用ro(只读)选项挂载,将其修改为rw(读写);
命令:
mount -o remount,rw /
(3)显示错误
执行命令:
mount -a
尝试增量挂载/etc/fstab 中配置的所有文件系统,观察挂载文件系统时发生的错误。
增量挂载:会按照 /etc/fstab 的配置顺序,逐个尝试挂载文件系统;
(4)编辑/etc/fstab文件
编辑配置文件,删除或注释掉显示报错的信息。
(5)注册新/etc/fstab文件
当更正/etc/fstab文件中所有问题后,通知systemd守护进程注册新的/etc/fstab文件,尝试重新挂载所有条目;
命令:
systemctl daemon-reload
mount -a
(6)重启系统
若尝试成功无误,重启系统;
命令:
systemctl reboot
流程图










