Не удается использовать kdump или kexec для виртуальных машин Linux в Hyper-V
В этой статье описывается решение проблемы, из-за которой kdump или kexec нельзя использовать для виртуальных машин Linux в Hyper-V.
Область применения: Windows Server 2012 R2, Windows Server 2008 R2 с пакетом обновления 1 (SP1)
Исходный номер базы знаний: 2858695
Симптомы
Предварительная Windows Server 2012 R2
Рассмотрим следующий сценарий.
У вас есть компьютер с предварительной Windows Server 2012 R2 с установленной ролью Hyper-V.
Linux устанавливается на виртуальной машине Hyper-V на компьютере.
Вы настраиваете kdump на виртуальной машине Linux.
Примечание.
На виртуальной машине Linux уже есть драйверы служб Linux Integration Services. Драйверы можно предварительно создать или установить вручную.
В этом сценарии при сбое виртуальной машины Linux файл дампа ядра из ядра Linux создается не должным образом.
Windows Server 2012 R2
Рассмотрим следующий сценарий.
У вас есть виртуальные машины Linux на узле Windows Server 2012 R2 Hyper-V.
К виртуальной машине Linux подключено 15 или более виртуальных ЦП.
Вы настраиваете kdump на виртуальной машине Linux.
В этом сценарии kdump не работает, и аварийный дамп не создается, так как процесс перестает отвечать (зависает).
Причина
Эта проблема возникает из-за того, что Hyper-V не может разместить два одновременных подключения из одного искусственного драйвера, который выполняется внутри виртуальной машины.
Если kdump настроен на виртуальной машине Linux с использованием драйвера искусственного хранилища служб Linux Integration Services (также известного как storvsc), ядро kexec настраивается для использования того же драйвера. В случае сбоя виртуальной машины Linux драйвер искусственного хранилища, размещенный в ядре kexec, пытается открыть подключение к поставщику хранилища Hyper-V. Однако Hyper-V не удается установить новое подключение из-за существующего подключения к тому же драйверу хранилища на сбое виртуальной машины Linux. Таким образом, ядро kexec не может дампа ядра для сбойной виртуальной машины Linux.
Разрешение
Чтобы устранить эту проблему, настройте ядро kexec с помощью стандартного драйвера хранилища Linux. Эту настройку необходимо выполнить после включения функции kdump на виртуальной машине Linux. Основная идея заключается в том, чтобы отключить драйвер хранилища Служб Linux Integration Services, а затем включить стандартный драйвер хранилища Linux в ядре kexec с помощью параметра prefer_ms_hyper_v в соответствующем файле конфигурации.
Параметр prefer_ms_hyper_v можно использовать для управления поведением стандартного драйвера хранилища Linux. Если для этого параметра задано значение 1, а виртуальная машина Linux работает на Hyper-V, стандартный драйвер хранилища Linux отключает себя и позволяет драйверу хранилища Служб Linux Integration Services управлять устройствами хранения. Если задать для параметра prefer_ms_hyper_v значение 0, можно использовать стандартный драйвер хранилища Linux. Так как стандартному драйверу хранилища Linux не требуется подключение к Hyper-V, ядро kexec может дамп ядра.
Различные дистрибутивы Linux имеют несколько разные механизмы указания значения prefer_ms_hyper_v. В следующем разделе описывается, как можно задать параметр для нескольких популярных дистрибутивов Linux.
Red Hat Enterprise Linux (RHEL)
В RHEL 5.9 необходимо передать параметр prefer_ms_hyper_v через аргумент командной строки ядра в модуль ide_core , встроенный в ядро RHEL 5.9. По умолчанию этот параметр инициализирован в значение 1, что приводит к тому, что виртуальная машина Linux избегает использования модуля ide_core, если она выполняется в среде Hyper-V. Администраторы должны задать для параметра prefer_ms_hyper_v значение 0, чтобы драйвер ide_core стал работать во время загрузки ядра kexec.
В RHEL 6.4 необходимо передать параметр prefer_ms_hyper_v в модуль драйвера ata_piix .
Для этого измените содержимое файла /etc/kdump.conf. См . 11.10. Запрет загрузки драйверов ядра для kdump для получения дополнительных сведений.
Ubuntu 12.04(.x)
В Ubuntu 12.04(. x), необходимо передать параметр prefer_ms_hyper_v драйверу ata_piix. Это можно сделать, изменив содержимое файла /etc/init.d/kdump.
Чтобы изменить содержимое файла /etc/init.d/kdump, добавьте ata_piix. prefer_ms_hyper_v=0 к параметрам командной строки kdump:
do_start {}
{
....
....
APPEND="$APPEND kdump_needed maxcpus=1 irqpoll reset_devices ata_piix.prefer_ms_hyperv=0"
...
}
SUSE Linux Enterprise Server (SLES) 11 с пакетом обновления 2 (x)
В дистрибутивах SLES 11 SP2(x) необходимо передать параметр prefer_ms_hyper_v драйверу ata_piix. Это можно сделать, изменив содержимое файла /etc/sysconfig/kdump следующим образом:
Добавьте ata_piix.prefer_ms_hyper_v=0 в KDUMP_COMMANDLINE_APPEND:
KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"
После необходимых изменений файл /etc/sysconfig/kdump выглядит следующим образом:
KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"
Дополнительная информация
KDUMP следует настроить стандартным образом, предлагаемым дистрибутивами Linux.
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по