1. はじめに
SELinuxの設定を「disabled」とするべきところを「disaled」と設定してしまった事により、Linuxサーバが以下のメッセージを出力しサーバが起動途中で停止してしまう状態となってしまった。復旧の為に以下の手順を実施しました。
[!!!!!!] Failed to load SELinux policy, freezing.
2. 実施した復旧方法
今回の失敗はGCPのVMインスタンスで起こしてしまった為、以下の手順で復旧させる事にしました。
オンプレミス環境のサーバであればSSD(HDD)を取り外し別のPC等にマウントの上復旧対応したり、USBブートOSから起動し復旧対応する等、さらに手間がかかる。
3. GCP VMインスタンスでの実施手順
3-1. 別のVMインスタンスでのディスクマウント
他のVMインスタンスに起動しなくなったVMインスタンスが利用する起動ディスクをマウントし、SELinuxの設定ファイルを修正する事で復旧させる。具体的には以下の手順を実施する。
- 新たなVMインスタンス1を作成する。(instance-1)
- 復旧させたいVMインスタンス(R-instance)を停止する。
- 復旧させたいVMインスタンス(R-instance)の名前を選択し、インスタンスの詳細画面を開き、編集ボタンをクリックする。
この時に必ず、復旧させたいVMインスタンスの設定を控えておく - 「インスタンスを削除する際にブートディスクを削除する」のチェックを外し「保存」する。
- 復旧させたいVMインスタンス(R-instance)を削除する。削除は右上のボタンから実施できる。
この際、ブートディスク の削除について勧められるが、チェックをつけずにVMインスタンスのみ削除する。 - VMインスタンス1を停止する。
- VMインスタンス1の名前を選択し、インスタンスの詳細画面を開き、編集ボタンをクリックする。
- [追加ディスク]の箇所に「➕項目を追加」があるので、クリックする。
- 名前から復旧させたいVMインスタンスで利用しているディスク(R-instance)を選択する。
3-2. SELinux設定の修正
- VMインスタンス1を起動する。
- VMインスタンス1にログインしたら、以下のコマンドを実施しSELinuxのコンフィグを編集する。
$ sudo mount -o defaults /dev/sdb1 /mnt $ sudo vi /mnt/etc/selinux/config
SELinuxの設定を正しく修正する。今回はSELinuxを無効にする。
SELINUX=disabled
3-3. ディスクマウントの再設定
- 項番[6-8]を参考に、VMインスタンス1から復旧させたいVMインスタンスのディスクを取り外す。取り外すには、追加ディスクの右側にある「X」ボタンをクリックし、「保存」する。
- 項番[3]で控えていた復旧させたいVMインスタンスの設定を参考に新たなインスタンスを作成する。この際、ブートディスク の項目で「変更」ボタンをクリックし、「既存のディスク」から「復旧させたいVMインスタンス(R-instance)のディスク」を選択する。
- 最後に「作成」ボタンからVMインスタンスの作成を完了する。
上記の手順を実施すれば、VMインスタンスを復旧させることができた。
ただし新たにVMインスタンスを作成している為、元々のVMインスタンス名と新たなVMインスタンス名が同じでない場合はネットワークやファイアウォールの設定などに影響が出ると考えれらるので注意が必要である。