Felsöka problem med start och nätverk av virtuella Linux-datorer på grund av Hyper-V-drivrutinsassocierade fel
Gäller för: ✔️ Virtuella Linux-datorer
Azure körs på Hyper-V-hypervisor-programmet och Linux-system kräver att vissa Hyper-V-kernelmoduler körs på Azure. Dessa kernelmoduler paketeras i LIS-drivrutinerna (Linux Integration Services) för Hyper-V och Azure. Microsoft bidrar direkt till den överordnade Linux-kerneln.
I den här artikeln beskrivs flera villkor där en eller flera inaktiverade Hyper-V-drivrutiner kan leda till start- och nätverksproblem för virtuella Linux-datorer.
Förutsättningar
Kontrollera att seriekonsolen är aktiverad och funktionell på den virtuella Linux-datorn.
Så här identifierar du problem med Hyper-V-drivrutin som saknas
Om du vill ta reda på om den virtuella datorn inte kan starta på grund av saknade Hyper-V-drivrutiner använder du Azure CLI eller Azure Portal för att visa seriekonsolloggen för den virtuella datorn i startdiagnostikfönstret eller seriekonsolfönstret. Exempelutdata från fel visas i motsvarande avsnitt nedan.
Innan du felsöker
För att felsöka scenario 1: Hyper-V-drivrutinen för nätverket är inaktiverad och scenario 2: Mac-adressen för nätverkskort ändras eller matchar inte behöver du seriekonsolåtkomst för din virtuella Linux-dator.
Om du inte har åtkomst till seriekonsolen följer du offlinemetoden för att komma åt innehållet på den problematiska OS-disken från en virtuell räddningsdator. Åtkomst till Azure CLI eller Azure Cloud Shell krävs för offlinemetoden.
För att felsöka scenario 3: Andra Hyper-V-drivrutiner är inaktiverade är offlinemetoden det enda alternativet för att lösa problemet.
Scenario 1: Hyper-V-drivrutinen för nätverket är inaktiverad
Eftersom nätverkstjänsterna inte är tillgängliga kan du inte skydda Shell Protocol (SSH) på en virtuell dator, men du kan fortfarande logga in via seriekonsolen från Azure Portal. Du ser följande typer av fel i seriekonsolen eller den senaste serieloggen i fönstret Startdiagnostik i Azure Portal:
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.
Eller
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ösning 1: Aktivera Hyper-V-nätverksdrivrutin med seriekonsol
Få åtkomst till den virtuella datorns seriekonsol. Nätverken är nere, men inloggningsprompten är fortfarande tillgänglig.
Logga in på den virtuella datorn med rätt autentiseringsuppgifter.
Växla till rotkontot eller användarkontot med sudo-åtkomst.
Gå till katalogen /etc/modprobe.d och leta efter alla rader som inaktiverar hv_netvsc drivrutinen.
Identifiera filen som inaktiverar hv_netvsc drivrutinen och motsvarande radnummer genom att köra följande kommando:
grep -nr "hv_netvsc" /etc/modprobe.d/
Ändra motsvarande fil och kommentera ut eller ta bort hv_netvsc poster:
vi /etc/modprobe.d/disable.conf
Kommentar
- Posterna som inaktiverar drivrutiner definieras av Linux-operativsystemet, inte av Microsoft.
- Ersätt
disable.conf
med motsvarande filnamn där drivrutinen för hv_netvsc är inaktiverad.
Återskapa den första RAMdisk-avbildningen för den aktuella inlästa kerneln:
För RHEL/SLES-baserade bilder
# dracut -f -v
För Ubuntu/Debian-baserade bilder
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
Starta om den virtuella datorn.
Ta alltid en säkerhetskopia av den ursprungliga ursprungliga RAMdisk-avbildningen för att underlätta återställningen när det behövs.
För RHEL-baserade bilder:
# cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
För SLES-baserade bilder:
# cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
För Ubuntu/Debian-baserade bilder:
# cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
Lösning 2: Aktivera Hyper-V-nätverksdrivrutin offline
Använd az vm repair för att komma åt innehållet på den berörda OS-disken från en virtuell räddningsdator.
Montera och chroot till filsystemen på den anslutna OS-disken på den virtuella räddningsdatorn genom att följa chroot-instruktionerna.
När innehållet på den berörda OS-disken har använts följer du steg 4 och 5 i lösning 1: Aktivera Hyper-V-nätverksdrivrutin med seriekonsolen för att återaktivera drivrutinerna och återskapa den första RAMdisk-avbildningen.
Innan den första RAMdisk-avbildningen återskapas växlar du till chroot-miljön. Den fullständiga sökvägen till avbildningen måste anges.
När ändringarna har tillämpats utför du en automatisk växling av OS-diskar med den ursprungliga virtuella datorn och startar om systemet med hjälp
az vm repair restore
av kommandot .
Scenario 2: NIC MAC-adressen ändras eller matchar inte
Om MAC-adressen för nätverksgränssnittskortet ändras eller inte matchar i OS-konfigurationen kan du inte SSH till den virtuella datorn eftersom nätverkstjänster inte är tillgängliga. Du kan fortfarande logga in via seriekonsolen från Azure Portal. Fel som liknar dem i scenario 1: Nätverks-Hyper-V-drivrutinen är inaktiverad visas.
Om problemet kvarstår trots att Hyper-V-nätverksdrivrutinen är aktiverad använder du någon av följande lösningar för att verifiera OS NIC-konfigurationen och lösa problemet.
Lösning 1: Åtgärda NIC MAC-adressmatchningsfel med seriekonsol
Få åtkomst till den virtuella datorns seriekonsol. Nätverken är nere, men inloggningsprompten är fortfarande tillgänglig.
Logga in på den virtuella datorn med rätt autentiseringsuppgifter.
Växla till rotkontot eller användarkontot med sudo-åtkomst.
Gå till katalogen /etc/cloud/cloud.cfg.d .
Med tanke på att Linux-partnerbilder används öppnar och redigerar du följande filer:
- 91-azure_datasource.cfg för RHEL-baserad distribution.
- 90_dpkg.cfg för Debian- och Ubuntu-baserad distribution.
Om parametern
apply_network_config
är inställd på false anger du den till true. Om inget anges anges standardvärdet till true. Den här inställningen säkerställer att den nya MAC-adressen tillämpas på nätverkskonfigurationen vid nästa omstart.I allmänhet skulle en NIC MAC-adress bara ändras om ett nätverkskort tas bort eller läggs till av administratören eller ett nätverkskort uppdateras i serverdelen. Om nätverkskonfiguration via cloud-init inte önskas och parametern
apply_network_config
måste anges till false tar du bort filen /var/lib/cloud/instance/obj.pkl och startar om systemet.# rm /var/lib/cloud/instance/obj.pkl
När ändringarna har tillämpats startar du om systemet.
Lösning 2: Åtgärda NIC MAC-adressmatchning offline
- Använd kommandot az vm repair för att komma åt innehållet på den berörda OS-disken från en virtuell räddningsdator.
- Montera och chroot till filsystemen på den anslutna OS-disken på en virtuell räddningsdator korrekt genom att följa chroot-instruktionerna.
- När innehållet i kopian av den berörda OS-disken har använts följer du steg 4 till 7 i lösning 1: Åtgärda NIC MAC-adressmatchningsfel med seriekonsolen för att göra nätverksändringar eller rensa filen obj.pkl .
- När ändringarna har tillämpats använder du
az vm repair restore
kommandot för att utföra ett automatiskt os-diskbyte med den ursprungliga virtuella datorn och starta om systemet.
Scenario 3: Andra Hyper-V-drivrutiner är inaktiverade
Om du får startproblem med andra Hyper-V-drivrutiner kan du förmodligen inte SSH till en virtuell dator eftersom nätverkstjänster inte är tillgängliga. Du är nedsläppt till ett dracut-skal. Det här problemet kan visas via seriekonsolen från Azure Portal. Du kan se följande fel i seriekonsolen eller den senaste serieloggen i fönstret Startdiagnostik i Azure Portal:
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:/#
Eller
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ösning: Aktivera Hyper-V-drivrutiner
Om den virtuella datorn inte är tillgänglig på grund av att andra Hyper-V-drivrutiner har inaktiverats använder du en offlinemetod för att återaktivera drivrutinerna eftersom initramferna inte kan läsas in.
Använd kommandot az vm repair för att få åtkomst till innehållet på den problematiska OS-disken från en virtuell dator för räddning.
Montera och chroot till filsystemen på den anslutna OS-disken på en virtuell räddningsdator korrekt enligt chroot-instruktionerna.
Väl i chroot-miljön går du till katalogen /etc/modprobe.d och letar efter alla rader som kan inaktivera drivrutinen hv_utils, hv_vmbus, hv_storvsc eller hv_netvsc.
Kör följande kommando för att identifiera filen som inaktiverar drivrutinen hv_utils, hv_vmbus, hv_storvsc eller hv_netvsc och motsvarande radnummer.
egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
Ändra motsvarande fil och kommentera ut eller ta bort posterna hv_utils, hv_vmbus, hv_storvsc eller hv_netvsc. Posterna är oftast något av följande (eller båda):
vi /etc/modprobe.d/disable.conf
Viktigt!
- Posterna som inaktiverar drivrutiner definieras av Linux-operativsystemet, inte av Microsoft.
- Ersätt
disable.conf
med motsvarande filnamn där Hyper-V-drivrutinerna är inaktiverade.
Återskapa den första RAMdisk-avbildningen för den aktuella inlästa kerneln:
För RHEL/SLES-baserade bilder
# dracut -f -v
För Ubuntu/Debian-baserade bilder
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
När ändringarna har tillämpats använder du
az vm repair restore
kommandot för att utföra ett automatiskt os-diskbyte med den ursprungliga virtuella datorn och starta om systemet.
Ta alltid en säkerhetskopia av den ursprungliga ursprungliga RAMdisk-avbildningen för att underlätta återställningen om det behövs.
Om problemet fortfarande inte är löst kan du gå till Den virtuella Azure Linux-datorn kan inte startas och anger dracut emergency shell för att undersöka dracut-problem.
Nästa steg
Om det specifika startfelet inte är ett Hyper-V-problem kan du läsa Felsöka startfel för virtuella Azure Linux-datorer för ytterligare felsökningsalternativ.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.