fbpx

起動しなくなった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)を想定しています。

010-rescue

サーバを再起動してRescue Kernelを起動してよいかの確認が行われます。なお、Rescue Kernelは本来のOSのパブリックIPアドレスに対してrootユーザでの接続に限られるため、注意が必要です。ファイアウォールの設定やパスワードを確認しておきましょう。

020-are-you-sure

ダイアログのYesボタンを押すとRescue Kernelの起動が始まります。

030-initiated

Device Listで進捗を確認できます。およそ10分程度でRescue Kernelは起動します。

040-clock

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もあります。万が一の場合に備えて、どのようなものか確認しておくとよいでしょう。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA