PR

AL2023でEFSマウント後にAMI起動でEmergency Modeに落ちる問題の解決ガイド

問題の概要

Amazon Linux 2023でEFSをマウントしたEC2インスタンスのAMI作成後、新しいインスタンス起動時にEmergency Modeに落ちる問題が発生します。

症状

  • ユーザーデータや手動でのEFSマウントは正常マウントするのに、リブートやAMI起動でエラー発生
  • AMI作成後の新規インスタンス起動でEmergency Mode移行
  • 起動ログに[FAILED] Failed to mount /mnt/efs/xxx表示
  • Cannot open access to console, the root account is locked.エラー表示
  • SSMやコンソール経由でのログイン不可
  • EBSスナップショット、デタッチ状態

根本原因

1. fstabエントリの記述ミス

最も多いのがEFSファイルシステムIDの記述ミスです。

# 正しい記述
fs-xxxxxxxx:/ /mnt/efs efs _netdev,tls,nofail 0 0

# 誤った記述(:/ が不足)
fs-xxxxxxxx: /mnt/efs efs _netdev,tls,nofail 0 0

2. systemd依存関係の問題

AL2023では、fstabマウントがsystemdのLocal File Systems targetに依存します。EFSマウント失敗により以下の連鎖障害が発生:

[FAILED] Failed to mount /mnt/efs/public_upimage.
[DEPEND] Dependency failed for Local File Systems.
Failed at merging in cloud config part from part-001: empty cloud config
You are in emergency mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or "exit"
to boot into default mode.

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press Enter to continue.

3. 必須オプションの不足

  • _netdev: ネットワーク起動後マウント指定なし
  • nofail: マウント失敗時のシステム停止回避なし

これらオプション不足により、ネットワーク未初期化段階でのマウント試行や、EFS一時障害時のシステム停止が発生します。

解決方法

正しいfstab設定

fs-xxxxxxx:/ /mnt/efs/data efs _netdev,tls,accesspoint=fsap-xxxxxxxxx,nofail 0 0

必須要素

  • :/ – EFSファイルシステムルート指定
  • _netdev – ネットワーク依存指定
  • nofail – 障害時システム継続

復旧手順(Emergency Mode発生時)

  1. インスタンス停止
  2. ルートボリューム分離
  3. aws ec2 stop-instances --instance-ids i-xxxxxxxxx
  4. aws ec2 detach-volume --volume-id vol-xxxxxxxxx
  5. 別インスタンスでマウント・修復
  6. # 復旧用インスタンスにアタッチ
  7. sudo mkdir /mnt/repair sudo mount /dev/xvdf1 /mnt/repair
  8. # fstab修正
  9. sudo vi /mnt/repair/etc/fstab
  10. ボリューム復元・再起動

予防策

設定前テスト

# マウント前テスト
sudo mount -t efs -o tls,accesspoint=fsap-xxx fs-xxx:/ /tmp/test

# fstab記述後の検証
sudo mount -a
sudo reboot  # AMI作成前に必須

推奨設定テンプレート

# 基本設定
fs-FILESYSTEM_ID:/ /MOUNT_POINT efs _netdev,tls,nofail 0 0

# アクセスポイント使用
fs-FILESYSTEM_ID:/ /MOUNT_POINT efs _netdev,tls,accesspoint=ACCESS_POINT_ID,nofail 0 0

ベストプラクティス

AMI作成フロー

  1. EFSマウント設定
  2. 再起動テスト実施
  3. 正常起動確認
  4. AMI作成

代替アプローチ

# アプリケーション起動時マウント
#!/bin/bash
mount -t efs -o tls,accesspoint=fsap-xxx fs-xxx:/ /data
systemctl start application.service

監視設定

# systemdユニットでマウント管理
[Unit]
Description=EFS Mount
After=network-online.target
Requires=network-online.target

[Mount]
What=fs-xxx:/
Where=/mnt/efs
Type=efs
Options=_netdev,tls,nofail

トラブルシューティング

ログ確認

# システム起動ログ
journalctl -xb

# マウント関連ログ
journalctl -u mount

# systemdマウントサービス状態
systemctl status mnt-efs-*.mount

エラーパターンと対処

起動ログでの典型的エラー

[FAILED] Failed to mount /mnt/efs/public_upimage.
[DEPEND] Dependency failed for Local File Systems.

原因別対処法

  • fstab記述エラー:/記述確認、オプション見直し
  • DNS解決失敗 → VPC DNS設定確認(AmazonProvidedDNS)
  • ネットワークタイムアウト → セキュリティグループ確認(NFS: 2049ポート)
  • アクセスポイント不正 → EFS設定とIAMロール確認
  • リージョン不整合 → EFSとEC2の同一リージョン確認

Emergency Mode回避設定

# 起動時マウント必須を回避
echo 'fs-xxx:/ /mnt/efs efs _netdev,tls,nofail,noauto 0 0' >> /etc/fstab

# 手動マウントスクリプト
cat > /usr/local/bin/mount-efs.sh << 'EOF'
#!/bin/bash
mount -t efs -o tls,accesspoint=fsap-xxx fs-xxx:/ /mnt/efs
EOF
chmod +x /usr/local/bin/mount-efs.sh

まとめ

AL2023でのEFS利用時は以下に注意:

  • fstab記述の正確性(特に:/
  • ネットワーク依存性_netdev
  • 障害回避性nofail
  • AMI化前の再起動テスト

これらを守ることで、Emergency Mode移行を回避し、安定したEFS運用が可能になります。

コメント

タイトルとURLをコピーしました