fbpx

CL LAB

HOME > CL LAB > softlayer > 起動しなくなったRHELをRescue OSで復旧する #softlayer

起動しなくなったRHELをRescue OSで復旧する #softlayer

 ★ 13

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

CL LAB Mail Magazine

CL LABの情報を逃さずチェックしよう!

メールアドレスを登録すると記事が投稿されるとメールで通知します。

メールアドレス: 登録

※登録後メールに記載しているリンクをクリックして認証してください。

Related post