Direkt zum Inhalt

Warum startet meine Amazon EC2-Linux-Instance nicht, nachdem ich sie auf eine Nitro-basierte Instance geändert habe?

Lesedauer: 6 Minute
0

Ich habe meine Amazon Elastic Compute Cloud (Amazon EC2) Linux-Instance auf eine Instance basierend auf dem AWS Nitro System geändert. Allerdings startet die Instance jetzt nicht mehr.

Kurzbeschreibung

Eine EC2-Linux-Instance startet möglicherweise nicht, nachdem du sie auf eine Nitro-basierte Instance geändert hast, aus folgenden Gründen:

  • Du hast das Enhanced-Networking-Attribut enaSupport auf der Instance nicht aktiviert.
  • Du hast den Elastic Network Adapter (ENA)-Treiber nicht auf der Instance installiert.
  • Du hast den NVMe-Treiber nicht auf der Instance installiert. Oder du hast das NVMe-Modul nicht in das initramfs-Image der Instance geladen.
  • Du hast einen Gerätenamen zum Einbinden der Dateisysteme in der Datei /etc/fstab beim Booten anstelle einer UUID verwendet.<br id=hardline_break/> Hinweis: Amazon Elastic Block Store (Amazon EBS)-Volumes werden Nitro-basierten Instances als NVMe-Geräte angezeigt. Diese Konfiguration ändert die Gerätenamen.

Um Boot-Probleme zu beheben, ändere den Instance-Typ zurück auf eine Xen-Instance. Verwende dann das Runbook AWSSupport-MigrateXenToNitroLinux, um deine Instance automatisch für die Migration vorzubereiten. Oder überprüfe und behebe die fehlenden Voraussetzungen manuell. Ändere anschließend den Instance-Typ auf eine Nitro-Instance.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Instance-Typ zurück zu Xen ändern

Wichtig: Um Instance-Typen zu ändern, musst du die Instance stoppen und starten.

Instance für einen Stopp und Start konfigurieren

Hinweis: Wenn du eine Instance stoppst und startest, ändert sich die öffentliche IP-Adresse der Instance. Es empfiehlt sich, beim Weiterleiten von externem Datenverkehr an die Instance eine Elastic-IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden. Wenn du Amazon Route 53 verwendest, musst du möglicherweise die Route 53-DNS-Datensätze aktualisieren, wenn sich die öffentliche IP-Adresse ändert.

Bevor du deine Instance stoppst und startest, führe die folgenden Aktionen aus:

Ändern des Instance-Typs

Ändere die Instance zurück zum Xen-Instance-Typ, um sicherzustellen, dass die Instance starten kann.

Instance automatisch auf die Migration vorbereiten

Um deine Instance automatisch zu aktualisieren, sodass sie die Voraussetzungen für die Migration zu Nitro erfüllt, führe das Runbook AWSSupport-MigrateXenToNitroLinux aus.

Voraussetzungen vor dem Migrieren überprüfen

Führe das Skript nitro_check_script.sh aus, um die Voraussetzungen zu überprüfen, bevor du den Instance-Typ auf Nitro änderst. Um auf das Skript zuzugreifen, siehe nitro_check_script.sh auf der GitHub-Website. Informationen darüber, was das Skript überprüft, findest du unter NitroInstanceChecks auf der GitHub-Website.

Führe den folgenden Befehl aus, um das Skript nitro_check_script.sh herunterzuladen:

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

Um deiner Umgebung die Erlaubnis zu geben, das Skript auszuführen, führe den folgenden Befehl aus:

sudo chmod +x /tmp/nitro_check_script.sh

Führe den folgenden Befehl aus, um das Skript mit Root-Rechten auszuführen:

sudo bash /tmp/nitro_check_script.sh

Hinweis: Du musst das Skript als Root-Benutzer oder mit Sudo ausführen. Andernfalls erhältst du die Fehlermeldung „This script must be run as root“.

Führe basierend auf der Skriptausgabe die folgenden Aktionen aus.

Stelle sicher, dass du Enhanced Networking aktiviert und den ENA-Treiber installiert hast

Teste, ob du Enhanced Networking auf deiner Instance aktiviert hast. Wenn Enhanced Networking nicht aktiviert ist, aktiviere Enhanced Networking.

Führe den folgenden Befehl aus, um zu überprüfen, ob du den ENA-Treiber installiert hast:

sudo modinfo ena |grep -i '^version:' || echo "ENA module not available, try modprobe ena"

Wenn du den ENA-Treiber nicht installiert hast, installiere den neuesten Treiber. Anleitungen findest du unter Linux-Kernel-Treiber für die Elastic Network Adapter (ENA)-Familie auf der GitHub-Website.

Den NVMe-Treiber installieren

Um auf NVMe-Volumes zuzugreifen, musst du die NVMe-Treiber installieren.

Prüfe, ob du in der Datei /etc/fstab einen Gerätenamen für Mount-Punkte verwendet hast

Führe die folgenden Schritte aus:

  1. Führe den folgenden Befehl aus, um zu überprüfen, ob du eine UUID verwendet hast:

    cat /etc/fstab |grep -iP 'uuid|dev/'

    Beispielausgabe:

    /dev/nvme0n1p1 / xfs defaults,noatime 1 1

    Hinweis: Die Beispielausgabe verwendet einen Gerätenamen anstelle einer UUID.

  2. Wenn du keine UUID verwendet hast, führe den folgenden Befehl aus, um die UUID für den Gerätenamen abzurufen:

    lsblk -f device_name |tail -n 1 |awk '{print $4}'

    Hinweis: Ersetzen device_name durch deinen Gerätenamen.

  3. (Optional) Bevor du die Datei /etc/fstab bearbeitest, empfiehlt es sich, den folgenden Befehl auszuführen, um eine Kopie der Datei zu erstellen:

    sudo cp /etc/fstab /etc/fstab-`date +%d%m%Y`
  4. Führe den folgenden Befehl aus, um die Datei /etc/fstab zu öffnen:

    cat /etc/fstab
  5. Ersetze in der Datei den Gerätenamen durch die UUID.<br id=hardline_break/> Beispieldatei:

    /dev/nvme0n1p1 / xfs defaults,noatime 1 1

    Hinweis: Ersetze /dev/nvme0n1p1 durch die UUID. Stelle sicher, dass du alle Gerätenamen in der Datei /etc/fstab durch die UUID ersetzt.

  6. Um zu überprüfen, ob du die Datei korrekt aktualisiert hast, führe den folgenden Befehl erneut aus:

    cat /etc/fstab

    Überprüfe in der Ausgabe, ob UUID die UUID anzeigt.<br id=hardline_break/> Beispielausgabe:

    UUID=123456-1234-1234-acbd-1234abc1234 / xfs defaults,noatime 1 1

Instance-Typ zurück zu Nitro ändern

Ändere die Instance zu einer Nitro-basierten Instance.

Hinweis: Wenn du auf die neueste Nitro-Instance aktualisierst und einen veralteten Kernel oder Treiber verwendest, kann die Instance die Statusprüfung möglicherweise nicht bestehen. Infolgedessen erhältst du Boot-Fehler und „kernel panic“-Fehler oder deine Instance wird nicht erreichbar. Um dieses Problem zu beheben, siehe Wie behebe ich den Fehler „Kernel panic - not syncing“ in meiner EC2-Instance?

AWS OFFICIALAktualisiert vor 8 Monaten