問題の概要
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発生時)
- インスタンス停止
- ルートボリューム分離
aws ec2 stop-instances --instance-ids i-xxxxxxxxx
aws ec2 detach-volume --volume-id vol-xxxxxxxxx
- 別インスタンスでマウント・修復
# 復旧用インスタンスにアタッチ
sudo mkdir /mnt/repair sudo mount /dev/xvdf1 /mnt/repair
# fstab修正
sudo vi /mnt/repair/etc/fstab
- ボリューム復元・再起動
予防策
設定前テスト
# マウント前テスト
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作成フロー
- EFSマウント設定
- 再起動テスト実施
- 正常起動確認
- 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運用が可能になります。
コメント