Beheben von Problemen mit dem Start und netzwerk eines virtuellen Linux-Computers aufgrund von Hyper-V-Treibern

Gilt für: ✔️ Linux-VMs

Azure wird auf dem Hyper-V-Hypervisor ausgeführt, und Linux-Systeme erfordern bestimmte Hyper-V-Kernelmodule für die Ausführung auf Azure. 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 ein oder mehrere deaktivierte Hyper-V-Treiber zu Start- und Netzwerkproblemen mit virtuellen Linux-Computern (VM) führen können.

Voraussetzungen

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

Identifizieren des fehlenden Hyper-V-Treiberproblems

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

Vor Beginn der Problembehandlung

Zur Problembehandlung von Szenario 1: Der Hyper-V-Netzwerktreiber ist deaktiviert , und Szenario 2: Die NIC-Mac-Adresse wird geändert oder stimmt nicht überein, Sie benötigen serielle Konsolenzugriff für 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 in Szenario 3: Andere Hyper-V-Treiber sind deaktiviert, der Offlineansatz ist die einzige Möglichkeit, das Problem zu beheben.

Szenario 1: Der Hyper-V-Netzwerktreiber 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 die serielle Konsole über die Azure-Portal anmelden. Im Bereich "Startdiagnose" werden die folgenden Fehlertypen in der seriellen Konsole oder im bereich "Startdiagnose" 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:

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

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

      vi /etc/modprobe.d/disable.conf
      

      Notiz

      • Die Einträge, die Treiber deaktivieren, werden vom Linux-Betriebssystem definiert, nicht von 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

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

      # 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:

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

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

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

Lösung 2: Aktivieren des Hyper-V-Netzwerktreibers offline

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

  2. Bereitstellen und Chroot an die Dateisysteme des angefügten Betriebssystemdatenträgers in der Rettungs-VM, indem Sie chroot-Anweisungen befolgen.

  3. Nachdem auf den Inhalt des betroffenen Betriebssystemdatenträgers zugegriffen wurde, führen Sie die Schritte 4 und 5 in Lösung 1 aus : Aktivieren Sie den 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 NIC MAC-Adresse 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 die serielle Konsole über die Azure-Portal anmelden. Fehler, die den in Szenario 1 ähneln: Der Hyper-V-Netzwerktreiber wird deaktiviert .

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. Unter Berücksichtigung von Linux-Partnerimages werden die folgenden Dateien verwendet, geöffnet und bearbeitet:

    • 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.

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

Lösung 2: Beheben der NIC MAC-Adressübereinstimmung offline

  1. Verwenden Sie den Befehl "az vm repair ", um von einem virtuellen Rettungscomputer aus auf den Inhalt des betroffenen Betriebssystemdatenträgers zuzugreifen.
  2. Bereitstellen und Chroot an die Dateisysteme des angefügten Betriebssystemdatenträgers in einer wiederhergestellten VM ordnungsgemäß, 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-Adressübereinstimmung 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 serielle Konsole über die Azure-Portal angezeigt werden. Sie können die folgenden Fehler in der seriellen Konsole oder im neuesten seriellen Protokoll im Bereich "Startdiagnose" im Azure-Portal 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 nicht zugegriffen werden kann, da andere Hyper-V-Treiber deaktiviert werden, verwenden Sie einen Offlineansatz, um die Treiber erneut zu aktivieren, 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. Bereitstellen und Chroot an die Dateisysteme des angefügten Betriebssystemdatenträgers in einem virtuellen Rettungscomputer 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.

      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.

      vi /etc/modprobe.d/disable.conf
      

    Wichtig

    • Die Einträge, die Treiber deaktivieren, werden vom Linux-Betriebssystem definiert, nicht von Microsoft.
    • Ersetzen Sie den disable.conf 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

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

      # 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 weiterhin nicht behoben ist, verweisen Sie auf den virtuellen Azure Linux-Computer, der nicht gestartet werden kann, und wechselt in die Dracut-Notfallshell , um Dracut-Probleme zu untersuchen.

Nächste Schritte

Falls der spezifische Startfehler kein Hyper-V-Problem ist, lesen Sie die Problembehandlung bei Startfehlern bei virtuellen Azure Linux-Computern für weitere Problembehandlungsoptionen.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.