AWSのLinuxインスタンスにログインできなくなった時の対処法

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

起動ディスクのボリュームを別のインスタンスに繋いで編集後に戻す方法を解説します。
分かる人は、この一文だけでOKと思いますが、幾つか引っかかったので自分用の備忘録もかねてメモします。
(もっと良い方法があれば教えてください m(_ _)m )

検索するとAmazonのサイトでも同じ方法を紹介していました。
Amazon EC2 インスタンスに関するよくある質問

状況

Amazon Web Service上に作成したLinuxインスタンスで、インスタンス自体は起動しているが外部から接続できない。
(インスタンスの起動に失敗する場合にも対応可能)

対応

1. トラブルを起こしたインスタンスを停止

2. インスタンスのルートボリュームをDetach

作業前にボリュームの「Name」タグに適切な名前を付けておくと分かり易いです。

3. レスキュー用に新しいインスタンスを作成

トラブルを起こしたインスタンスと同じAvailability zoneに作成します。
(普通にAWSコンソールで作業していれば同じになります)

(注意)Amazon Linuxのインスタンスが良いです。
初めはUbuntuのインスタンスを作成して作業しましたが(今回トラブルを起こしたのがUbuntuのインスタンスだったので)、デバイス名の規則の関係からかAttach後にうまく起動しませんでした。

4. レスキュー用のインスタンスにAttach

2.でDetachしたボリュームをレスキュー用インスタンスに接続します。
この時にデバイス名をメモしておく。「/dev/sdb」など。

5. マウントポイントを作成する

レスキュー用のインスタンスに接続し、rootになってから次のコマンドを投入します(以降の処理は全てrootユーザーで行う)。

[root@resq ~]# mkdir /mnt/attached_disk

6. デバイスの本名(本来のデバイス名)を確認する

AWSのLinuxインスタンスはディスクデバイスを別名で管理しているので、次のコマンドで本来のデバイス名を確認します。

[root@resq ~]# ls -l /dev/(4.でメモしたデバイス名)

今回の例では下のコマンド。リンクになっているので、この場合は「/dev/xvda1」が本来のデバイス名です。

[root@resq ~]# ls -l /dev/sda1
lrwxrwxrwx 1 root root 5 May 14 15:26 /dev/sda1 -> xvda1

7. マウントする

次のコマンドで作成したマウントポイントにマウントします。

[root@resq ~]# mount /dev/xvda1 /mnt/attached_disk

8. マウントしたディスクで問題のある部分を修正する

トラブルによってケースバイケース。
私の場合は/etc/profile.d/にあるトラブルの元になっていたファイルを削除。

9. レスキュー用インスタンスを停止し、作業したボリュームをDetach

10. Detachしたボリュームを、元のインスタンスにAttach

(注意)Attachする際にデバイス名として「/dev/sda1」を指定します。これを指定しないと、ルートボリュームとして認識されません。

11. 元のインスタンスを起動し、無事に接続できればOK

12. レスキュー用インスタンスを削除して終了