Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: ✔️ maszyny wirtualne z systemem Linux
Podsumowanie
Azure działa w funkcji hypervisor Hyper-V, a systemy Linux wymagają uruchomienia niektórych modułów jądra Hyper-V w Azure. Te moduły jądra są powiązane ze sterownikami usług Linux Integration Services (LIS) dla Hyper-V i Azure. Microsoft przyczynia się 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 Hyper-V może prowadzić do problemów z rozruchem i siecią maszyny wirtualnej z systemem Linux.
Wymagania wstępne
Upewnij się, że konsola szeregowa jest włączona i funkcjonalna na maszynie wirtualnej z systemem Linux.
Jak zidentyfikować problem braku sterownika Hyper-V
Aby ustalić, czy rozruch maszyny wirtualnej nie powiedzie się z powodu braku sterowników Hyper-V, użyj Azure CLI lub portalu Azure, aby wyświetlić dziennik konsoli szeregowej maszyny wirtualnej w okienku diagnostyki rozruchu lub 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ć problemy z Scenariusz 1: Sterownik Hyper-V sieci jest wyłączony i Scenariusz 2: Adres sterowania dostępem do mediów (MAC) karty interfejsu sieciowego został zmieniony lub nie pasuje, potrzebujesz dostępu do konsoli szeregowej dla maszyny wirtualnej z systemem Linux.
Jeśli nie masz dostępu do konsoli szeregowej, postępuj zgodnie z metodą offline, aby uzyskać dostęp do zawartości problematycznego dysku systemu operacyjnego z maszyny wirtualnej w trybie ratunkowym. W przypadku podejścia offline wymagany jest dostęp do Azure CLI lub Azure Cloud Shell.
Aby rozwiązać problemy z Scenario 3: Inne sterowniki Hyper-V są wyłączone, to podejście offline jest jedyną opcją rozwiązania problemu.
Scenariusz 1. Sterownik Hyper-V sieci jest wyłączony
Ponieważ usługi sieciowe są niedostępne, nie możesz nawiązać połączenia Secure Shell Protocol (SSH) z maszyną wirtualną, ale nadal możesz zalogować się za pośrednictwem konsoli z portalu Azure. W Boot Diagnostics okienku w portalu Azure w konsoli szeregowej lub w najnowszym dzienniku szeregowym są wyświetlane 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.
Or
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 sieciowego Hyper-V przy użyciu konsoli szeregowej
Uzyskaj dostęp do konsoli szeregowej maszyny wirtualnej. Sieć nie działa, ale monit logowania jest nadal dostępny.
Zaloguj się do maszyny wirtualnej przy użyciu poprawnych danych uwierzytelniających.
Przejdź do konta głównego lub konta użytkownika z dostępem sudo.
Przejdź do katalogu /etc/modprobe.d i poszukaj dowolnego wiersza, który wyłącza sterownik hv_netvsc.
Zidentyfikuj plik, który wyłącza sterownik hv_netvsc i odpowiednie numery wierszy, wykonując następujące polecenie:
sudo grep -nr "hv_netvsc" /etc/modprobe.d/Zmodyfikuj odpowiedni plik i zakomentuj lub usuń wpisy hv_netvsc:
sudo vi /etc/modprobe.d/disable.confUwaga
- Wpisy wyłączające sterowniki są definiowane przez system operacyjny Linux, a nie przez Microsoft.
- Zastąp "
disable.conf" odpowiednią nazwą pliku, w którym sterownik hv_netvsc jest wyłączony.
Odbuduj początkowy obraz RAMdisk dla aktualnie załadowanego jądra:
W przypadku obrazów opartych na systemie RHEL/SLES
sudo dracut -f -vW przypadku obrazów opartych na systemie Ubuntu/Debian
sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
Uruchom ponownie maszynę wirtualną.
Zawsze utwórz kopię zapasową oryginalnego początkowego obrazu RAMdisk, aby ułatwić wycofywanie w razie potrzeby.
W przypadku obrazów opartych na systemie RHEL:
sudo cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bakW przypadku obrazów opartych na SLES.
sudo cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bakW przypadku obrazów opartych na systemie Ubuntu/Debian:
sudo cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
Rozwiązanie 2. Włączanie sterownika sieciowego Hyper-V w trybie offline
Użyj az vm repair, aby uzyskać dostęp do zawartości problematycznego dysku systemu operacyjnego z wirtualnej maszyny ratunkowej.
Zamontuj systemy plików dołączonego dysku systemu operacyjnego na maszynie wirtualnej ratowniczej i wykonaj polecenie chroot, postępując zgodnie z instrukcjami chroot.
Po uzyskaniu dostępu do zawartości dysku systemu operacyjnego, którego dotyczy problem, wykonaj kroki 4 i 5 w Solution 1: Włącz sterownik sieci Hyper-V przy użyciu konsoli szeregowej aby ponownie włączyć sterowniki i ponownie skompilować początkowy obraz RAMdisk.
Przed odbudową początkowego obrazu RAMdisk przełącz się do środowiska chroot. Należy podać pełną ścieżkę obrazu.
Po zastosowaniu zmian wykonaj automatyczną wymianę dysku systemu operacyjnego z oryginalną maszyną wirtualną i uruchom ponownie system przy użyciu
az vm repair restorepolecenia .
Scenariusz 2: Adres kontroli dostępu do medium (MAC) interfejsu sieciowego został zmieniony lub nie jest zgodny
Jeśli adres MAC karty interfejsu sieciowego zostanie zmieniony lub nie pasuje do 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 się zalogować za pośrednictwem konsoli serial z portalu Azure. Wyświetlane są błędy podobne do tych w Scenario 1: Sterownik Hyper-V sieci jest wyłączony.
Jeśli problem będzie nadal występował, mimo że sterownik sieci Hyper-V jest włączony, użyj jednego z następujących rozwiązań, aby zweryfikować konfigurację karty sieciowej systemu operacyjnego i rozwiązać ten problem.
Rozwiązanie 1. Rozwiązywanie problemów z niezgodnością adresów MAC karty sieciowej przy użyciu konsoli szeregowej
Uzyskaj dostęp do konsoli szeregowej maszyny wirtualnej. Sieć nie działa, ale monit logowania jest nadal dostępny.
Zaloguj się do maszyny wirtualnej używając właściwych poświadczeń.
Przejdź do konta głównego lub konta użytkownika z dostępem sudo.
Przejdź do katalogu /etc/cloud/cloud.cfg.d .
Biorąc pod uwagę, że są używane obrazy partnerów systemu Linux, otwórz i zmodyfikuj następujące pliki:
- 91-azure_datasource.cfg dla dystrybucji opartej na systemie RHEL.
- 90_dpkg.cfg dla dystrybucji opartej na debianie i ubuntu.
apply_network_configJeśli parametr ma wartość false, ustaw go na wartość true. Jeśli nic nie zostanie określone, wartość domyślna zostanie ustawiona na true. To ustawienie zapewni zastosowanie nowego adresu MAC do konfiguracji sieci podczas następnego ponownego rozruchu.Ogólnie rzecz biorąc, adres MAC karty sieciowej zmieni się tylko wtedy, gdy karta sieciowa zostanie usunięta lub dodana przez administratora lub kartę sieciową zostanie zaktualizowana w zapleczu. Jeśli konfiguracja sieci za pośrednictwem pakietu cloud-init nie jest wymagana, a
apply_network_configparametr musi być ustawiony na wartość false, usuń plik /var/lib/cloud/instance/obj.pkl i uruchom ponownie system.sudo rm /var/lib/cloud/instance/obj.pklPo zastosowaniu zmian uruchom ponownie system.
Rozwiązanie 2. Naprawianie niezgodności adresów MAC karty sieciowej w trybie offline
- Użyj polecenia az vm repair, aby uzyskać dostęp do zawartości dotkniętego problemem dysku systemu operacyjnego z maszyny wirtualnej ratowniczej.
- Zamontuj i wykonaj chroot do systemów plików dołączonego dysku systemu operacyjnego na maszynie wirtualnej ratunkowej poprawnie, postępując zgodnie z instrukcjami chroot.
- Po uzyskaniu dostępu do zawartości kopii dotkniętego dysku systemu operacyjnego wykonaj kroki od 4 do 7 w rozwiązaniu 1: Napraw niezgodność adresów MAC karty sieciowej przy użyciu Konsoli szeregowej, aby dokonać zmian w ustawieniach sieci lub wyczyścić plik obj.pkl.
- Po zastosowaniu zmian użyj
az vm repair restorepolecenia , aby wykonać automatyczną zamianę dysku systemu operacyjnego z oryginalną maszyną wirtualną i ponownie uruchomić system.
Scenariusz 3. Inne sterowniki Hyper-V są wyłączone
Jeśli wystąpią problemy z rozruchem z innymi sterownikami Hyper-V, prawdopodobnie nie możesz nawiązać połączenia SSH z maszyną wirtualną, ponieważ usługi sieciowe są niedostępne. Zostałeś przeniesiony do powłoki dracut. Ten problem można zobaczyć za pośrednictwem konsoli szeregowej w portalu Azure. W panelu Boot Diagnostics w portalu Azure można zobaczyć następujące błędy w konsoli szeregowej lub najnowszym dzienniku szeregowym.
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:/#
Or
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 Hyper-V
Jeśli maszyna wirtualna jest niedostępna z powodu wyłączenia innych sterowników Hyper-V, użyj podejścia offline, aby przywrócić sterowniki, ponieważ nie można załadować initramfs.
Użyj polecenia az vm repair, aby uzyskać dostęp do zawartości problematycznego dysku systemu operacyjnego z maszyny wirtualnej ratowniczej.
Zamontuj systemy plików dołączonego dysku systemu operacyjnego i użyj polecenia chroot na maszynie wirtualnej ratowniczej, poprawnie wykonując instrukcje chroot.
Po przejściu do środowiska chroot przejdź do katalogu /etc/modprobe.d i poszukaj dowolnego wiersza, który może wyłączyć hv_utils, hv_vmbus, hv_storvsc lub sterownik hv_netvsc.
Uruchom następujące polecenie, aby zidentyfikować plik, który wyłącza sterownik hv_utils, hv_vmbus, hv_storvsc lub hv_netvsc oraz odpowiadający mu numer wiersza.
sudo egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/Zmodyfikuj odpowiedni plik i zakomentuj lub usuń wpisy hv_utils, hv_vmbus, hv_storvsc lub hv_netvsc. Wpisy są najczęściej jednym z następujących elementów (lub obydwoma):
sudo vi /etc/modprobe.d/disable.conf
Ważne
- Wpisy wyłączające sterowniki są definiowane przez system operacyjny Linux, a nie przez Microsoft.
- Zastąp
disable.confodpowiednią nazwą pliku, w której są wyłączone sterowniki Hyper-V.
Skompiluj początkowy obraz RAMdisk dla aktualnie załadowanego jądra:
W przypadku obrazów opartych na systemie RHEL/SLES
sudo dracut -f -vW przypadku obrazów opartych na systemie Ubuntu/Debian
sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
Po zastosowaniu zmian użyj
az vm repair restorepolecenia , aby wykonać automatyczną zamianę dysku systemu operacyjnego z oryginalną maszyną wirtualną i ponownie uruchomić system.
Zawsze wykonaj kopię zapasową oryginalnego obrazu początkowego RAMdisk, aby w razie potrzeby ułatwić przywrócenie.
Jeśli problem nadal nie został rozwiązany, odnieś się do maszyna wirtualna Azure z systemem Linux nie może się uruchomić i przechodzi do powłoki awaryjnej dracut, aby zbadać problemy z dracutem.
Następne kroki
Jeśli określony błąd rozruchu nie jest problemem z Hyper-V, zobacz Rozwiązywanie problemów z błędami rozruchu maszyn wirtualnych Azure Linux w celu uzyskania dalszych opcji rozwiązywania problemów.