Устранение неполадок при загрузке виртуальной машины 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 с помощью последовательной консоли
Доступ к последовательной консоли виртуальной машины. Сеть отключена, но запрос на вход по-прежнему доступен.
Войдите на виртуальную машину с правильными учетными данными.
Переключитесь на корневую учетную запись или учетную запись пользователя с доступом sudo.
Перейдите в каталог /etc/modprobe.d и найдите любую строку, которая отключает драйвер hv_netvsc.
Определите файл, который отключает драйвер hv_netvsc и соответствующие номера строк, выполнив следующую команду:
grep -nr "hv_netvsc" /etc/modprobe.d/
Измените соответствующий файл и закомментируйте или удалите записи hv_netvsc:
vi /etc/modprobe.d/disable.conf
Примечание.
- Записи, отключающие драйверы, определяются операционной системой Linux, а не корпорацией Майкрософт.
- Замените
disable.conf
соответствующим именем файла, в котором отключен драйвер hv_netvsc.
Перестройте исходный образ RAMdisk для загруженного ядра:
Для образов на основе RHEL/SLES
# dracut -f -v
Для образов на основе Ubuntu и Debian
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
Перезагрузите виртуальную машину.
Всегда создавайте резервную копию исходного исходного образа 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 в автономном режиме
Используйте az vm repair , чтобы получить доступ к содержимому затронутого диска ОС из виртуальной машины спасения.
Подключите и chroot к файловой системе подключенного диска ОС на виртуальной машине спасения, выполнив инструкции chroot.
После доступа к содержимому затронутого диска ОС выполните шаги 4 и 5 в решении 1. Включите сетевой драйвер Hyper-V с помощью последовательной консоли для повторной активации драйверов и перестроения исходного образа RAMdisk.
Перед перестроением исходного образа RAMdisk переключитесь на среду chroot. Полный путь к изображению должен быть предоставлен.
После применения изменений выполните автоматическую переключение диска ОС с исходной виртуальной машиной и перезагрузите систему с помощью
az vm repair restore
команды.
Сценарий 2. Mac-адрес сетевого адаптера изменен или не соответствует
Если MAC-адрес карты сетевого интерфейса изменен или не соответствует конфигурации ОС, вы не сможете использовать SSH на виртуальную машину, так как сетевые службы недоступны. Вы по-прежнему можете войти через последовательную консоль из портал Azure. Отображаются ошибки, аналогичные ошибкам в сценарии 1. Отключается драйвер Hyper-V сети.
Если проблема продолжается, даже если сетевой драйвер Hyper-V включен, используйте одно из следующих решений для проверки конфигурации сетевого адаптера ОС и устранения этой проблемы.
Решение 1. Исправление несоответствия MAC-адреса сетевого адаптера с помощью последовательной консоли
Доступ к последовательной консоли виртуальной машины. Сеть отключена, но запрос на вход по-прежнему доступен.
Войдите на виртуальную машину с правильными учетными данными.
Переключитесь на корневую учетную запись или учетную запись пользователя с доступом sudo.
Перейдите в каталог /etc/cloud/cloud.cfg.d .
Учитывая использование образов партнеров Linux, откройте и измените следующие файлы:
- 91-azure_datasource.cfg для распределения на основе RHEL.
- 90_dpkg.cfg для дистрибутива На основе Debian и Ubuntu.
apply_network_config
Если параметр имеет значение false, установите для него значение true. Если ничего не указано, значение по умолчанию имеет значение true. Этот параметр гарантирует, что новый MAC-адрес применяется к конфигурации сети при следующей перезагрузке.Как правило, MAC-адрес сетевого адаптера изменится только в том случае, если сетевой адаптер удаляется или добавляется администратором или сетевым адаптером в серверной части. Если конфигурация сети через cloud-init не требуется, и
apply_network_config
параметру необходимо задать значение false, удалите файл /var/lib/cloud/instance/obj.pkl и перезагрузите систему.# rm /var/lib/cloud/instance/obj.pkl
После применения изменений перезапустите систему.
Решение 2. Исправление несоответствия MAC-адреса сетевого адаптера в автономном режиме
- Используйте команду az vm repair, чтобы получить доступ к содержимому затронутого диска ОС из спасательной виртуальной машины.
- Подключите и chroot к файловой системе подключенного диска ОС в виртуальной машине спасения, выполнив инструкции chroot.
- После доступа к содержимому копии затронутого диска ОС выполните действия 4–7 в решении 1. Исправление несоответствия MAC-адресов сетевого адаптера с помощью последовательной консоли для внесения изменений в сеть или очистки файла obj.pkl .
- После применения изменений используйте
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 нельзя загрузить.
Используйте команду az vm repair, чтобы получить доступ к содержимому проблемного диска ОС из спасательной виртуальной машины.
Подключите и chroot к файловой системе подключенного диска ОС в виртуальной машине спасения правильно, следуя инструкциям chroot.
В среде chroot перейдите в каталог /etc/modprobe.d и найдите любую строку, которая может отключить драйвер hv_utils, hv_vmbus, hv_storvsc или драйвер hv_netvsc.
Выполните следующую команду, чтобы определить файл, который отключает hv_utils, hv_vmbus, hv_storvsc или драйвер hv_netvsc и соответствующий номер строки.
egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
Измените соответствующий файл и закомментируйте или удалите записи hv_utils, hv_vmbus, hv_storvsc или hv_netvsc. Записи чаще всего являются одним из следующих (или обоих):
vi /etc/modprobe.d/disable.conf
Внимание
- Записи, отключающие драйверы, определяются операционной системой Linux, а не корпорацией Майкрософт.
- Замените
disable.conf
соответствующим именем файла, в котором отключены драйверы Hyper-V.
Перестройте исходный образ RAMdisk для загруженного ядра:
Для образов на основе RHEL/SLES
# dracut -f -v
Для образов на основе Ubuntu и Debian
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
После применения изменений используйте
az vm repair restore
команду для автоматического переключения дисков ОС с исходной виртуальной машиной и перезагрузки системы.
Всегда создайте резервную копию исходного исходного образа RAMdisk, чтобы упростить откат при необходимости.
Если проблема по-прежнему не устранена, обратитесь к виртуальной машине Linux Azure, не загрузив и введя dracut экстренную оболочку для изучения проблем с дрейкутом.
Следующие шаги
Если конкретная ошибка загрузки не является проблемой Hyper-V, см. статью "Устранение неполадок с Виртуальные машины загрузкой Azure Linux" для дальнейших параметров устранения неполадок.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или помощь, создайте запрос на поддержку или попросите сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.