Probleme mit dem Start und dem Netzwerk eines virtuellen Linux-Computers aufgrund von Hyper-V-Treiber-bezogenen Fehlern beheben.

Gilt für: ✔️ Linux-VMs

Zusammenfassung

Azure wird auf dem Hyper-V-Hypervisor ausgeführt, und Linux-Systeme erfordern bestimmte Hyper-V-Kernelmodule, um auf Azure ausgeführt zu werden. Diese Kernelmodule werden in den LIS-Treibern (Linux Integration Services) für Hyper-V und Azure gebündelt. Microsoft trägt sie direkt zum upstream Linux-Kernel bei.

In diesem Artikel werden mehrere Bedingungen erläutert, unter denen mindestens ein deaktivierter Hyper-V Treiber zu Start- und Netzwerkproblemen mit virtuellen Linux-Computern (VM) führen kann.

Voraussetzungen

Stellen Sie sicher, dass die serielle Konsole in der Linux-VM aktiviert und funktionsfähig ist.

So identifizieren Sie das Problem fehlender Hyper-V-Treiber

Verwenden Sie Azure CLI oder das Azure-Portal, um das serielle Konsolenprotokoll des virtuellen Computers im Bereich Startdiagnose oder im Bereich serielle Konsole anzuzeigen, um zu ermitteln, ob Ihre VM aufgrund fehlender Hyper-V-Treiber nicht gestartet werden kann. Die Beispielausgabe von Fehlern wird in den entsprechenden Abschnitten unten angezeigt.

Vor der Fehlerbehebung

So beheben Sie Scenario 1: Netzwerk-Hyper-V Treiber ist deaktiviert und Scenario 2: Die Mac-Adresse (NIC Media Access Control) wird geändert oder stimmt nicht überein, Sie benötigen serial console Zugriff auf Ihre Linux-VM.

Wenn Sie keinen seriellen Konsolenzugriff haben, folgen Sie dem Offlineansatz , um von einem virtuellen Rettungscomputer auf den Inhalt des problematischen Betriebssystemdatenträgers zuzugreifen. Der Zugriff auf Azure CLI oder Azure Cloud Shell ist für den Offlineansatz erforderlich.

Zur Problembehandlung Scenario 3: Andere Hyper-V Treiber sind deaktiviert, ist der Offlineansatz die einzige Möglichkeit, das Problem zu beheben.

Szenario 1: Netzwerk-Hyper-V Treiber ist deaktiviert

Da die Netzwerkdienste nicht verfügbar sind, können Sie das Secure Shell Protocol (SSH) nicht auf einem virtuellen Computer herstellen, aber Sie können sich trotzdem über serial console über das Azure Portal anmelden. Es werden die folgenden Fehlertypen in der seriellen Konsole oder im neuesten seriellen Protokoll im Bereich Bootdiagnose im Azure-Portal angezeigt:

 cloud-init[807]: Cloud-init v. 19.4 running 'init-local' at Tue, xx Aug 20XX 20:41:53 +0000. Up 5.83 seconds.
 cloud-init[807]: 20XX-08-XX 20:41:54,231 - stages.py[WARNING]: Failed to rename devices: [nic not present] Cannot rename mac=xx:xx:xx:xx:xx:xx to eth0, not available.
[  OK  ] Started Initial cloud-init job (pre-networking).
----
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.

Oder

 cloud-init[799]: 2022-XX-XX 19:04:06,267 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-XX 19:04:07,269 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-XX 19:04:10,274 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-2XX 19:04:10,277 - azure.py[WARNING]: IMDS network metadata has incomplete configuration: None

Lösung 1: Aktivieren des Hyper-V Netzwerktreibers mithilfe der seriellen Konsole

  1. Greifen Sie auf die serielle Konsole der VM zu. Das Netzwerk ist nicht mehr verfügbar, aber die Anmeldeaufforderung ist weiterhin verfügbar.

  2. Melden Sie sich mit den richtigen Anmeldeinformationen beim virtuellen Computer an.

  3. Wechseln Sie zum Stammkonto oder Benutzerkonto mit sudo-Zugriff.

  4. Wechseln Sie zum Verzeichnis "/etc/modprobe.d ", und suchen Sie nach einer Zeile, die den hv_netvsc Treiber deaktiviert.

    1. Identifizieren Sie die Datei, die den hv_netvsc Treiber und die entsprechenden Zeilennummern deaktiviert, indem Sie den folgenden Befehl ausführen:

      sudo grep -nr "hv_netvsc" /etc/modprobe.d/
      
    2. Ändern Sie die entsprechende Datei, und kommentieren Sie die hv_netvsc-Einträge aus oder löschen Sie sie.

      Screenshot der möglichen Konfigurationsdateiinhalte, die zum Deaktivieren von Netzwerktreibern verwendet werden.

      sudo vi /etc/modprobe.d/disable.conf
      

      Notiz

      • Die Einträge, die Treiber deaktivieren, werden vom Linux-Betriebssystem definiert, nicht durch Microsoft.
      • Ersetzen Sie durch disable.conf den entsprechenden Dateinamen, in dem der hv_netvsc Treiber deaktiviert ist.
  5. Erstellen Sie das anfängliche RAMdisk-Image für den aktuell geladenen Kernel neu:

    • Für RHEL/SLES-basierte Bilder

      sudo dracut -f -v
      
    • Für Ubuntu/Debian-basierte Images

      sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  6. Starten Sie die VM neu.

Erstellen Sie immer eine Sicherung des ursprünglichen RAMdisk-Images, um das Rollback bei Bedarf zu vereinfachen.

  • Für RHEL-basierte Bilder:

    sudo cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
    
  • Für SLES-basierte Bilder:

    sudo cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
    
  • Für Ubuntu/Debian-basierte Images:

    sudo cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
    

Lösung 2: Hyper-V Netzwerktreiber offline aktivieren

  1. Verwenden Sie az vm Repair , um auf den Inhalt des betroffenen Betriebssystemdatenträgers von einer Wiederherstellungs-VM zuzugreifen.

  2. Binden Sie die Dateisysteme des angehängten Betriebssystemdatenträgers in der Rettungs-VM ein und wechseln Sie mittels chroot-Anweisungen in das Systemverzeichnis.

  3. Nachdem auf den Inhalt des betroffenen Betriebssystemdatenträgers zugegriffen wurde, führen Sie die Schritte 4 und 5 in Solution 1 aus: Aktivieren Sie Hyper-V Netzwerktreiber mithilfe der seriellen Konsole, um die Treiber erneut zu aktivieren und das ursprüngliche RAMdisk-Image neu zu erstellen.

    Bevor das anfängliche RAMdisk-Image neu erstellt wird, wechseln Sie zu chroot-Umgebung. Der vollständige Pfad des Bilds muss angegeben werden.

  4. Nachdem die Änderungen angewendet wurden, führen Sie einen automatischen Austausch des Betriebssystemdatenträgers mit der ursprünglichen VM durch, und starten Sie das System mithilfe des az vm repair restore Befehls neu.

Szenario 2: Die MAC-Adresse (NIC Media Access Control) wird geändert oder stimmt nicht überein.

Wenn die MAC-Adresse der Netzwerkschnittstellenkarte geändert wird oder nicht innerhalb der Betriebssystemkonfiguration übereinstimmt, können Sie keine SSH-Verbindung mit dem virtuellen Computer herstellen, da die Netzwerkdienste nicht verfügbar sind. Sie können sich weiterhin über serial console über das Azure-Portal anmelden. Fehler, die denen in Scenario 1 ähneln: Der Netzwerk-Hyper-V Treiber ist deaktiviert werden angezeigt.

