12.3. ターゲットシステム状態でのブート
システム管理者は、システムのブートプロセスを制御し、システムがブートする状態を定義できます。これは systemd
ターゲットと呼ばれ、特定のレベルの機能を達成するためにシステムが起動する systemd
ユニットのセットです。systemd ターゲットの操作時には、デフォルトのターゲットの表示、実行時のターゲットの選択、デフォルトのブートターゲットの変更、緊急ターゲットまたはレスキューターゲットでのブートを行うことができます。
12.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
ターゲットをデフォルトまたは現在のターゲットとして設定できます。
rescue | ベースシステムにプルしてレスキューシェルを生成するユニットターゲット |
multi-user | マルチユーザーシステムを設定するためのユニットターゲット |
graphical | グラフィカルログイン画面を設定するためのユニットターゲット |
emergency | メインコンソールで緊急シェルを起動するユニットターゲット |
関連情報
-
systemd.special(7)
man ページ -
systemd.target(5)
man ページ
12.3.2. ブート先のデフォルトターゲットの変更
システムが起動すると、systemd
は、実際のターゲットユニットを指す default.target
シンボリックリンクをアクティブにします。現在選択されているデフォルトのターゲットユニットは、/etc/systemd/system/default.target
ファイルで確認できます。各ターゲットは特定のレベルの機能を表し、他のユニットをグループ化するために使用されます。さらに、ターゲットユニットはブート時に同期ポイントとして機能します。システムがブートするデフォルトターゲットを変更できます。デフォルトのターゲットユニットを設定すると、次回の再起動まで現在のターゲットは変更されません。
前提条件
- Root アクセス
手順
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)
man ページ -
systemd.special(7)
man ページ -
bootup(7)
man ページ
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)
man ページ
12.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 ファイルシステムを読み込み専用でマウントし、他のローカルファイルシステムのマウントは試みません。また、ネットワークインターフェイスのアクティブ化も行わず、限定的な必須サービスのみを起動します。
12.3.5. ブートプロセスのトラブルシューティング
システム管理者は、ブート時にデフォルト以外のターゲットを選択して、ブートプロセスのトラブルシューティングを行うことができます。ブート時のターゲットの変更は、1 回のブートにしか影響しません。可能な限り最小限の環境を提供する 緊急モード で起動できます。
手順
- システムを再起動し、通常のブートを開始する 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
別のブートターゲットを選択するには、
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
です。- Ctrl+X を押して、これらの設定で起動します。