systemdによるCentOS 7の管理

2014年12月11日(木)
古賀 政純

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アカウントのパスワードを入力します。

図1:CentOS 7のレスキューモード(クリックで拡大)

以下に、CentOS6系のSysVinitのランレベルとCentOS 7のsystemdターゲットの対応表を示します。

図2:CentOS 6系のランレベルの概念とそれに対応するCentOS 7のsystemdのコマンド(クリックで拡大)

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています