Udostępnij za pośrednictwem


Rozwiązywanie problemów z rozruchem maszyny wirtualnej z systemem Linux i siecią z powodu błędów związanych ze sterownikami funkcji Hyper-V

Platforma Azure działa w funkcji hypervisor funkcji Hyper-V, a systemy Linux wymagają uruchamiania niektórych modułów jądra funkcji Hyper-V na platformie Azure. Te moduły jądra są dołączone do sterowników usługi Linux Integration Services (LIS) dla funkcji Hyper-V i platformy Azure. Firma Microsoft współtworzy je bezpośrednio do nadrzędnego jądra systemu Linux.

W tym artykule omówiono wiele warunków, w których co najmniej jeden wyłączony sterownik funkcji Hyper-V może prowadzić do problemów z rozruchem maszyny wirtualnej z systemem Linux i siecią.

Wymagania wstępne

Upewnij się, że konsola szeregowa jest włączona i działa na maszynie wirtualnej z systemem Linux.

Jak zidentyfikować problem z brakującym sterownikiem funkcji Hyper-V

Aby określić, czy rozruch maszyny wirtualnej nie powiedzie się z powodu braku sterowników funkcji Hyper-V, użyj interfejsu wiersza polecenia platformy Azure lub Azure Portal, aby wyświetlić dziennik konsoli szeregowej maszyny wirtualnej w okienku diagnostyki rozruchu lub w okienku konsoli szeregowej. Przykładowe dane wyjściowe błędów są wyświetlane w odpowiednich sekcjach poniżej.

Przed rozpoczęciem rozwiązywania problemów

Aby rozwiązać problem ze sterownikami funkcji Hyper-V scenariusza 1: sieć jest wyłączona , a scenariusz 2: adres mac karty sieciowej został zmieniony lub nie jest zgodny, musisz mieć dostęp do konsoli szeregowej dla maszyny wirtualnej z systemem Linux.

Jeśli nie masz dostępu do konsoli szeregowej, postępuj zgodnie z podejściem offline , aby uzyskać dostęp do zawartości problematycznego dysku systemu operacyjnego z maszyny wirtualnej ratowniczej. Dostęp do interfejsu wiersza polecenia platformy Azure lub usługi Azure Cloud Shell jest wymagany w przypadku podejścia w trybie offline.

Aby rozwiązać problem ze scenariuszem 3. Inne sterowniki funkcji Hyper-V są wyłączone, jedynym rozwiązaniem problemu jest podejście w trybie offline.

Scenariusz 1. Sterownik funkcji Hyper-V sieci jest wyłączony

Ponieważ usługi sieciowe są niedostępne, nie możesz nawiązać połączenia protokołu SSH (Secure Shell Protocol) z maszyną wirtualną, ale nadal możesz zalogować się za pośrednictwem konsoli szeregowej z Azure Portal. W konsoli szeregowej lub w najnowszym dzienniku szeregowym w okienku Diagnostyka rozruchu w Azure Portal są widoczne następujące typy błędów:

 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.

Lub

 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

Rozwiązanie 1. Włączanie sterownika sieci funkcji Hyper-V przy użyciu konsoli szeregowej

  1. Uzyskaj dostęp do konsoli szeregowej maszyny wirtualnej. Sieć nie działa, ale monit logowania jest nadal dostępny.

  2. Zaloguj się do maszyny wirtualnej przy użyciu prawidłowych poświadczeń.

  3. Przejdź do konta głównego lub konta użytkownika z dostępem sudo.

  4. Przejdź do katalogu /etc/modprobe.d i poszukaj dowolnego wiersza, który wyłącza sterownik hv_netvsc.

    1. Zidentyfikuj plik, który wyłącza sterownik hv_netvsc i odpowiednie numery wierszy, uruchamiając następujące polecenie:

      grep -nr "hv_netvsc" /etc/modprobe.d/
      
    2. Zmodyfikuj odpowiedni plik i komentarz lub usuń wpisy hv_netvsc:

      Zrzut ekranu przedstawiający możliwą zawartość pliku konfiguracji używaną do wyłączania sterowników sieciowych.

      vi /etc/modprobe.d/disable.conf
      

      Uwaga

      • Wpisy, które wyłączają sterowniki, są definiowane przez system operacyjny Linux, a nie przez firmę Microsoft.
      • Zastąp disable.conf ciąg odpowiednią nazwą pliku, w którym sterownik hv_netvsc jest wyłączony.
  5. Ponownie skompiluj początkowy obraz RAMdisk dla aktualnie załadowanego jądra:

    • Obrazy oparte na systemie RHEL/SLES

      # dracut -f -v
      
    • Obrazy oparte na systemie Ubuntu/Debian

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  6. Uruchom ponownie maszynę wirtualną.

