搜索

14.3. 引导至目标系统状态

download PDF

作为系统管理员,您可以控制系统的引导过程,并定义您希望系统引导到的状态。这称为 systemd 目标,它是您的系统启动以达到某一特定级别功能的一组 systemd 单元。在使用 systemd 目标时,您可以查看默认目标,选择一个运行时的目标,更改默认引导目标,引导到紧急或救援目标。

14.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 目标设置为默认或当前目标:

表 14.3. 常见 systemd 目标

rescue

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

多用户

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

图形化

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

紧急

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

其他资源

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

14.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) man page
  • bootup (7) 手册页

14.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) 手册页

14.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 文件系统,不会尝试挂载任何其他本地文件系统,不激活网络接口,并且仅启动几个必要的服务。

14.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.