起動できないEC2インスタンス内部の問題を調査する方法

テクニカルサポートノート。サービス名:EC2,EBS

困っていた内容

EC2インスタンスが起動できなくなりました。インスタンスのステータスチェックを確認したところ、「インスタンスステータスチェックの失敗」の状況であることがわかりました。
インスタンス内部に問題がある可能性があるため、OSやファイルシステムに問題がないかを確認する必要がありますが、EC2インスタンスが起動できないためログインができません。
起動不可となったEC2インスタンスの内部を調査するための方法はありますか?

どう対応すればいいの?

何らかの問題によりインスタンスが起動できない/ログインができない場合、当該EC2インスタンスにアタッチされているEBSを別のEC2インスタンスへアタッチすることで、調査が可能となる場合があります。

実施手順

この手順は、下記の前提において進めます。

  • インスタンスのステータスチェックに失敗したインスタンスがある
  • 上記のインスタンスとは別に、既に起動済みでログイン可能な調査用インスタンスがある
  • OSはAmazon Linux 2である ※それ以外のOSの場合は、コマンドを適宜読み替える必要があります。

ステータスチェックに失敗しているインスタンスを停止させる
ボリュームをデタッチするために、当該インスタンスを停止させる必要があります。

EC2インスタンスのステータスを確認すると、[1/2のステータスチェックに合格しました]のメッセージと警告マークが表示されています。

マネジメントコンソールの画面から、[アクション]-[インスタンスの状態]-[停止]を行います。

EBSをデタッチする
インスタンスの状態が[Stopped]になったことが確認できたら、EBSをデタッチします。
インスタンスの[説明]より、ルートデバイスのEBS IDを確認します。
[ルートデバイス]のパスをクリックすると、EBS IDが確認できます。
このIDは調査用インスタンスにアタッチする際に必要になるため、メモしておきましょう。

EBS IDをクリックすると、[ボリューム]の画面に移行します。
表示されているボリュームを選択した状態で、[アクション]-[ボリュームのデタッチ]を実行します。
状態が[in-use]から[available]になり、[アタッチ済み情報]にインスタンスIDが表示されなくなります。

起動済みの別のインスタンスにEBSをアタッチする
あらかじめ、調査用のEC2インスタンスのインスタンスIDをメモしておきます。
起動されている調査用のEC2インスタンスに、先ほどデタッチしたEBSをアタッチします。
[アクション]-[ボリュームのアタッチ]を実行します。

[インスタンス]欄では、メモしておいた調査用のEC2インスタンスIDを選択します。
[デバイス]欄は、今回はデフォルトのままアタッチを行います。
[アタッチ]を実行します。

状態が[available]から[in-use]に切り替わったことを確認します。

調査用インスタンスにボリュームをマウントする
OSの操作でボリュームをマウントし、アタッチしたEBSを利用可能にします。
先ほど設定したデバイスへのリンクを確認します。

$ll /dev/ | grep sdf
lrwxrwxrwx 1 root root           4  x月 xx 14:49 sdf -> xvdf
lrwxrwxrwx 1 root root           5  x月 xx 14:49 sdf1 -> xvdf1


ディスクのパーティションを確認します。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   8G  0 disk 
└─xvdf1 202:81   0   8G  0 part 


「xvdf1」がdisk「xvdf」のパーティションであることがわかりました。
マウントポイントを作成し、ボリュームをマウントします。

$ sudo mkdir /mnt/ebs
$ sudo mount /dev/xvdf1 /mnt/ebs


エラーでマウントが実行できない時
UUIDの重複によるエラーで、マウントを行うコマンドが実行できない時場合があります。

$ sudo mount /dev/xvdf1 /mnt/ebs
mount: /mnt/ebs: wrong fs type, bad option, bad superblock on /dev/xvdf1, missing codepage or helper program, or other error.

この場合は、UUIDの重複を無視することでマウントが可能になります。
このコマンドは、トラブルシュートのために一時的にEBSをマウントする際の措置としての利用を推奨します。

$ sudo mount -t xfs -o nouuid /dev/xvdf1 /mnt/ebs

参考情報

インスタンスのステータスチェック - Amazon Elastic Compute Cloud

ログインできないec2インスタンスを調査する | Developers.IO

Amazon EBSマウント時の「wrong fs type, bad option, bad superblock on…」というエラーを解決する方法を教えてください | Developers.IO

テクニカルサポートノートとは?

クラスメソッドのカルチャー(CLP) の「情報発信を通じて、全ての人々の創造活動に貢献し続ける」という考えから、クラスメソッド メンバーズをご利用のお客様よりいただいたお問い合わせより、他の AWS ユーザーにとっても 有益な情報を一般的な TIPS としてご紹介しています。