Zawsze wykonaj kopię zapasową oryginalnego początkowego obrazu RAMdisk, aby ułatwić wycofywanie w razie potrzeby.

  • W przypadku obrazów opartych na systemie RHEL:

    # cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
    
  • W przypadku obrazów opartych na protokole SLES:

    # cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
    
  • W przypadku obrazów opartych na systemie Ubuntu/Debian:

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

Rozwiązanie 2. Włączanie sterownika sieci funkcji Hyper-V w trybie offline

  1. Użyj polecenia az vm repair , aby uzyskać dostęp do zawartości dysku systemu operacyjnego, którego dotyczy problem, z ratunkowej maszyny wirtualnej.

  2. Zainstaluj i chroot do systemów plików dołączonego dysku systemu operacyjnego na maszynie wirtualnej ratowniczej, postępjąc zgodnie z instrukcjami chroot.

  3. Po uzyskaniu dostępu do zawartości dysku systemu operacyjnego, którego dotyczy problem, wykonaj kroki 4 i 5 w rozwiązaniu 1: Włączanie sterownika sieci funkcji Hyper-V przy użyciu konsoli szeregowej w celu ponownego włączenia sterowników i ponownego skompilowania początkowego obrazu RAMdisk.

    Przed utworzeniem początkowego obrazu RAMdisk przejdź do środowiska chroot. Należy podano pełną ścieżkę obrazu.

  4. Po zastosowaniu zmian wykonaj automatyczną wymianę dysku systemu operacyjnego z oryginalną maszyną wirtualną i uruchom ponownie system za pomocą az vm repair restore polecenia .

Scenariusz 2. Adres MAC karty sieciowej został zmieniony lub niezgodny

Jeśli adres MAC karty interfejsu sieciowego zostanie zmieniony lub niezgodny w ramach konfiguracji systemu operacyjnego, nie będzie można nawiązać połączenia SSH z maszyną wirtualną, ponieważ usługi sieciowe są niedostępne. Nadal możesz zalogować się za pośrednictwem konsoli szeregowej z Azure Portal. Wyświetlane są błędy podobne do tych w scenariuszu 1: Sterownik funkcji Hyper-V sieci jest wyłączony .

Jeśli problem będzie się powtarzać, nawet jeśli sterownik sieci funkcji Hyper-V jest włączony, użyj jednego z następujących rozwiązań, aby zweryfikować konfigurację karty sieciowej systemu operacyjnego i rozwiązać problem.

Rozwiązanie 1. Naprawianie niezgodności adresu MAC karty sieciowej przy użyciu konsoli szeregowej

  1. Uzyskaj dostęp do konsoli szeregowej maszyny wirtualnej. Sieć nie działa, ale monit logowania jest nadal dostępny.

  2. Zaloguj się do maszyny wirtualnej przy użyciu prawidłowych poświadczeń.

  3. Przejdź do konta głównego lub konta użytkownika z dostępem sudo.

  4. Przejdź do katalogu /etc/cloud/cloud.cfg.d .

  5. Biorąc pod uwagę użycie obrazów partnerów systemu Linux , otwórz i edytuj następujące pliki:

    • 91-azure_datasource.cfg dla dystrybucji opartej na RHEL.
    • 90_dpkg.cfg dla dystrybucji opartej na Debianie i Ubuntu.
  6. apply_network_config Jeśli parametr jest ustawiony na wartość false, ustaw go na wartość true. Jeśli nic nie zostanie określone, wartość domyślna zostanie ustawiona na wartość true. To ustawienie zapewni, że nowy adres MAC zostanie zastosowany do konfiguracji sieci podczas następnego ponownego rozruchu.

  7. Ogólnie rzecz biorąc, adres MAC karty sieciowej zmieni się tylko wtedy, gdy karta sieciowa zostanie usunięta lub dodana przez administratora lub karta sieciowa zostanie zaktualizowana w zapleczu. Jeśli konfiguracja sieci za pośrednictwem funkcji cloud-init nie jest pożądana, a apply_network_config parametr musi być ustawiony na wartość false, usuń plik /var/lib/cloud/instance/obj.pkl i uruchom ponownie system.

    # rm /var/lib/cloud/instance/obj.pkl
    
  8. Po zastosowaniu zmian uruchom ponownie system.

