スキップしてコンテンツを表示

EC2 Linux インスタンスのブートを試みると緊急モードになる理由を知りたいです。

所要時間2分
0

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 ファイルが破損している場合に発生します。この問題をトラブルシューティングするには、次の手順を実行します。

  1. カーネルを以前の、安定したカーネルに戻します
  2. インスタンスを再起動します
  3. 破損したカーネルのエラーメッセージに記載されている問題を修正します。

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 オートメーションを実行するか、レスキューインスタンスを使用してファイルを手動で編集します。

重要: インスタンスを停止して起動する前に、次のアクションを実行してください。

注: インスタンスを停止または起動する際、インスタンスのパブリック 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 ツールを実行する」を参照してください。

レスキューインスタンスを使用してファイルを手動で編集する

次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。

  2. [インスタンス] を選択し、緊急モードのインスタンスを選択します。

  3. そのインスタンスを停止します。

  4. 停止したインスタンスから Amazon EBS ルートボリューム (/dev/xvda または /dev/sda1)をデタッチします。

  5. 停止したインスタンスと同じアベイラビリティーゾーン (AZ) でレスキューインスタンスを起動します。

  6. ルートボリュームをセカンダリデバイスとしてレスキューインスタンスにアタッチします
    注: セカンダリボリュームをアタッチする際は、別のデバイス名を使用できます。

  7. SSH を使用してレスキューインスタンスに接続します

  8. 次のコマンドを実行し、レスキューインスタンスにアタッチした新しいボリューム用のマウントポイントディレクトリを作成します。

    sudo mkdir /mnt/rescue

    注: /mnt/rescue を指定したマウントポイントディレクトリに置き換えてください。

  9. ブロックデバイス名とパーティションを識別するには、次のコマンドを実行します。

    [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
  10. マウントポイントディレクトリにボリュームをマウントするには、次のコマンドを実行します。

sudo mount -o nouuid /dev/xvdf1 /mnt/rescue

注: /dev/xvdf1 を実際のデバイス名に置き換えます。 /etc/fstab ファイルを開くには、次のコマンドを実行します。

sudo vi /mnt/rescue/etc/fstab
  1. /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  
  1. ファイルを保存し、次のコマンドを実行してボリュームをアンマウントします。
sudo umount /mnt/rescue
  1. レスキューインスタンスからボリュームをデタッチします。
  2. ボリュームを元のインスタンスにアタッチします
  3. インスタンスを起動し、インスタンスをブートできることを確認します。
AWS公式更新しました 6ヶ月前
コメントはありません

関連するコンテンツ