systemdによるCentOS 7の管理
この連載が、書籍『CentOS 7 実践ガイド』になりました!
IT技術者のための現場ノウハウ CentOS 7 実践ガイド
CentOS 7を取り巻く市場動向、サーバーシステムの選定、システム設計、構築手順などCentOS 7は、従来のCentOS 6.xの管理手法と異なる点が多々存在します。今回は、CentOS 7の管理者が最低限知っておくべき管理手法についてお伝えします。
CentOS 7のシステム管理基礎
CentOS 6系は、主にUNIX System V系のinitによるアーキテクチャを基にしたLinux OSであるのに対し、CentOS 7では、systemdを主体としたものになっています。従来のCentOS 5で採用されていたSysVinitやCentOS 6で採用されていたUpstartは様々なサービスの起動をシェルスクリプトで管理していました。しかし、これらCentOS 5やCentOS 6で採用されている起動スクリプト等の実行は並列に処理する概念が取り入れられていないため、OSの起動時間の増大を招いていました。CentOS 7で採用されているsystemdは、従来ではシェルスクリプト等を駆使した各種サービスの起動処理を一新し、起動に関連する一連の処理を高速に行う仕組みが取り入れられています。
ランレベルの廃止
CentOS 6系とCentOS 7系で大きく異なるのは、ランレベルの考え方です。CentOS 7では、ランレベルという概念が廃止され、「ターゲット」と呼ばれる概念が導入されています。CentOS 6系で利用されていたランレベルを管理する/etc/inittabファイルは、CentOS 7においてもはや利用されません。以下では、CentOS 6系でのランレベル3(CLI画面での運用)、ランレベル5(GUI画面での運用)、ランレベル1(シングルユーザーモード)に相当するCentOS 7での実際の運用管理を例示します。CentOS 6系では、/etc/inittabファイルの記述によってOS起動時のデフォルトのランレベルを変更し、runlevelコマンドによって現在稼働中のランレベルを表示していました。一方、CentOS 7においてデフォルトで設定されている状況を確認するには、systemctlコマンドを使います。
# systemctl get-default multi-user.target
この状態は、CentOS 6系でのランレベル3に相当する状態です。OS起動時に自動的にGUIのログイン画面が表示される設定にする前に、利用可能なターゲットを確認してみます。
# systemctl list-units --type=target --all --no-pager UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System cryptsetup.target loaded active active Encrypted Volumes emergency.target loaded inactive dead Emergency Mode final.target loaded inactive dead Final Step getty.target loaded active active Login Prompts graphical.target loaded inactive dead Graphical Interface local-fs-pre.target loaded active active Local File Systems (Pre) local-fs.target loaded active active Local File Systems multi-user.target loaded active active Multi-User System network-online.target loaded inactive dead Network is Online network.target loaded active active Network nfs.target loaded active active Network File System Server nss-lookup.target loaded inactive dead Host and Network Name Lookups nss-user-lookup.target loaded inactive dead User and Group Name Lookups paths.target loaded active active Paths remote-fs-pre.target loaded inactive dead Remote File Systems (Pre) remote-fs.target loaded active active Remote File Systems rescue.target loaded inactive dead Rescue Mode shutdown.target loaded inactive dead Shutdown slices.target loaded active active Slices sockets.target loaded active active Sockets sound.target loaded active active Sound Card swap.target loaded active active Swap sysinit.target loaded active active System Initialization syslog.target not-found inactive dead syslog.target time-sync.target loaded inactive dead System Time Synchronized timers.target loaded active active Timers umount.target loaded inactive dead Unmount All Filesystems LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 28 loaded units listed. To show all installed unit files use 'systemctl list-unit-files'.
上記に表示されている「graphical.target」が、CentOS 6系のランレベル5に相当します。それでは、OS起動時に自動的にGUIログイン画面が表示されるグラフィカルターゲットに設定します。
# systemctl set-default graphical.target rm '/etc/systemd/system/default.target' ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target' # systemctl get-default graphical.target
上記から、グラフィカルターゲットへの移行は、シンボリックリンクの貼り替えであることがわかります。OS起動時に自動的にGUIのログイン画面が表示されるか確認するため、CentOS 7を再起動します。
# reboot
CentOS 7で定義されている各種ターゲットが、従来のどのランレベルに相当しているかの対応関係を確認することができます。
# ls -l /lib/systemd/system/runlevel*target lrwxrwxrwx. 1 root root 15 Sep 1 23:28 /lib/systemd/system/runlevel0.target -> poweroff.target lrwxrwxrwx. 1 root root 13 Sep 1 23:28 /lib/systemd/system/runlevel1.target -> rescue.target lrwxrwxrwx. 1 root root 17 Sep 1 23:28 /lib/systemd/system/runlevel2.target -> multi-user.target lrwxrwxrwx. 1 root root 17 Sep 1 23:28 /lib/systemd/system/runlevel3.target -> multi-user.target lrwxrwxrwx. 1 root root 17 Sep 1 23:28 /lib/systemd/system/runlevel4.target -> multi-user.target lrwxrwxrwx. 1 root root 16 Sep 1 23:28 /lib/systemd/system/runlevel5.target -> graphical.target lrwxrwxrwx. 1 root root 13 Sep 1 23:28 /lib/systemd/system/runlevel6.target -> reboot.target
上記より、グラフィカルターゲットは、従来のランレベル5に相当することがわかります。
OS再起動無しでグラフィカルターゲットとマルチユーザーターゲットを切り替える
CentOS 6系では、telinitコマンドを使ってランレベルの変更を行っていました。CentOS 7では、systemctlコマンドで以下のようにして、X Windowが起動している状態とX Windowが起動せずにマルチユーザー環境の状態(CentOS 6系のランレベル5やランレベル3)を切り替えることができます。
X Windowが起動していないマルチユーザーモードの状態への変更は、以下のようにします。
# systemctl isolate multi-user.target # runlevel 5 3
上記の操作は、CentOS 6系のtelinit 3に相当する操作です。
CentOS 6系のランレベル5に相当するX WindowによるGUIのログイン画面の状態に変更するには、以下のようになります。
# systemctl isolate graphical.target # runlevel 3 5
上記の操作は、CentOS 6系のtelinit 5に相当する操作であるため、X Windowを利用したGUIログイン画面が起動しますが、OS起動時に自動的に設定されるデフォルトのターゲットが変更されたわけではありません。デフォルトのターゲットを確認してみます。
# systemctl get-default multi-user.target
上記のように、現在稼働中のOSがグラフィカルターゲットであっても、OS起動時に自動的に設定されるデフォルトのターゲットとは異なりますので、現在のターゲットの状況と、OS起動時に自動的に設定されるデフォルトのターゲットの両方を確認するようにして下さい。
CentOS 7におけるシングルユーザーモードと緊急モード
システムに不具合やシステムの継続稼働が困難になった場合に、シングルユーザーモードや緊急モードに移行する必要がでてきます。CentOS 6系では、telinit 1などによりランレベル1になりシングルユーザーモードになっていましたが、CentOS 7では、systemdを使ってレスキューターゲットやエマージェンシーターゲットを指定することで状態を切り替えることができます。以下では、シングルユーザーモードと緊急モードへの切り替えとその場合のメンテナンスの基本を説明します。シングルユーザーモードになると、ネットワーク通信機能が切断されてしまいますので、telnet等の仮想端末で遠隔から操作している場合には、ローカルマシンでの作業に切り替える必要があります。または、ハードウェアベンダーが提供するサーバーに搭載された遠隔管理用のチップの仮想端末等を利用し、OSのネットワーク通信機能を利用しなくても遠隔管理できる仕組みを整えておく等の事前の対処が必要ですので、十分注意して下さい。シングルユーザーモードになるためには、コマンドラインから以下のように入力します。
# systemctl isolate rescue.target
下図は、サーバーの遠隔管理チップの仮想端末ウィンドウ上で、リモートにあるCentOS 7サーバーのシングルユーザーモードの画面を表示しています。シングルユーザーモードでは、rootアカウントのパスワードを入力します。
以下に、CentOS6系のSysVinitのランレベルとCentOS 7のsystemdターゲットの対応表を示します。