Wenn das Problem weiterhin besteht, obwohl der Hyper-V Netzwerktreiber aktiviert ist, verwenden Sie eine der folgenden Lösungen, um die Betriebssystem-NIC-Konfiguration zu überprüfen und das Problem zu beheben.

Lösung 1: Beheben eines NIC MAC-Adresskonflikts mithilfe der seriellen Konsole

  1. Greifen Sie auf die serielle Konsole der VM zu. Das Netzwerk ist nicht mehr verfügbar, aber die Anmeldeaufforderung ist weiterhin verfügbar.

  2. Melden Sie sich mit den richtigen Anmeldeinformationen beim virtuellen Computer an.

  3. Wechseln Sie zum Stammkonto oder Benutzerkonto mit sudo-Zugriff.

  4. Wechseln Sie zum Verzeichnis "/etc/cloud/cloud.cfg.d ".

  5. Angesichts der Verwendung von Linux-Partnerimages öffnen und bearbeiten Sie die folgenden Dateien:

    • 91-azure_datasource.cfg für RHEL-basierte Verteilung.
    • 90_dpkg.cfg für Debian und Ubuntu-basierte Verteilung.
  6. Wenn der apply_network_config Parameter auf "false" festgelegt ist, legen Sie ihn auf "true" fest. Wenn nichts angegeben ist, wird der Standardwert auf "true" festgelegt. Diese Einstellung stellt sicher, dass die neue MAC-Adresse auf die Netzwerkkonfiguration beim nächsten Neustart angewendet wird.

  7. Im Allgemeinen würde sich eine NIC MAC-Adresse nur ändern, wenn eine NIC vom Administrator gelöscht oder hinzugefügt wird oder eine NIC im Back-End aktualisiert wird. Wenn die Netzwerkkonfiguration über cloud-init nicht gewünscht ist und der apply_network_config Parameter auf "false" festgelegt werden muss, löschen Sie die Datei "/var/lib/cloud/instance/obj.pkl ", und starten Sie das System neu.

    sudo rm /var/lib/cloud/instance/obj.pkl
    
  8. Nachdem die Änderungen angewendet wurden, starten Sie das System neu.

Lösung 2: Beheben eines NIC MAC-Adresskonflikts offline

  1. Verwenden Sie den Befehl "az vm repair ", um von einem virtuellen Rettungscomputer aus auf den Inhalt des betroffenen Betriebssystemdatenträgers zuzugreifen.
  2. Montieren und die Datei-Systeme des angehängten Betriebssystemdatenträgers in einer Rettungs-VM korrekt in die Root-Umgebung wechseln, indem Sie chroot-Anweisungen befolgen.
  3. Nachdem auf den Inhalt der Kopie des betroffenen Betriebssystemdatenträgers zugegriffen wurde, führen Sie die Schritte 4 bis 7 in Lösung 1 aus: Beheben Sie die NIC MAC-Adressfehlermeldung mithilfe der seriellen Konsole, um Netzwerkänderungen vorzunehmen oder die Datei "obj.pkl" zu löschen.
  4. Nachdem die Änderungen angewendet wurden, verwenden Sie den az vm repair restore Befehl, um einen automatischen Austausch des Betriebssystemdatenträgers mit der ursprünglichen VM durchzuführen und das System neu zu starten.

Szenario 3: Andere Hyper-V Treiber sind deaktiviert.

Wenn Startprobleme mit anderen Hyper-V Treibern auftreten, können Sie wahrscheinlich keine SSH zu einer VM herstellen, da die Netzwerkdienste nicht verfügbar sind. Sie werden auf eine Dracut-Schale abgelegt. Dieses Problem kann über die serial console aus dem Azure-Portal angezeigt werden. Sie können die folgenden Fehler in der seriellen Konsole oder im neuesten seriellen Protokoll im bereich Bootdiagnose im portal Azure sehen:

 dracut-initqueue[455]: Warning: dracut-initqueue timeout - starting timeout scripts
 dracut-initqueue[455]: Warning: Could not boot.
         Starting Setup Virtual Console...
