Linux – systemd のターゲット (target) について解説

目次

概要

この記事では、systemdのターゲットについての基本的な説明と、主要なターゲットの一覧、ターゲットの確認方法および変更方法について紹介します。

ターゲット (target)

ターゲット (target) は、systemd システムにおいて、システムの状態を表す仮想的なユニットで、従来の SysVInit のランレベル (Run Level)に相当する機能を提供します。 ターゲットは、.target 拡張子を持つユニットファイルで定義され、複数のユニットをグループ化し、それらを一緒に起動または停止するために使用されます。

ターゲットの一覧

以下に主要なターゲットとその特徴を説明します:

ターゲット 説明 用途
default.target システムのデフォルトの状態 通常は multi-user.target または graphical.target へのリンク
multi-user.target GUI なしのマルチユーザーモード 主にサーバー運用などで使用
graphical.target GUI ありのマルチユーザーモード デスクトップ環境を利用する場合に使用
rescue.target シングルユーザーモード システムエラーの修復やトラブルシューティングに使用
emergency.target シングルユーザーモード 重大なシステムエラーの修復に使用
network.target ネットワーク機能が利用可能な状態 ネットワーク関連サービスが起動する前提条件
network-online.target ネットワークがオンラインな状態 ネットワーク接続を必要とするサービスを開始する前提条件
shutdown.target システムのシャットダウンを行う システムのシャットダウン
reboot.target システムの再起動を行う システムの再起動
halt.target システムの停止を行う システムの停止
suspend.target システムのサスペンドを行う システムのサスペンド
hibernate.target システムのハイバネーションを行う システムのハイバネート
hybrid-sleep.target システムのハイブリッドサスペンドを行う システムのハイブリッドスリープ
poweroff.target システムの電源オフを行う システムの電源オフ

SysV Init のランレベルとの対応

ランレベル (Runlevel) は、従来の SysVinit システムにおいて、システムの状態を定義する概念です。 以下の表は、SysVinit システムのランレベルと systemd のターゲットの対応を示しています:

SysV Init ランレベル systemd ターゲット 説明
0 runlevel0.target システムのシャットダウンを行う
1 runlevel1.target シングルユーザーモード
1 rescue.target runlevel1.target のエイリアス
2, 3, 4 runlevel{2,3,4}.target GUI なしのマルチユーザーモード
2, 3, 4 multi-user.target runlevel{2,3,4}.target のエイリアス
5 runlevel5.target GUI ありのマルチユーザーモード
5 graphical.target runlevel5.target のエイリアス
6 runlevel6.target システムの再起動を行う
6 reboot.target runlevel6.target のエイリアス

システムのシャットダウン、スリープ、再起動

システムのシャットダウン、停止、再起動といった処理は、systemd ではターゲットとして定義されていますが、SysVinit 互換のコマンドも引き続き使用可能です。 これは、/usr/sbin/shutdown -> /bin/systemctl のように、従来の SysVinit のコマンドをすべて systemctl へのシンボリックリンクとして設定し、systemd はシンボリックリンク元のコマンド名を識別して適切な処理を実行することで実現しています。

以下は各処理に対する SysVinit 互換コマンドと systemd コマンドの対応になります。

処理 SysV Init 互換コマンド systemd コマンド
システムの停止 halt systemctl halt
システムの電源オフ shutdown -P now / poweroff systemctl poweroff
システムのシャットダウン shutdown -h now systemctl shutdown
システムの再起動 shutdown -r now / reboot systemctl reboot
システムのサスペンド echo mem > /sys/power/state systemctl suspend
システムのハイバネーション echo disk > /sys/power/state systemctl hibernate
システムのハイブリッドスリープ systemctl hybrid-sleep

各動作の違いは以下のようになっています。

  • halt (停止): システムのプロセスをすべて終了し、CPU の動作を停止します。
    ただし、近年の Linux では haltpoweroff と同じ動作をすることが多く、電源が切れる場合もあります。
  • poweroff (電源オフ): システムのプロセスを終了し、電源を切ります。
  • shutdown (シャットダウン): システムのプロセスを安全に終了し、指定した時間後にシステムを停止または再起動します。
  • reboot (再起動): システムをシャットダウンした後、すぐに再起動します。
  • suspend (サスペンド、スリープ): メモリを保持しながらスリープ状態に入り、高速に復帰できます。電源が切れると作業内容は失われます。
  • hibernate (ハイバネーション、休止状態): メモリの内容をディスクに保存し、電源を切ります。作業内容は保持されますが、復帰に時間がかかります。
  • hybrid-sleep (ハイブリッドスリープ): suspendhibernate の組み合わせ。電源が供給されていれば suspend と同じように素早く復帰できますが、電源が切れた場合は hibernate のようにディスクから復元されます。

デフォルトターゲット

デフォルトターゲット (Default Target) とは、systemd がシステム起動時に使用するデフォルトの起動ターゲット (ユニット)のことです。

デフォルトターゲットを確認する

現在のターゲットを確認するには、以下のコマンドを使用します:

systemctl get-default

デフォルトターゲットを設定する

デフォルトのターゲットを変更するには、以下のコマンドを使用します:

sudo systemctl set-default <ターゲット名>

例えば、GUI が不要でマルチユーザーモードに設定する場合:

sudo systemctl set-default multi-user.target

これにより、次回のシステム起動時にマルチユーザーモードで起動します。

ターゲットを一時的に変更する

一時的にターゲットを変更する場合、以下のコマンドを使用します:

sudo systemctl isolate <ターゲット名>

例えば、シングルユーザーモードに切り替える場合:

sudo systemctl isolate rescue.target

このコマンドは即座にターゲットが切り替わりますが、次回の起動時には元のデフォルトターゲットで起動します。

コメント

コメントする

目次