Red Hat Training

A Red Hat training course is available for RHEL 8

14.3. ターゲットシステム状態でのブート

システム管理者は、システムのブートプロセスを制御し、システムがブートする状態を定義できます。これは systemd ターゲットと呼ばれ、特定のレベルの機能を達成するためにシステムが起動する systemd ユニットのセットです。systemd ターゲットの操作時には、デフォルトのターゲットの表示、実行時のターゲットの選択、デフォルトのブートターゲットの変更、緊急ターゲットまたはレスキューターゲットでのブートを行うことができます。

14.3.1. ターゲットユニットファイル

systemd ターゲットは、システムの起動時に同期ポイントとして機能する関連ユニットのグループです。.target ファイル拡張子で終わるターゲットユニットファイルは、systemd ターゲットを表します。ターゲットユニットの目的は、依存関係のチェーンでさまざまな systemd ユニットをグループ化することです。

以下の例を参照してください。

  • グラフィカルセッションを開始するための graphical.target unit は、GNOME Display Manager (gdm.service)または Accounts Service (accounts-daemon.service)などのシステムサービスを開始し、multi-user.target unit もアクティブにします。
  • 同様に、multi-user.target ユニットは、NetworkManager (NetworkManager.service)、D-Bus (dbus.service) といった、その他の必須システムサービスを開始し、basic.target という別のターゲットユニットをアクティブにします。

次の systemd ターゲットをデフォルトまたは現在のターゲットとして設定できます。

表14.3 一般的な systemd ターゲット

rescue

ベースシステムにプルしてレスキューシェルを生成するユニットターゲット

multi-user

マルチユーザーシステムを設定するためのユニットターゲット

graphical

グラフィカルログイン画面を設定するためのユニットターゲット

emergency

メインコンソールで緊急シェルを起動するユニットターゲット

関連情報

  • systemd.special(7) man ページ
  • systemd.target(5) man ページ

14.3.2. ブート先のデフォルトターゲットの変更

システムが起動すると、systemd は、実際のターゲットユニットを指す default.target シンボリックリンクをアクティブにします。現在選択されているデフォルトのターゲットユニットは、/etc/systemd/system/default.target ファイルで確認できます。各ターゲットは特定のレベルの機能を表し、他のユニットをグループ化するために使用されます。さらに、ターゲットユニットはブート時に同期ポイントとして機能します。システムがブートするデフォルトターゲットを変更できます。デフォルトのターゲットユニットを設定すると、次回の再起動まで現在のターゲットは変更されません。

前提条件

  • Root アクセス

手順

  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) man ページ
  • systemd.special(7) man ページ
  • bootup(7) man ページ

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) man ページ

14.3.4. レスキューモードでの起動

システムが後のターゲットにアクセスできず、通常のブートプロセスが失敗した場合に、トラブルシューティングまたは修復のためのシングルユーザー環境を提供する レスキューモード で起動できます。レスキューモードでは、システムはすべてのローカルファイルシステムをマウントし、特定の重要なシステムサービスを起動しようとしますが、ネットワークインターフェイスはアクティブになりません。

前提条件

  • Root アクセス

手順

  • レスキューモードに入るには、現行セッションで現在のターゲットを変更します。

    # 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 回のブートにしか影響しません。可能な限り最小限の環境を提供する 緊急モード で起動できます。

手順

  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. 別のブートターゲットを選択するには、linux で始まる行の末尾に systemd.unit= パラメーターを追加します。

    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 を押して、これらの設定で起動します。