Rozwiązanie 2. Rozwiązywanie problemów z niezgodnością adresu MAC karty sieciowej w trybie offline

  1. Użyj polecenia az vm repair , aby uzyskać dostęp do zawartości dysku systemu operacyjnego, którego dotyczy problem, z ratunkowej maszyny wirtualnej.
  2. Zainstaluj i chroot do systemów plików dołączonego dysku systemu operacyjnego na maszynie wirtualnej ratowania poprawnie, postępjąc zgodnie z instrukcjami chroot.
  3. Po uzyskaniu dostępu do zawartości kopii dysku systemu operacyjnego, którego dotyczy problem, wykonaj kroki od 4 do 7 w rozwiązaniu 1: Napraw niezgodność adresu MAC karty sieciowej, używając konsoli szeregowej , aby wprowadzić zmiany w sieci lub wyczyścić plik obj.pkl .
  4. Po zastosowaniu zmian użyj az vm repair restore polecenia , aby przeprowadzić automatyczną wymianę dysku systemu operacyjnego z oryginalną maszyną wirtualną i ponownie uruchomić system.

Scenariusz 3. Inne sterowniki funkcji Hyper-V są wyłączone

Jeśli występują problemy z rozruchem innych sterowników funkcji Hyper-V, prawdopodobnie nie możesz nawiązać połączenia SSH z maszyną wirtualną, ponieważ usługi sieciowe są niedostępne. Porzucono cię do powłoki dracut. Ten problem można wyświetlić za pośrednictwem konsoli szeregowej z Azure Portal. W konsoli szeregowej lub w najnowszym dzienniku szeregowym w okienku Diagnostyka rozruchu w Azure Portal są widoczne następujące błędy:

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

Lub

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)

Rozwiązanie: Włączanie sterowników funkcji Hyper-V

Jeśli maszyna wirtualna jest niedostępna z powodu wyłączenia innych sterowników funkcji Hyper-V, użyj podejścia offline, aby ponownie włączyć sterowniki, ponieważ nie można załadować plików initramf.

  1. Użyj polecenia az vm repair , aby uzyskać dostęp do zawartości problematycznego dysku systemu operacyjnego z maszyny wirtualnej ratowniczej.

  2. Zainstaluj i chroot do systemów plików dołączonego dysku systemu operacyjnego na maszynie wirtualnej ratownictwa poprawnie zgodnie z instrukcjami chroot.

  3. W środowisku chroot przejdź do katalogu /etc/modprobe.d i poszukaj dowolnego wiersza, który może wyłączyć sterownik hv_utils, hv_vmbus, hv_storvsc lub hv_netvsc.

    1. Uruchom następujące polecenie, aby zidentyfikować plik, który wyłącza sterownik hv_utils, hv_vmbus, hv_storvsc lub hv_netvsc i odpowiadający mu numer wiersza.

      egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
      
    2. Zmodyfikuj odpowiedni plik i komentarz lub usuń wpisy hv_utils, hv_vmbus, hv_storvsc lub hv_netvsc. Wpisy będą najczęściej dowolne z następujących (lub obu):

      Zrzut ekranu przedstawiający możliwą zawartość pliku konfiguracji używaną do wyłączania modułów/sterowników jądra przy użyciu opcji instalacji.

      Zrzut ekranu przedstawiający możliwą zawartość pliku konfiguracji używaną do wyłączania modułów/sterowników jądra.

      vi /etc/modprobe.d/disable.conf
      

    Ważna

    • Wpisy, które wyłączają sterowniki, są definiowane przez system operacyjny Linux, a nie przez firmę Microsoft.
    • Zastąp disable.conf ciąg odpowiednią nazwą pliku, w którym sterowniki funkcji Hyper-V są wyłączone.
  4. Ponownie skompiluj początkowy obraz RAMdisk dla aktualnie załadowanego jądra:

    • Obrazy oparte na systemie RHEL/SLES

      # dracut -f -v
      
    • Obrazy oparte na systemie Ubuntu/Debian

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  5. Po zastosowaniu zmian użyj az vm repair restore polecenia , aby przeprowadzić automatyczną wymianę dysku systemu operacyjnego z oryginalną maszyną wirtualną i ponownie uruchomić system.

Zawsze wykonaj kopię zapasową oryginalnego początkowego obrazu RAMdisk, aby w razie potrzeby ułatwić wycofywanie.

Jeśli problem nadal nie został rozwiązany, zapoznaj się z tematem Nie można uruchomić maszyny wirtualnej z systemem Linux na platformie Azure i wprowadzić powłokę awaryjną dracut w celu zbadania problemów z dracutem.

Następne kroki

Jeśli konkretny błąd rozruchu nie jest problemem z funkcją Hyper-V, zobacz Rozwiązywanie problemów z błędami rozruchu Virtual Machines systemu Azure Linux, aby uzyskać dalsze opcje rozwiązywania problemów.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.