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コマンドを使います。
この状態は、CentOS 6系でのランレベル3に相当する状態です。OS起動時に自動的にGUIのログイン画面が表示される設定にする前に、利用可能なターゲットを確認してみます。
01 | # systemctl list-units --type=target --all --no-pager |
02 | UNIT LOAD ACTIVE SUB DESCRIPTION |
03 | basic.target loaded active active Basic System |
04 | cryptsetup.target loaded active active Encrypted Volumes |
05 | emergency.target loaded inactive dead Emergency Mode |
06 | final.target loaded inactive dead Final Step |
07 | getty.target loaded active active Login Prompts |
08 | graphical.target loaded inactive dead Graphical Interface |
09 | local-fs-pre.target loaded active active Local File Systems (Pre) |
10 | local-fs.target loaded active active Local File Systems |
11 | multi-user.target loaded active active Multi-User System |
12 | network-online.target loaded inactive dead Network is Online |
13 | network.target loaded active active Network |
14 | nfs.target loaded active active Network File System Server |
15 | nss-lookup.target loaded inactive dead Host and Network Name Lookups |
16 | nss-user-lookup.target loaded inactive dead User and Group Name Lookups |
17 | paths.target loaded active active Paths |
18 | remote-fs-pre.target loaded inactive dead Remote File Systems (Pre) |
19 | remote-fs.target loaded active active Remote File Systems |
20 | rescue.target loaded inactive dead Rescue Mode |
21 | shutdown.target loaded inactive dead Shutdown |
22 | slices.target loaded active active Slices |
23 | sockets.target loaded active active Sockets |
24 | sound.target loaded active active Sound Card |
25 | swap.target loaded active active Swap |
26 | sysinit.target loaded active active System Initialization |
27 | syslog.target not-found inactive dead syslog.target |
28 | time-sync.target loaded inactive dead System Time Synchronized |
29 | timers.target loaded active active Timers |
30 | umount.target loaded inactive dead Unmount All Filesystems |
32 | LOAD = Reflects whether the unit definition was properly loaded. |
33 | ACTIVE = The high-level unit activation state, i.e. generalization of SUB. |
34 | SUB = The low-level unit activation state, values depend on unit type. |
36 | 28 loaded units listed. |
37 | To show all installed unit files use 'systemctl list-unit-files'. |
上記に表示されている「graphical.target」が、CentOS 6系のランレベル5に相当します。それでは、OS起動時に自動的にGUIログイン画面が表示されるグラフィカルターゲットに設定します。
1 | # systemctl set-default graphical.target |
2 | rm '/etc/systemd/system/default.target' |
3 | ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target' |
上記から、グラフィカルターゲットへの移行は、シンボリックリンクの貼り替えであることがわかります。OS起動時に自動的にGUIのログイン画面が表示されるか確認するため、CentOS 7を再起動します。
CentOS 7で定義されている各種ターゲットが、従来のどのランレベルに相当しているかの対応関係を確認することができます。
1 | # ls -l /lib/systemd/system/runlevel*target |
2 | lrwxrwxrwx. 1 root root 15 Sep 1 23:28 /lib/systemd/system/runlevel0.target -> poweroff.target |
3 | lrwxrwxrwx. 1 root root 13 Sep 1 23:28 /lib/systemd/system/runlevel1.target -> rescue.target |
4 | lrwxrwxrwx. 1 root root 17 Sep 1 23:28 /lib/systemd/system/runlevel2.target -> multi-user.target |
5 | lrwxrwxrwx. 1 root root 17 Sep 1 23:28 /lib/systemd/system/runlevel3.target -> multi-user.target |
6 | lrwxrwxrwx. 1 root root 17 Sep 1 23:28 /lib/systemd/system/runlevel4.target -> multi-user.target |
7 | lrwxrwxrwx. 1 root root 16 Sep 1 23:28 /lib/systemd/system/runlevel5.target -> graphical.target |
8 | 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が起動していないマルチユーザーモードの状態への変更は、以下のようにします。
1 | # systemctl isolate multi-user.target |
上記の操作は、CentOS 6系のtelinit 3に相当する操作です。
CentOS 6系のランレベル5に相当するX WindowによるGUIのログイン画面の状態に変更するには、以下のようになります。
1 | # systemctl isolate graphical.target |
上記の操作は、CentOS 6系のtelinit 5に相当する操作であるため、X Windowを利用したGUIログイン画面が起動しますが、OS起動時に自動的に設定されるデフォルトのターゲットが変更されたわけではありません。デフォルトのターゲットを確認してみます。
上記のように、現在稼働中のOSがグラフィカルターゲットであっても、OS起動時に自動的に設定されるデフォルトのターゲットとは異なりますので、現在のターゲットの状況と、OS起動時に自動的に設定されるデフォルトのターゲットの両方を確認するようにして下さい。
CentOS 7におけるシングルユーザーモードと緊急モード
システムに不具合やシステムの継続稼働が困難になった場合に、シングルユーザーモードや緊急モードに移行する必要がでてきます。CentOS 6系では、telinit 1などによりランレベル1になりシングルユーザーモードになっていましたが、CentOS 7では、systemdを使ってレスキューターゲットやエマージェンシーターゲットを指定することで状態を切り替えることができます。以下では、シングルユーザーモードと緊急モードへの切り替えとその場合のメンテナンスの基本を説明します。シングルユーザーモードになると、ネットワーク通信機能が切断されてしまいますので、telnet等の仮想端末で遠隔から操作している場合には、ローカルマシンでの作業に切り替える必要があります。または、ハードウェアベンダーが提供するサーバーに搭載された遠隔管理用のチップの仮想端末等を利用し、OSのネットワーク通信機能を利用しなくても遠隔管理できる仕組みを整えておく等の事前の対処が必要ですので、十分注意して下さい。シングルユーザーモードになるためには、コマンドラインから以下のように入力します。
1 | # systemctl isolate rescue.target |
下図は、サーバーの遠隔管理チップの仮想端末ウィンドウ上で、リモートにあるCentOS 7サーバーのシングルユーザーモードの画面を表示しています。シングルユーザーモードでは、rootアカウントのパスワードを入力します。
図1:CentOS 7のレスキューモード(クリックで拡大)
以下に、CentOS6系のSysVinitのランレベルとCentOS 7のsystemdターゲットの対応表を示します。
図2:CentOS 6系のランレベルの概念とそれに対応するCentOS 7のsystemdのコマンド(クリックで拡大)