Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
為什麼我的 Amazon EC2 Linux 執行個體在變更為 Nitro 型執行個體後無法啟動?
我將 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體變更為以 AWS Nitro System 為基礎的執行個體。但是,現在執行個體無法啟動。
簡短說明
當您將 EC2 Linux 執行個體變更為 Nitro 型執行個體 後,執行個體可能因以下原因而無法啟動:
- 您未在執行個體上啟用 enaSupport 增強型網路屬性。
- 您未在執行個體上安裝 Elastic Network Adapter (ENA) 驅動程式。
- 您未在執行個體上安裝 NVMe 驅動程式。或者,您未在執行個體的 initramfs 映像中載入 NVMe 模組。
- 您在啟動時,使用裝置名稱而非 UUID 來掛載 /etc/fstab 檔案中的檔案系統。<br id=hardline_break/> **注意:**對 Nitro 型執行個體而言,Amazon Elastic Block Store (Amazon EBS) 磁碟區會顯示為 NVMe 裝置。此組態會變更裝置名稱。
若要解決啟動問題,請將執行個體類型變更回 Xen 執行個體。然後,使用 AWSSupport-MigrateXenToNitroLinux 執行手冊來自動為遷移準備您的執行個體。或者,手動檢查並修正缺失的先決條件。最後,將執行個體類型變更為 Nitro 執行個體。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
將執行個體類型變更回 Xen
**重要:**若要變更執行個體類型,您必須先停止再啟動執行個體。
為停止和啟動設定您的執行個體
**注意:**當您停止並啟動執行個體時,執行個體的公共 IP 位址會變更。最佳實務是使用彈性 IP 位址將外部流量路由至您的執行個體,而非使用公共 IP 位址。如果您使用 Amazon Route 53,則在公共 IP 位址變更時,您可能需要更新 Route 53 DNS 記錄。
在停止並啟動執行個體之前,請採取以下動作:
- 如果您的執行個體使用執行個體儲存體,請將執行個體儲存體上的磁碟區資料儲存到永續性儲存體。例如,您可以將資料儲存到 Amazon EBS 磁碟區 或 Amazon Simple Storage Service (Amazon S3) 儲存貯體。<br id=hardline_break/> **重要:**當您停止執行個體時,Amazon EC2 會刪除執行個體儲存體資料。
- 建立您的 EBS 磁碟區快照。如果您遇到問題,可以使用快照來還原您的執行個體。
- 暫時將執行個體從其 Amazon EC2 Auto Scaling 群組中移除,以免在停止執行個體時誤將其終止。<br id=hardline_break/> **注意:**EC2 Auto Scaling 可能會根據您的 縮減保護設定終止 Auto Scaling 群組中已停止的執行個體。您使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 啟動的執行個體,可能位於 Auto Scaling 群組中。
- 將 Set the instance shutdown behavior (設定執行個體關機行為) 設定為 Stop (停止),以確保執行個體在停止時不會終止。
變更執行個體類型
將執行個體變更回 Xen 執行個體類型,以確保執行個體可以啟動。
自動為遷移準備您的執行個體
若要自動更新您的執行個體,使其符合遷移至 Nitro 的先決條件,請執行 AWSSupport-MigrateXenToNitroLinux 執行手冊。
在遷移前檢查先決條件
在將執行個體類型變更為 Nitro 之前,執行 nitro_check_script.sh 指令碼以檢查先決條件。若要存取該指令碼,請參閱 GitHub 網站上的 nitro_check_script.sh。如需該指令碼檢查項目的資訊,請參閱 GitHub 網站上的 NitroInstanceChecks。
若要下載 nitro_check_script.sh 指令碼,請執行以下命令:
sudo wget https://raw.githubusercontent.com/awslabs/aws-support-tools/refs/heads/master/EC2/NitroInstanceChecks/nitro_check_script.sh -O /tmp/nitro_check_script.sh
若要授予您的環境執行該指令碼的權限,請執行以下命令:
sudo chmod +x /tmp/nitro_check_script.sh
若要以根權限執行該指令碼,請執行以下命令:
sudo bash /tmp/nitro_check_script.sh
**注意:**您必須以根使用者身分或使用 sudo 執行該指令碼。否則,您會收到「This script must be run as root」錯誤訊息。
根據指令碼輸出,採取以下動作。
確認您已啟用增強型網路並安裝 ENA 驅動程式
測試您是否在執行個體上啟用了增強型網路。如果未啟用增強型網路,請啟用增強型網路。
若要檢查您是否已安裝 ENA 驅動程式,請執行以下命令:
sudo modinfo ena |grep -i '^version:' || echo "ENA module not available, try modprobe ena"
如果您未安裝 ENA 驅動程式,請安裝最新的驅動程式。如需指示,請參閱 GitHub 網站上的彈性網路介面卡 (ENA) 系列的 Linux 核心驅動程式。
安裝 NVMe 驅動程式
若要存取 NVMe 磁碟區,您必須安裝 NVMe 驅動程式。
檢查您是否在 /etc/fstab 檔案中為掛載點使用裝置名稱
請完成以下步驟:
-
若要檢查您是否使用了 UUID,請執行以下命令:
cat /etc/fstab |grep -iP 'uuid|dev/'範例輸出:
/dev/nvme0n1p1 / xfs defaults,noatime 1 1**注意:**範例輸出使用的是裝置名稱而非 UUID。
-
如果您未使用 UUID,請執行以下命令來擷取該裝置名稱的 UUID:
lsblk -f device_name |tail -n 1 |awk '{print $4}'**注意:**將 device_name 替換為您的裝置名稱。
-
(選用) 最佳實務是在編輯 /etc/fstab 檔案之前,執行以下命令來製作該檔案的副本:
sudo cp /etc/fstab /etc/fstab-`date +%d%m%Y` -
執行以下命令以開啟 /etc/fstab 檔案:
cat /etc/fstab -
在檔案中,將裝置名稱替換為 UUID。<br id=hardline_break/> 檔案範例:
/dev/nvme0n1p1 / xfs defaults,noatime 1 1**注意:**將 /dev/nvme0n1p1 替換為 UUID。請確保將 /etc/fstab 檔案中所有的裝置名稱都替換為 UUID。
-
若要確認您是否已正確更新檔案,請重新執行以下命令:
cat /etc/fstab在輸出中,檢查 UUID 是否顯示該 UUID。<br id=hardline_break/> 範例輸出:
UUID=123456-1234-1234-acbd-1234abc1234 / xfs defaults,noatime 1 1
將執行個體類型變更回 Nitro
**注意:**如果您升級至最新的 Nitro 執行個體並使用過時的核心或驅動程式,執行個體可能無法通過其狀態檢查。因此,您會遇到啟動失敗和「kernel panic」錯誤,或者您的執行個體變得無法連線。若要對此問題進行疑難排解,請參閱如何解決 EC2 執行個體中的「Kernel panic - not syncing」錯誤?
相關內容
- 已提問 2 年前
- 已提問 3 年前
- 已提問 2 年前
- 已提問 1 年前
- 已提問 2 年前

