Не удается использовать 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.

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

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