Устранение неполадок при загрузке виртуальной машины Linux и сети из-за ошибок, связанных с драйвером Hyper-V

Область применения: ✔️ виртуальные машины Linux

Azure выполняется в гипервизоре Hyper-V, и для систем Linux требуются определенные модули ядра Hyper-V для запуска в Azure. Эти модули ядра объединяются в драйверы Служб Linux Integration Services (LIS) для Hyper-V и Azure. Корпорация Майкрософт вносит их непосредственно в вышестоящем ядре Linux.

В этой статье рассматривается несколько условий, когда один или несколько отключенных драйверов Hyper-V могут привести к проблемам загрузки и сети виртуальной машины Linux.

Необходимые компоненты

Убедитесь, что последовательная консоль включена и работает на виртуальной машине Linux.

Как определить отсутствие проблемы с драйвером Hyper-V

Чтобы определить, не удалось ли загрузить виртуальную машину из-за отсутствия драйверов Hyper-V, используйте Azure CLI или портал Azure для просмотра журнала последовательной консоли виртуальной машины в области загрузки диагностика или последовательной консоли. Примеры выходных данных сбоев отображаются в соответствующих разделах ниже.

Перед устранением неполадок

Чтобы устранить неполадки с сценарием 1. Драйвер Hyper-V сети отключен и сценарий 2. Mac-адрес сетевого адаптера изменен или не соответствует, для виртуальной машины Linux требуется последовательный доступ к консоли .

Если у вас нет последовательного доступа к консоли, выполните автономный подход , чтобы получить доступ к содержимому проблемного диска ОС с виртуальной машины спасения. Для автономного подхода требуется доступ к Azure CLI или Azure Cloud Shell .

Чтобы устранить неполадки с сценарием 3. Другие драйверы Hyper-V отключены, автономный подход является единственным вариантом устранения проблемы.

Сценарий 1. Драйвер Hyper-V сети отключен

Так как сетевые службы недоступны, не удается защитить протокол Shell (SSH) на виртуальной машине, но вы по-прежнему можете войти через последовательную консоль из портал Azure. В последовательной консоли или последнем последовательном журнале в области диагностики загрузки в портал Azure отображаются следующие типы ошибок:

 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

Решение 1. Включение сетевого драйвера Hyper-V с помощью последовательной консоли

  1. Доступ к последовательной консоли виртуальной машины. Сеть отключена, но запрос на вход по-прежнему доступен.

  2. Войдите на виртуальную машину с правильными учетными данными.

  3. Переключитесь на корневую учетную запись или учетную запись пользователя с доступом sudo.

  4. Перейдите в каталог /etc/modprobe.d и найдите любую строку, которая отключает драйвер hv_netvsc.

    1. Определите файл, который отключает драйвер hv_netvsc и соответствующие номера строк, выполнив следующую команду:

      grep -nr "hv_netvsc" /etc/modprobe.d/
      
    2. Измените соответствующий файл и закомментируйте или удалите записи hv_netvsc:

      Снимок экрана: возможное содержимое файла конфигурации, используемое для отключения сетевых драйверов.

      vi /etc/modprobe.d/disable.conf
      

      Примечание.

      • Записи, отключающие драйверы, определяются операционной системой Linux, а не корпорацией Майкрософт.
      • Замените disable.conf соответствующим именем файла, в котором отключен драйвер hv_netvsc.
  5. Перестройте исходный образ RAMdisk для загруженного ядра:

    • Для образов на основе RHEL/SLES

      # dracut -f -v
      
    • Для образов на основе Ubuntu и Debian

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  6. Перезагрузите виртуальную машину.

Всегда создавайте резервную копию исходного исходного образа RAMdisk, чтобы упростить откат при необходимости.

  • Для образов на основе RHEL:

    # cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
    
  • Для образов на основе SLES:

    # cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
    
  • Для образов на основе Ubuntu и Debian:

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

Решение 2. Включение сетевого драйвера Hyper-V в автономном режиме

  1. Используйте az vm repair , чтобы получить доступ к содержимому затронутого диска ОС из виртуальной машины спасения.

  2. Подключите и chroot к файловой системе подключенного диска ОС на виртуальной машине спасения, выполнив инструкции chroot.

  3. После доступа к содержимому затронутого диска ОС выполните шаги 4 и 5 в решении 1. Включите сетевой драйвер Hyper-V с помощью последовательной консоли для повторной активации драйверов и перестроения исходного образа RAMdisk.

    Перед перестроением исходного образа RAMdisk переключитесь на среду chroot. Полный путь к изображению должен быть предоставлен.

  4. После применения изменений выполните автоматическую переключение диска ОС с исходной виртуальной машиной и перезагрузите систему с помощью az vm repair restore команды.

Сценарий 2. Mac-адрес сетевого адаптера изменен или не соответствует

Если MAC-адрес карты сетевого интерфейса изменен или не соответствует конфигурации ОС, вы не сможете использовать SSH на виртуальную машину, так как сетевые службы недоступны. Вы по-прежнему можете войти через последовательную консоль из портал Azure. Отображаются ошибки, аналогичные ошибкам в сценарии 1. Отключается драйвер Hyper-V сети.

