搜索

12.3. 引导至目标系统状态

download PDF

作为系统管理员,您可以控制系统的引导过程,并定义您希望系统引导进入的状态。这称为 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 目标设置为默认或当前目标:

表 12.3. 常见 systemd 目标

救援

在基本系统中拉取的单元目标,并生成一个救援 shell

多用户

用于设置多用户系统的单元目标

图形化

用于设置图形登录屏幕的单元目标

紧急

在主控制台上启动紧急 shell 的单元目标

其他资源

  • systemd.special(7) 手册页
  • systemd.target(5) 手册页

12.3.2. 更改要引导到的默认目标

当系统启动时,systemd 会激活 default.target 符号链接,该链接指向真正的目标单元。您可以在 /etc/systemd/system/default.target 文件中找到当前所选的默认目标单元。每个目标代表某一个功能级别,用于对其他单元进行分组。另外,目标单元会在引导过程中充当同步点。您可以更改系统引导到的默认目标。当您设置默认目标单元时,当前目标将保持不变,直到下次重启为止。

先决条件

  • 根访问权限

流程

  1. 确定使用当前的默认目标单元 systemd 来启动系统:

    # systemctl get-default
    graphical.target
  2. 列出当前载入的目标:

    # systemctl list-units --type target
  3. 将系统配置为默认使用不同的目标单元:

    # 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
  4. 验证默认目标单元:

    # systemctl get-default
    multi-user.target
  5. 通过重启来应用更改:

    # reboot

其他资源

  • systemctl (1) 手册页
  • systemd.special(7) 手册页
  • bootup (7) 手册页

12.3.3. 更改当前目标

在运行的系统商,您可以在不重启的情况下更改当前启动中的目标单元。如果您切换到不同的目标,systemd 会启动所有服务及其这个目标需要的依赖项,并停止新目标没有启用的所有服务。隔离不同的目标只会影响当前引导。

流程

  1. 可选:确定当前目标:

    # systemctl get-default
    graphical.target
  2. 可选:显示您可以选择的目标列表:

    # systemctl list-units --type target
    注意

    您只能隔离单元文件中设置了 AllowIsolate=yes 选项的目标。

  3. 在当前引导中切换到不同的目标单元:

    # 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. 引导过程故障排除

作为系统管理员,您可以在引导时选择非默认目标来对引导过程进行故障排除。在引导时更改目标仅影响单个引导。您可以引导到 紧急模式,它提供了尽可能小的环境。

流程

  1. 重启系统,通过按 Enter 键之外的任意键中断引导装载程序菜单倒计时,这将发起一个正常的启动。
  2. 将光标移至要启动的内核条目。
  3. 按 E 键编辑当前条目。
  4. 移动到以 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
  5. 要选择备用引导目标,请将 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

  6. 按 Ctrl+X 使用这些设置引导。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.