12.3. 引导至目标系统状态
作为系统管理员,您可以控制系统的引导过程,并定义您希望系统引导进入的状态。这称为 systemd
目标,它是您的系统启动以达到特定级别功能的一组 systemd
单元。在使用 systemd 目标时,您可以查看默认目标,选择运行时的一个目标,更改默认引导目标,引导到紧急或救援目标。
12.3.1. 目标单元文件
systemd
中的目标是一组相关的单元,在系统开始期间充当同步点。目标单元文件以 .target
文件扩展名结尾,代表 systemd
目标。目标单元的目的是通过一组依赖项将各种 systemd
单元分组到一起。
请考虑以下示例:
-
用于启动图形会话的
graphical.target 单元
启动系统服务,如 GNOME 显示管理器(gdm.service
)或 Accounts Service (accounts-daemon.service
),同时还激活multi-user.target 单元
。 -
同样,
multi-user.target
单元启动其他基本系统服务,如 NetworkManager (NetworkManager.service
) 或 D-Bus (dbus.service
),并激活另一个名为basic.target
的目标单元。
您可以将以下 systemd
目标设置为默认或当前目标:
救援 | 在基本系统中拉取的单元目标,并生成一个救援 shell |
多用户 | 用于设置多用户系统的单元目标 |
图形化 | 用于设置图形登录屏幕的单元目标 |
紧急 | 在主控制台上启动紧急 shell 的单元目标 |
其他资源
-
systemd.special(7)
手册页 -
systemd.target(5)
手册页
12.3.2. 更改要引导到的默认目标
当系统启动时,systemd
会激活 default.target
符号链接,该链接指向真正的目标单元。您可以在 /etc/systemd/system/default.target
文件中找到当前所选的默认目标单元。每个目标代表某一个功能级别,用于对其他单元进行分组。另外,目标单元会在引导过程中充当同步点。您可以更改系统引导到的默认目标。当您设置默认目标单元时,当前目标将保持不变,直到下次重启为止。
先决条件
- 根访问权限
流程
确定使用当前的默认目标单元
systemd
来启动系统:# systemctl get-default graphical.target
列出当前载入的目标:
# systemctl list-units --type target
将系统配置为默认使用不同的目标单元:
# systemctl set-default <name>.target
将
<name>
替换为您要默认使用的目标单元的名称。Example: # systemctl set-default multi-user.target Removed /etc/systemd/system/default.target Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
验证默认目标单元:
# systemctl get-default multi-user.target
通过重启来应用更改:
# reboot
其他资源
-
systemctl (1)
手册页 -
systemd.special(7)
手册页 -
bootup (7)
手册页
12.3.3. 更改当前目标
在运行的系统商,您可以在不重启的情况下更改当前启动中的目标单元。如果您切换到不同的目标,systemd
会启动所有服务及其这个目标需要的依赖项,并停止新目标没有启用的所有服务。隔离不同的目标只会影响当前引导。
流程
可选:确定当前目标:
# systemctl get-default graphical.target
可选:显示您可以选择的目标列表:
# systemctl list-units --type target
注意您只能隔离单元文件中设置了
AllowIsolate=yes
选项的目标。在当前引导中切换到不同的目标单元:
# systemctl isolate <name>.target
将 <name> 替换为您要在当前引导中使用的目标单元的名称。
Example: # systemctl isolate multi-user.target
这个命令启动名为
multi-user
的目标单元和所有依赖单元,并立即停止所有其他单元。
其他资源
-
systemctl (1)
手册页
12.3.4. 引导至救援模式
您可以引导到 救援模式,其提供单用户环境的以便在系统无法进入到后续目标,且常规引导过程失败时进行故障排除或修复。在救援模式下,系统会尝试挂载所有本地文件系统,并启动某些重要的系统服务,但不会激活网络接口。
先决条件
- 根访问权限
流程
要进入救援模式,在当前会话中更改当前目标:
# systemctl rescue Broadcast message from root@localhost on pts/0 (Fri 2023-03-24 18:23:15 CEST): The system is going down to rescue mode NOW!
注意这个命令与
systemctl isolate rescue.target
类似,但它也会向当前登录到该系统的所有用户发送信息性消息。要防止
systemd
发送信息,使用--no-wall
命令行选项输入以下命令:# systemctl --no-wall rescue
故障排除步骤
如果您的系统无法进入救援模式,您可以引导至 紧急模式,其提供尽可能小的环境。在紧急模式下,系统仅挂载用于读取的 root 文件系统,不会尝试挂载任何其他本地文件系统,不激活网络接口,并且仅启动几个必要的服务。
12.3.5. 引导过程故障排除
作为系统管理员,您可以在引导时选择非默认目标来对引导过程进行故障排除。在引导时更改目标仅影响单个引导。您可以引导到 紧急模式,它提供了尽可能小的环境。
流程
- 重启系统,通过按 Enter 键之外的任意键中断引导装载程序菜单倒计时,这将发起一个正常的启动。
- 将光标移至要启动的内核条目。
- 按 E 键编辑当前条目。
移动到以
linux
开头的行的末尾,然后按 Ctrl+E 跳到行尾:linux ($root)/vmlinuz-5.14.0-70.22.1.e19_0.x86_64 root=/dev/mapper/rhel-root ro crash\ kernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv/swap rhgb quiet
要选择备用引导目标,请将
systemd.unit=
参数附加到linux
开头的行的末尾:linux ($root)/vmlinuz-5.14.0-70.22.1.e19_0.x86_64 root=/dev/mapper/rhel-root ro crash\ kernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv/swap rhgb quiet systemd.unit=<name>.target
将
<name>
替换为您要使用的目标单元的名称。例如:systemd.unit=emergency.target
- 按 Ctrl+X 使用这些设置引导。