Если проблема продолжается, даже если сетевой драйвер Hyper-V включен, используйте одно из следующих решений для проверки конфигурации сетевого адаптера ОС и устранения этой проблемы.

Решение 1. Исправление несоответствия MAC-адреса сетевого адаптера с помощью последовательной консоли

  1. Доступ к последовательной консоли виртуальной машины. Сеть отключена, но запрос на вход по-прежнему доступен.

  2. Войдите на виртуальную машину с правильными учетными данными.

  3. Переключитесь на корневую учетную запись или учетную запись пользователя с доступом sudo.

  4. Перейдите в каталог /etc/cloud/cloud.cfg.d .

  5. Учитывая использование образов партнеров Linux, откройте и измените следующие файлы:

    • 91-azure_datasource.cfg для распределения на основе RHEL.
    • 90_dpkg.cfg для дистрибутива На основе Debian и Ubuntu.
  6. apply_network_config Если параметр имеет значение false, установите для него значение true. Если ничего не указано, значение по умолчанию имеет значение true. Этот параметр гарантирует, что новый MAC-адрес применяется к конфигурации сети при следующей перезагрузке.

  7. Как правило, MAC-адрес сетевого адаптера изменится только в том случае, если сетевой адаптер удаляется или добавляется администратором или сетевым адаптером в серверной части. Если конфигурация сети через cloud-init не требуется, и apply_network_config параметру необходимо задать значение false, удалите файл /var/lib/cloud/instance/obj.pkl и перезагрузите систему.

    # rm /var/lib/cloud/instance/obj.pkl
    
  8. После применения изменений перезапустите систему.

Решение 2. Исправление несоответствия MAC-адреса сетевого адаптера в автономном режиме

  1. Используйте команду az vm repair, чтобы получить доступ к содержимому затронутого диска ОС из спасательной виртуальной машины.
  2. Подключите и chroot к файловой системе подключенного диска ОС в виртуальной машине спасения, выполнив инструкции chroot.
  3. После доступа к содержимому копии затронутого диска ОС выполните действия 4–7 в решении 1. Исправление несоответствия MAC-адресов сетевого адаптера с помощью последовательной консоли для внесения изменений в сеть или очистки файла obj.pkl .
  4. После применения изменений используйте az vm repair restore команду для автоматического переключения дисков ОС с исходной виртуальной машиной и перезагрузки системы.

Сценарий 3. Другие драйверы Hyper-V отключены

Если у вас возникли проблемы с загрузкой других драйверов Hyper-V, скорее всего, не удается выполнить SSH на виртуальную машину, так как сетевые службы недоступны. Ты удаляешься в оболочку dracut. Эту проблему можно просмотреть с помощью последовательной консоли из портал Azure. Следующие ошибки можно увидеть в последовательной консоли или последнем последовательном журнале в области диагностики загрузки в портал Azure:

 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)

Решение. Включение драйверов Hyper-V

Если виртуальная машина недоступна из-за отключения других драйверов Hyper-V, используйте автономный подход для повторной записи драйверов, так как initramfs нельзя загрузить.

  1. Используйте команду az vm repair, чтобы получить доступ к содержимому проблемного диска ОС из спасательной виртуальной машины.

  2. Подключите и chroot к файловой системе подключенного диска ОС в виртуальной машине спасения правильно, следуя инструкциям chroot.

  3. В среде chroot перейдите в каталог /etc/modprobe.d и найдите любую строку, которая может отключить драйвер hv_utils, hv_vmbus, hv_storvsc или драйвер hv_netvsc.

    1. Выполните следующую команду, чтобы определить файл, который отключает hv_utils, hv_vmbus, hv_storvsc или драйвер hv_netvsc и соответствующий номер строки.

      egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
      
    2. Измените соответствующий файл и закомментируйте или удалите записи hv_utils, hv_vmbus, hv_storvsc или hv_netvsc. Записи чаще всего являются одним из следующих (или обоих):

      Снимок экрана: возможное содержимое файла конфигурации, используемое для отключения модулей и драйверов ядра с помощью параметра установки.

      Снимок экрана: возможное содержимое файла конфигурации, используемое для отключения модулей и драйверов ядра.

      vi /etc/modprobe.d/disable.conf
      

    Внимание

    • Записи, отключающие драйверы, определяются операционной системой Linux, а не корпорацией Майкрософт.
    • Замените disable.conf соответствующим именем файла, в котором отключены драйверы Hyper-V.
  4. Перестройте исходный образ RAMdisk для загруженного ядра:

    • Для образов на основе RHEL/SLES

      # dracut -f -v
      
    • Для образов на основе Ubuntu и Debian

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  5. После применения изменений используйте az vm repair restore команду для автоматического переключения дисков ОС с исходной виртуальной машиной и перезагрузки системы.

Всегда создайте резервную копию исходного исходного образа RAMdisk, чтобы упростить откат при необходимости.

Если проблема по-прежнему не устранена, обратитесь к виртуальной машине Linux Azure, не загрузив и введя dracut экстренную оболочку для изучения проблем с дрейкутом.

Следующие шаги

Если конкретная ошибка загрузки не является проблемой Hyper-V, см. статью "Устранение неполадок с Виртуальные машины загрузкой Azure Linux" для дальнейших параметров устранения неполадок.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или помощь, создайте запрос на поддержку или попросите сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.