[  OK  ] Started Setup Virtual Console.
         Starting Dracut Emergency Shell...
Warning: /dev/mapper/rootvg-rootlv does not exist
Generating "/run/initramfs/rdsosreport.txt"
 
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.
dracut:/#

Oder

Gave up waiting for root file system device.  Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT!  UUID=143c811b-9b9c-48f3-b0c8-040f6e65f50aa does not exist.  Dropping to a shell!


BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.4) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs)

Lösung: Aktivieren von Hyper-V Treibern

Wenn auf den virtuellen Computer aufgrund anderer deaktivierter Hyper-V Treiber nicht zugegriffen werden kann, verwenden Sie einen Offline-Ansatz, um die Treiber wiederzuverwenden, da die Initramfs nicht geladen werden können.

  1. Verwenden Sie den Reparaturbefehl az vm, um auf den Inhalt des problematischen Betriebssystemdatenträgers von einem virtuellen Rettungscomputer zuzugreifen.

  2. Einbinden und chrooten in die Dateisysteme des angefügten Betriebssystem-Datenträgers in einer Rescue-VM ordnungsgemäß nach chroot-Anweisungen.

  3. Wechseln Sie einmal in der Chroot-Umgebung zum Verzeichnis "/etc/modprobe.d ", und suchen Sie nach einer Zeile, die die hv_utils, hv_vmbus, hv_storvsc oder hv_netvsc Treiber deaktivieren kann.

    1. Führen Sie den folgenden Befehl aus, um die Datei zu identifizieren, die die hv_utils, hv_vmbus, hv_storvsc oder hv_netvsc Treiber und die entsprechende Zeilennummer deaktiviert.

      sudo egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
      
    2. Ändern Sie die entsprechende Datei, kommentieren oder löschen Sie die Einträge hv_utils, hv_vmbus, hv_storvsc oder hv_netvsc. Die Einträge sind am häufigsten einer der folgenden (oder beide):

      Screenshot der möglichen Konfigurationsdateiinhalte, die zum Deaktivieren von Kernelmodulen/Treibern mithilfe der Installationsoption verwendet werden.

      Screenshot der möglichen Konfigurationsdateiinhalte, die zum Deaktivieren von Kernelmodulen/Treibern verwendet werden.

      sudo vi /etc/modprobe.d/disable.conf
      

    Wichtig

    • Die Einträge, die Treiber deaktivieren, werden vom Linux-Betriebssystem definiert, nicht durch Microsoft.
    • Ersetzen Sie disable.conf durch den entsprechenden Dateinamen, in dem die Hyper-V Treiber deaktiviert sind.
  4. Erstellen Sie das anfängliche RAMdisk-Image für den aktuell geladenen Kernel neu:

    • Für RHEL/SLES-basierte Bilder

      sudo dracut -f -v
      
    • Für Ubuntu/Debian-basierte Images

      sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  5. Nachdem die Änderungen angewendet wurden, verwenden Sie den az vm repair restore Befehl, um einen automatischen Austausch des Betriebssystemdatenträgers mit der ursprünglichen VM durchzuführen und das System neu zu starten.

Erstellen Sie immer eine Sicherung des ursprünglichen RAMdisk-Images, um das Rollback bei Bedarf zu vereinfachen.

Wenn das Problem immer noch nicht behoben ist, verweisen Sie auf Azure Linux-VM kann nicht gestartet werden und wechselt in den Dracut-Notfallmodus, um Dracut-Probleme zu untersuchen.

Nächste Schritte

Falls der spezifische Startfehler kein Hyper-V-Problem ist, lesen Sie Behandeln von Azure Linux Virtual Machines Startproblemen für weitere Problembehandlungsoptionen.