EC2 Linux インスタンスのブートを試みると緊急モードになる理由を知りたいです。
Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスをブートする際、そのインスタンスが緊急モードになり、起動プロセスが失敗します。その後、インスタンスにアクセスできなくなります。
簡単な説明
次の要因で、インスタンスが緊急モードで起動することがあります。
- インスタンスに破損したカーネルがあり、Kernel panic エラーが発生した。
- /etc/fstab ファイル内のエントリに誤りがあることが原因で、Dependency failed エラーが発生し、自動マウントに失敗した。
エラーの種類を特定するには、インスタンスのコンソール出力を確認します。
解決策
Kernel panic エラー
カーネルに問題がある場合、次の例のようなエラーメッセージが表示されます。
「Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)」
Kernel panic エラーは、grub 設定または initramfs ファイルが破損している場合に発生します。この問題をトラブルシューティングするには、次の手順を実行します。
- カーネルを以前の、安定したカーネルに戻します。
- インスタンスを再起動します。
- 破損したカーネルのエラーメッセージに記載されている問題を修正します。
Dependency failed エラー
Dependency failed エラーは、/etc/fstab ファイルに構文エラーがあり、自動マウントが失敗した場合に発生します。このエラーは、ファイルに記載された Amazon Elastic Block Store (Amazon EBS) ボリュームがインスタンスからデタッチされたときにも発生します。その場合、次の例のようなエラーメッセージが表示されます。
「[[1;33mDEPEND[0m] Dependency failed for /mnt.
[[1;33mDEPEND[0m] Dependency failed for Local File Systems.
[[1;33mDEPEND[0m]
Dependency failed for Migrate local... structure to the new structure.
[[1;33mDEPEND[0m] Dependency failed for Relabel all filesystems, if necessary.
[[1;33mDEPEND[0m] Dependency failed for Mark the need to relabel after reboot.
[[1;33mDEPEND[0m]
Dependency failed for File System Check on /dev/xvdf」
上記の例では、ブートシーケンス中にマウントポイント (/mnt) をマウントできませんでした。マウントエラーにより、ブートシーケンスが緊急モードに移行することを避けるには、/etc/fstab ファイルに次の設定を追加します。
- セカンダリパーティション (/mnt など) に nofail オプションを指定します。
注: nofail オプションを使用すると、ボリュームやパーティションのマウントが失敗しても、ブートシーケンスが中断されなくなります。 - マウントポイント用のファイルで最後の列に 0 を指定すると、ファイルシステムチェックが無効になります。
/etc/fstab ファイルを更新するには、EC2 シリアルコンソールを使用するか、AWSSupport-ExecuteEC2Rescue オートメーションを実行するか、レスキューインスタンスを使用してファイルを手動で編集します。
重要: インスタンスを停止して起動する前に、次のアクションを実行してください。
- EBS ボリュームのバックアップを作成します。
注: インスタンスの基盤がインスタンスストアであるか、データを含むインスタンスストアボリュームがある場合、インスタンスの停止時に Amazon EC2 はデータを削除します。 - インスタンスのシャットダウン動作を Stop に設定し、インスタンスの停止時にインスタンスが破棄されないようにします。
注: インスタンスを停止または起動する際、インスタンスのパブリック IP アドレスは変更されます。外部トラフィックをインスタンスにルーティングするには、パブリック IP アドレスではなく Elastic IP アドレスを使用することをおすすめします。詳細については、「Amazon EC2 インスタンスの停止と起動」を参照してください。
EC2 シリアルコンソールを使用する
重要: EC2 シリアルコンソールを使用する場合、インスタンスを停止して起動する必要はありません。
Linux 用 EC2 シリアルコンソールを有効化した場合は、サポートされている Nitro ベースのインスタンスタイプおよびサポートされているベアメタルインスタンスのトラブルシューティングにコンソールを使用できます。EC2 シリアルコンソールを使用する際は、インスタンスに接続するための有効な接続は必要ありません。EC2 シリアルコンソールに接続し、/etc/fstab ファイルを変更します。
EC2 シリアルコンソールを初めて使用する場合は、前提条件を満たしていることを確認してください。インスタンスに到達できず、シリアルコンソールへのアクセス設定が完了していない場合は、EC2 シリアルコンソールを使用して /etc/fstab ファイルを修正することはできません。
AWSSupport-ExecuteEC2Rescue オートメーションドキュメントを実行する
前提条件: AWSSupport-ExecuteEC2Rescue の使用に必要な AWS Identity and Access Management (IAM) アクセス許可があることを確認します。
AWS Support-ExecuteEC2Rescue オートメーションドキュメントを実行すると、ブート時の問題を自動的に修正できます。詳細については、「到達できないインスタンスに EC2Rescue ツールを実行する」を参照してください。
レスキューインスタンスを使用してファイルを手動で編集する
次の手順を実行します。
-
Amazon EC2 コンソールを開きます。
-
[インスタンス] を選択し、緊急モードのインスタンスを選択します。
-
そのインスタンスを停止します。
-
停止したインスタンスから Amazon EBS ルートボリューム (/dev/xvda または /dev/sda1)をデタッチします。
-
停止したインスタンスと同じアベイラビリティーゾーン (AZ) でレスキューインスタンスを起動します。
-
ルートボリュームをセカンダリデバイスとしてレスキューインスタンスにアタッチします。
注: セカンダリボリュームをアタッチする際は、別のデバイス名を使用できます。 -
次のコマンドを実行し、レスキューインスタンスにアタッチした新しいボリューム用のマウントポイントディレクトリを作成します。
sudo mkdir /mnt/rescue注: /mnt/rescue を指定したマウントポイントディレクトリに置き換えてください。
-
ブロックデバイス名とパーティションを識別するには、次のコマンドを実行します。
[root ~]$ 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 101G 0 disk └─xvdf1 202:81 0 101G 0 part -
マウントポイントディレクトリにボリュームをマウントするには、次のコマンドを実行します。
sudo mount -o nouuid /dev/xvdf1 /mnt/rescue
注: /dev/xvdf1 を実際のデバイス名に置き換えます。 /etc/fstab ファイルを開くには、次のコマンドを実行します。
sudo vi /mnt/rescue/etc/fstab
- /etc/fstab のエントリを編集します。次の例は、UUID で定義した 2 つの Amazon EBS ボリュームを示しています。両方のセカンダリボリュームには nofail オプションが追加され、各エントリの最後の列には 0 が指定されています。
$ cat /etc/fstab UUID=e75a1891-3463-448b-8f59-5e3353af90ba / xfs defaults,noatime 1 0 UUID=ce917c0c-9e37-4ae9-bb21-f6e5022d5381 /mnt ext4 defaults,noatime,nofail 1 0
- ファイルを保存し、次のコマンドを実行してボリュームをアンマウントします。
sudo umount /mnt/rescue
- レスキューインスタンスからボリュームをデタッチします。
- ボリュームを元のインスタンスにアタッチします。
- インスタンスを起動し、インスタンスをブートできることを確認します。
- 言語
- 日本語

関連するコンテンツ
- 質問済み 4ヶ月前