Hyper-V에서 Linux 가상 머신에 kdump 또는 kexec를 사용할 수 없습니다.

이 문서에서는 Hyper-V의 Linux 가상 머신에 kdump 또는 kexec를 사용할 수 없는 문제에 대한 해결 방법을 제공합니다.

적용 대상: Windows Server 2012 R2, Windows Server 2008 R2 서비스 팩 1
원본 KB 번호: 2858695

증상

  • 사전 Windows Server 2012 R2

    다음과 같은 경우를 생각해볼 수 있습니다.

    • Hyper-V 역할이 설치된 사전 Windows Server 2012 R2 기반 컴퓨터가 있습니다.

    • 컴퓨터의 Hyper-V 가상 머신에 Linux를 설치합니다.

    • Linux 가상 머신에서 kdump를 구성합니다.

      참고

      Linux 가상 머신에는 이미 Linux Integration Services 드라이버가 있습니다. 드라이버는 미리 빌드되거나 수동으로 설치할 수 있습니다.

      이 시나리오에서 Linux 가상 머신이 충돌하는 경우 Linux 커널의 코어 덤프 파일이 예상대로 생성되지 않습니다.

  • Windows Server 2012 R2

    다음과 같은 경우를 생각해볼 수 있습니다.

    • Windows Server 2012 R2 Hyper-V 호스트에 Linux 가상 머신이 있습니다.

    • 15개 이상의 vCPU가 Linux 가상 머신에 연결됩니다.

    • Linux 가상 머신에서 kdump를 구성합니다.

      이 시나리오에서는 kdump가 작동하지 않으며 프로세스가 응답을 중지하기 때문에 크래시 덤프가 만들어지지 않습니다(중단).

원인

이 문제는 Hyper-V가 가상 머신 내에서 실행되는 동일한 가상 드라이버에서 두 개의 동시 연결을 호스트할 수 없기 때문에 발생합니다.

Linux Integration Services 가상 스토리지 드라이버(storvsc라고도 함)를 사용하는 Linux 가상 머신에서 kdump를 구성하면 kexec 커널이 동일한 드라이버를 사용하도록 구성됩니다. Linux 가상 머신이 충돌하는 경우 kexec 커널에서 호스트되는 가상 스토리지 드라이버는 Hyper-V 스토리지 공급자에 대한 연결을 열려고 시도합니다. 그러나 Hyper-V는 충돌한 Linux 가상 머신에서 동일한 스토리지 드라이버에 대한 기존 연결로 인해 새 연결을 설정하지 못합니다. 따라서 kexec 커널은 크래시된 Linux 가상 머신의 코어를 덤프할 수 없습니다.

해결 방법

이 문제를 resolve 표준 Linux 스토리지 드라이버를 사용하여 kexec 커널을 구성합니다. 이 구성은 Linux 가상 머신에서 kdump 기능을 사용하도록 설정한 후에 수행해야 합니다. 기본 아이디어는 Linux Integration Services 스토리지 드라이버를 끈 다음 적절한 구성 파일의 prefer_ms_hyper_v 매개 변수를 사용하여 kexec 커널 내에서 표준 Linux 스토리지 드라이버를 사용하도록 설정하는 것입니다.

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 배포판에 대해 매개 변수를 설정하는 방법을 설명합니다.

RHEL(Red Hat Enterprise Linux)

RHEL 5.9에서는 커널 명령줄 인수를 통해 prefer_ms_hyper_v 매개 변수를 RHEL 5.9 커널에 기본 제공되는 ide_core 모듈에 전달해야 합니다. 기본적으로 이 매개 변수는 1로 초기화되며, Hyper-V 환경에서 실행되는 경우 Linux 가상 머신이 ide_core 모듈을 사용하지 않도록 합니다. 관리자는 kexec 커널 부팅 프로세스 중에 ide_core 드라이버가 작동하도록 prefer_ms_hyper_v 매개 변수 값을 0으로 설정해야 합니다.

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 추가합니다. kdump 명령줄 옵션에 대한 prefer_ms_hyper_v=0:

do_start {}
{
    ....  
    ....  
    APPEND="$APPEND kdump_needed maxcpus=1 irqpoll reset_devices ata_piix.prefer_ms_hyperv=0"  
    ...  
}

SLES(SUSE Linux Enterprise Server) 11 SP2(x)

SLES 11 SP2(x) 배포에서는 prefer_ms_hyper_v 매개 변수를 ata_piix 드라이버에 전달해야 합니다. 다음과 같이 /etc/sysconfig/kdump 파일의 내용을 수정하여 이 작업을 수행할 수 있습니다.

KDUMP_COMMANDLINE_APPEND ata_piix.prefer_ms_hyper_v=0을 추가합니다.

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

필요한 편집 후 /etc/sysconfig/kdump 파일은 다음과 같습니다.

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

추가 정보

KDUMP는 Linux 배포판에서 제안하는 표준 방식으로 구성해야 합니다.

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.