server-memo.net

【CentOS7】シングルユーザモード(rescue.target)への移行方法

   

CentOS7でシングルユーザモードに移行する方法です。

CentOS7での変更点

CentOS6までは「init 1」とかでシングルユーザモードに移行できましたが、CentOS7からは移行方法が変更になっています。

これはCentOS6まではOSがSystem V系だったのでランレベルという形で動作モードを管理していましたが、CentOS7からはSystemdでの管理がメインとなりランレベルでの管理からターゲットという管理方法に変更となっています。

ランレベルとターゲットの対応表

ランレベルとの対応は下記の通りとなり、CentOS7ではシングルユーザモードに相当するターゲットは「rescue.target」(またはrunlevel1.target)ということになります。

動作内容 ランレベル ターゲット
システム停止 0 poweroff.target
runlevel0.target
シングルユーザモード 1 rescue.target
runlevel1.target
マルチユーザモード
(ネットワークOFF)
2 multi-user.target
runlevel3.target
マルチユーザモード
(ネットワークON)
3 multi-user.target
runlevel3.target
未使用 4 multi-user.target
runlevel4.target
GUIログイン 5 graphical.target
runlevel5.target
再起動 6 reboot.target
runlevel6.target
緊急モード 対応無し emergency.target

ランレベル2,3,4について

CentOS7ではランレベル2、3、4に相当するターゲットは「multi-user.target」となり区別がなくなっています。

「runleve2.target」「runleve3.target」「runleve4.target」については「multi-user.target」へのシンボリックリンクとなっています。

# cd /usr/lib/systemd/system
# ls -l runlevel{2..4}.target
lrwxrwxrwx 1 root root 17  5月  2 04:39 runlevel2.target -> multi-user.target
lrwxrwxrwx 1 root root 17  5月  2 04:39 runlevel3.target -> multi-user.target
lrwxrwxrwx 1 root root 17  5月  2 04:39 runlevel4.target -> multi-user.target

「emergency.target」について

CentOS7から追加になった「emergency.target」は「rescue.target」でもシステムにログインできない場合などに使用するためのターゲットです。

作業前の注意点

シングルユーザモードになるとネットワークが切断されてしまうので、作業を行う場合は直接サーバにアクセスできるコンソール等から作業してください。

遠隔地のサーバをssh等でリモートから接続している場合は、シングルモードにしたとたんサーバにアクセス出来なくなってしまいますので、十分に注意してください。

シングルユーザモードへの移行方法

CentOS7では「systemctl isolate」コマンドでターゲットの変更を行います。

# systemctl isolate ターゲット

CentOS6までのシングルユーザモードに相当するターゲットは「rescue.target」となるため、下記コマンドを実行することでモードを変更することが出来ます。

# systemctl isolate rescue.target

コマンドを実行した後には「root」ユーザのパスワードを入力する必要があります。

initコマンドも使えます

「systemctl」コマンドを使用してターゲット変更する以外にも、従来の「init」コマンドを使用してもターゲットを変更することが出来ます。

この「init」コマンドは「/lib/systemd/systemd」へのシンボリックリンクとなっていて、実際には「systemd」コマンドを実行する形となっています。

# ls -l /sbin/init
lrwxrwxrwx 1 root root 22  5月  2 04:39 /sbin/init -> ../lib/systemd/systemd

「init」コマンドで「rescue.target」に移行する場合は従来通り「init 1」で変更することが出来ます。

# init 1

現在のターゲット確認方法

現在のsysytemdターゲットは下記コマンドで確認することが出来ます。

# systemctl list-units --type target

シングルユーザモード(resucue.target)の場合はこのように表示されます。

ちなみにマルチユーザモード(multi-user.target)の場合はこんな感じになります。

runlevelコマンドも使えます

従来の「runlevel」コマンドでも現在の状態を確認することが出来ます。

左から「変更前」「変更後」の状態がターゲットに相当するランレベルで表示されます。

今回の場合はランレベル「3」(multi-user.target)から「1」(rescue.target)に変更されていることが確認できます。

ちなみに、CentOS7の「runlevel」コマンドは、実際には「/bin/systemctl」へのリンボリックリンクとなっています。

# ls -l /sbin/runlevel
lrwxrwxrwx 1 root root 16  5月  2 04:39 /sbin/runlevel -> ../bin/systemctl

 - サーバ運用