起動しなくなったRHELをRescue OSで復旧する #softlayer
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
SoftLayerにはRescue Kernelという復旧用のOSがあります。本来のOSが起動しなくなるなどしたトラブルが起きたらRescue Kernelを起動して復旧するといった用途があります。ベアメタルサーバと仮想サーバのどちらでも利用でき、SoftLayerポータルから簡単に起動できます。
Rescue Kernelの起動
Rescue Kernelを起動したいサーバのDevice Detailsを開き、右上のActionsメニューボタンからRescueを選択します。今回はRed Hat Enterprise Linux 6 (x86_64)を想定しています。
サーバを再起動してRescue Kernelを起動してよいかの確認が行われます。なお、Rescue Kernelは本来のOSのパブリックIPアドレスに対してrootユーザでの接続に限られるため、注意が必要です。ファイアウォールの設定やパスワードを確認しておきましょう。
ダイアログのYesボタンを押すとRescue Kernelの起動が始まります。
Device Listで進捗を確認できます。およそ10分程度でRescue Kernelは起動します。
Rescue Kernel起動時には次のようなメールも届きます。
From: noreply@softlayer.com To: xxxxx@xxxxx Reply-To: noreply@softlayer.com Subject: Rescue Kernel loaded for server db2-1-1.bkrs.example.jp [xxx.xxx.xxx.xxx] The rescue kernel has been loaded for server db2-1-1.bkrs.example.jp [xxx.xxx.xxx.xxx]. Please refer to the tutorial in the portal for login instructions. SoftLayer Support
Rescue OSへのログイン
Rescue OSへは本来のOSのパブリックIPアドレスに対してrootユーザのパスワードでログインします。繰り返しになりますが、ファイアウォール設定やパスワードを確認しておきましょう。
% ssh root@xxx.xxx.xxx.xxx
root@xxx.xxx.xxx.xxx's password:
Last login: Wed Mar 11 07:44:27 2015
NetworkLayer Linux Rescue Version 2.0
Text Editors: ed, joe, nano, vim
Command line web browsers: elinks, links, wget
Raid Utilities:
3ware: tw_cli (in path)
Adaptec: arcconf (/usr/StorMan)
LSI: MegaCli (/opt/MegaRAID)
Recue Layer is CentOS based and yum functions.
Additional packages can be added via yum as long
as enough tmpfs space is available.
[linuxrescue -- **RESCUE**]#
ログインすると、簡単な仕様が表示されます。各種テキストエディタ、テキストブラウザ、RAID管理ツールが最初から利用できます。
Rescue OSの仕様
Rescue OSは2015年3月現在、CentOS 5.8 (x86_64)ベースとなっています。
[linuxrescue -- **RESCUE**]# cat /etc/redhat-release
CentOS release 5.8 (Final)
[linuxrescue -- **RESCUE**]# uname -a
Linux linuxrescue 2.6.18-371.3.1.el5 #1 SMP Mon Nov 11 03:23:58 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
[linuxrescue -- **RESCUE**]#
本来のOSが例えばUbuntuでもRescue OSはCentOSベースです。このため、一部Linux OSの復旧に対して不都合のある場合があります(後述)。
Rescue OSはyumコマンドを用いてパッケージを追加することができます。オンメモリで動作しているので本来のOSに影響はありません。ただしオンメモリなので、再起動すると追加したパッケージは消えてしまいますし、領域に上限もあります。
curlパッケージを追加し、Chef Clientのインストールも可能です。
[linuxrescue -- **RESCUE**]# yum install curl -y
:
:
:
Installed:
curl.i386 0:7.15.5-17.el5_9 curl.x86_64 0:7.15.5-17.el5_9
Dependency Installed:
libidn.i386 0:0.6.5-1.1
Complete!
[linuxrescue -- **RESCUE**]#
[linuxrescue -- **RESCUE**]# curl -L https://www.chef.io/chef/install.sh | bash
:
:
:
警告: /tmp/install.sh.21326/chef-12.1.1-1.el5.x86_64.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 83ef826a
準備中... ########################################### [100%]
1:chef ########################################### [100%]
Thank you for installing Chef!
[linuxrescue -- **RESCUE**]#
python-simplejsonパッケージを追加して、Ansibleの対象ホストとすることもできます。
[linuxrescue -- **RESCUE**]# yum install python-simplejson -y
:
:
:
Installed:
python-simplejson.x86_64 0:2.0.9-8.el5
Complete!
[linuxrescue -- **RESCUE**]#
GNU GRUBの再インストール
ここでは本来のOSでGNU GRUBのインストールがうまくいっておらず、起動しなくなった場合を例に復旧を考えてみます。
GRUB loading stage 1.5 GRUB loading, please wait... GRUB Error 2
のようになって起動しなくなってしまったとしましょう。
Rescue OSを起動し、マウントポイントを作成します。
[linuxrescue -- **RESCUE**]# mkdir /mnt/sysimage
[linuxrescue -- **RESCUE**]#
/ディレクトリのパーティション(/dev/sda2)と/bootディレクトリのパーティション(/dev/sda1)をマウントします。
[linuxrescue -- **RESCUE**]# mount /dev/sda2 /mnt/sysimage
[linuxrescue -- **RESCUE**]#
[linuxrescue -- **RESCUE**]# mount /dev/sda1 /mnt/sysimage/boot
[linuxrescue -- **RESCUE**]#
デバイスや仮想ファイルシステムを共有します。
[linuxrescue -- **RESCUE**]# mount --bind /dev /mnt/sysimage/dev
[linuxrescue -- **RESCUE**]# mount --bind /dev/pts /mnt/sysimage/dev/pts
[linuxrescue -- **RESCUE**]# mount --bind /proc /mnt/sysimage/proc
[linuxrescue -- **RESCUE**]# mount --bind /sys /mnt/sysimage/sys
[linuxrescue -- **RESCUE**]#
chrootコマンドで、ルートディレクトリを本来のOSのルートディレクトリに変更します。
[linuxrescue -- **RESCUE**]# chroot /mnt/sysimage
[linuxrescue -- **RESCUE**]#
注意: 本来のOSがUbuntu 12.04 LTSの場合、chrootが行えないためこの復旧方法を取ることができません。本稿では詳細を省きますが、grub-installコマンドの--root-directoryオプションが参考になるでしょう。
grub-installコマンドで、MBRに書き込みを行います。
[linuxrescue -- **RESCUE**]# grub-install /dev/sda
Could not find device for /boot
[linuxrescue -- **RESCUE**]#
失敗してしまいました。これは/etc/mtabファイルが現状のマウント情報を反映していないことが原因です。
[linuxrescue -- **RESCUE**]# cat /etc/mtab
/dev/sda2 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
[linuxrescue -- **RESCUE**]#
/etc/mtabファイルを削除し、/proc/mountsファイルをコピーしてマウント情報を更新します。
[linuxrescue -- **RESCUE**]# ls -l /etc/mtab
-rw-r--r-- 1 root root 71 2月 26 02:49 2015 /etc/mtab
[linuxrescue -- **RESCUE**]# rm /etc/mtab
[linuxrescue -- **RESCUE**]# cp /proc/mounts /etc/mtab
[linuxrescue -- **RESCUE**]#
再度grub-installコマンドを実行します。
[linuxrescue -- **RESCUE**]# grub-install /dev/sda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
[linuxrescue -- **RESCUE**]#
成功しました。
chroot環境から抜けます。
[linuxrescue -- **RESCUE**]# exit
[linuxrescue -- **RESCUE**]#
仮想ファイルシステム、本来のOSのパーティションをアンマウントします。
[linuxrescue -- **RESCUE**]# umount /mnt/sysimage/sys
[linuxrescue -- **RESCUE**]# umount /mnt/sysimage/proc
[linuxrescue -- **RESCUE**]# umount /mnt/sysimage/dev/pts
[linuxrescue -- **RESCUE**]# umount /mnt/sysimage/dev
[linuxrescue -- **RESCUE**]# umount /mnt/sysimage/boot
[linuxrescue -- **RESCUE**]# umount /mnt/sysimage
[linuxrescue -- **RESCUE**]#
再起動を行います。これはSoftLayerポータルから行ってもかまいません。
[linuxrescue -- **RESCUE**]# sync
[linuxrescue -- **RESCUE**]# sync
[linuxrescue -- **RESCUE**]# sync
[linuxrescue -- **RESCUE**]# reboot
Broadcast message from root (pts/0) (Tue Mar 17 01:46:37 2015):
The system is going down for reboot NOW!
本来のOSが起動してきたら、ログインしてみます。
% ssh root@158.85.186.101
root@158.85.186.101's password:
Last login: Mon Mar 16 20:51:10 2015 from aaa.aaa.aaa.aaa
[root@db2-1-1 ~]#
起動に成功しました。
まとめ
Rescue OSを用いることで、まったくの遠隔操作でありながら、起動しなくなったOSの復旧を行うことができます。本稿では紹介のみとなりますがRescue Kernel for Windowsもあります。万が一の場合に備えて、どのようなものか確認しておくとよいでしょう。