概要
この記事では、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 ではhalt
はpoweroff
と同じ動作をすることが多く、電源が切れる場合もあります。 - poweroff (電源オフ): システムのプロセスを終了し、電源を切ります。
- shutdown (シャットダウン): システムのプロセスを安全に終了し、指定した時間後にシステムを停止または再起動します。
- reboot (再起動): システムをシャットダウンした後、すぐに再起動します。
- suspend (サスペンド、スリープ): メモリを保持しながらスリープ状態に入り、高速に復帰できます。電源が切れると作業内容は失われます。
- hibernate (ハイバネーション、休止状態): メモリの内容をディスクに保存し、電源を切ります。作業内容は保持されますが、復帰に時間がかかります。
- hybrid-sleep (ハイブリッドスリープ):
suspend
とhibernate
の組み合わせ。電源が供給されていれば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
このコマンドは即座にターゲットが切り替わりますが、次回の起動時には元のデフォルトターゲットで起動します。
コメント