가상화 응용 프로그램이 작동하지 않을 때 어떻게 해야 합니까?

Windows 기계에 가상화 애플리케이션을 설치할 때 Hyper-V 또는 관련 서비스가 설치된 경우 종종 오류가 발생할 수 있습니다. 비-Hyper-V 가상화 애플리케이션에서 VM을 실행할 때 발생하는 오류는 심각한 문제를 야기할 수 있습니다. 이 블로그 글에서는 이러한 오류의 원인, 해결 방법 및 Hyper-V가 있는 컴퓨터에서 다른 가상화 애플리케이션을 실행하는 방법에 대해 설명합니다.

배경 및 작동 원리

Windows 기계에 VMware Workstation, VMware Player 또는 Oracle VirtualBox를 설치한 후 이러한 가상화 애플리케이션에서 VM을 시작할 때 오류가 발생할 수 있습니다. 이 오류는 해당 시간에 Hyper-V VM이 실행되지 않더라도 발생합니다. VMware Workstation 및 VirtualBox를 설치하고 VMware VM 및 VirtualBox VM을 동일한 컴퓨터에서 실행할 수 있지만 동시에 실행할 수는 없습니다. 이 문제를 Hyper-V와 함께 일어나게 하는 것은 무엇일까요? 더 자세히 살펴보겠습니다.

VMware Workstation, VMware Player 및 VirtualBox는 유형 2 하이퍼바이저이며, Hyper-V는 유형 1 하이퍼바이저입니다. 유형 2 하이퍼바이저는 하드웨어에서 실행 중인 운영 체제에 설치됩니다. 유형 1 하이퍼바이저는 하드웨어 위에 설치됩니다. 모든 하이퍼바이저는 프로세서 가상화 확장 기능이 필요하며, 이는 하드웨어 가상화를 위한 명령어 세트인 Intel VT-x 또는 AMD-V입니다. Windows 부팅시 Hyper-V가 가상화 확장을 제어합니다. Windows가 로드될 때 VMware Workstation 및 VirtualBox에 이러한 가상화 확장이 사용할 수 없습니다. 한 번에 하나의 소프트웨어 구성 요소만 Intel VT-x 또는 AMD-V를 사용할 수 있습니다.

이 불일치는 하이퍼-V로 인해 발생합니다. 하이퍼-V 역할이 활성화된 Windows 기기에 설치된 타입 2 하이퍼바이저에 가상화 확장이 노출되지 않기 때문입니다.

VMware Workstation 오류:

VMware Workstation 및 Hyper-V는 호환되지 않습니다. VMware Workstation을 실행하기 전에 시스템에서 Hyper-V 역할을 제거하십시오.

VMware Workstation 및 Device/Credential Guard는 호환되지 않습니다. Device/Credential Guard를 비활성화한 후 VMware Workstation을 실행할 수 있습니다.

VirtualBox 오류:

SYSTEM_SERVICE_EXCEPTION과 같은 BSOD

VT-x를 사용할 수 없습니다 (VER_VMX_NO_VMX). E_FAIL (0x80004005).

A VirtualBox VM works too slowly and uses the paravirtualisation (emulation) mode.

가장 흥미로운 상황은 사용자가 하이퍼-V를 설치하지 않았지만 VMware Workstation 또는 VirtualBox를 사용할 때 이전에 언급한 오류 중 하나를 만나는 경우입니다. 오류는 자동 Windows 업데이트가 활성화된 경우 발생합니다. 업데이트(Windows 10 v1607 및 Windows Server 2016부터의 적절한 Windows Server 버전)에서는 일부 새로운 하이퍼-V 관련 기능이 사용자 동의 없이 자동으로 설치되고 활성화됩니다. 이러한 기능은 Device Guard 및 Credential Guard입니다. Windows 업데이트는 알려진 취약점을 수정할 수 있지만 작동 중인 구성을 파괴하고 문제를 추가할 수 있습니다. 이것이 많은 사용자가 자동 업데이트를 좋아하지 않는 이유입니다.

Device Guard는 Windows의 보안 기능 집합입니다. 이 기능을 구현하는 아이디어는 악성 코드의 실행을 강화하는 것입니다. Device Guard는 Windows 10, Windows Server 2019 및 Windows Server 2019에서 사용할 수 있습니다. 주요 요구 사항은 네이티브 모드에서 실행되는 UEFI와 Secure Boot가 활성화되어 있어야 합니다.

Credential Guard는 악성 코드가 이미 실행 중인 경우에도 공격의 영향을 최소화하기 위한 기능으로, 시스템 및 사용자 비밀을 격리하여 침입을 더 어렵게 만듭니다.

가상 보안 모드 (VSM)는 프로세서 가상화 확장을 활용하여 메모리의 격리된 영역에서 데이터를 안전하게 보호하는 기능입니다. HVCI는 하이퍼바이저 보호 코드 무결성이며, LSA는 로컬 보안 권한자입니다.

가상화 기반 보안 (VBS)는 VSM을 포함한 가상화 확장을 사용하여 Windows에서 보안을 제공하는 기술군입니다. 이러한 기능을 작동시키려면 Hyper-V 역할이 필요합니다 (Hyper-V 관리 도구는 필요하지 않음).

하이퍼바이저 (Hyper-V)가 먼저 로드되고, 그 다음에 운영 체제 (Windows)가 로드됩니다. Hyper-V는 하드웨어와 운영 체제 사이에 추상화 계층을 제공합니다. VSM은 Hyper-V에 의해 제어되는 별도의 독립적인 운영 체제에 속하는 특정한 중요 프로세스 및 해당 메모리의 태그를 허용합니다. 이 원리는 각 VM이 해당 VM에 할당된 하드웨어 리소스만 사용할 수 있을 때 Hyper-V 호스트에서 실행되는 두 VM을 격리하는 것과 유사합니다.

참고: VMware에서 1종 하이퍼바이저가 필요한 경우 VMware ESXi 및 VMware vSphere 환경을 사용하십시오. 다음 블로그 게시물에서 자세히 알아보세요: Hyper-V vs VMware, VMware Workstation vs VMware Player, 그리고 ESXi를 Hyper-V에 설치하는 방법.

Hyper-V와 다른 가상화 애플리케이션의 호환성 문제를 해결하는 방법을 자세히 살펴보겠습니다.

방법 1: GUI에서 Hyper-V 제거

CMD에서 다음 명령을 실행하여 Windows 구성에 대한 시스템 정보를 확인하십시오:

msinfo32.exe

A System Information window opens. On the following screenshot, you see that Hyper-V is enabled (a hypervisor has been detected), and Device Guard Virtualization-based security is running. Now you can remove these features.

Hyper-V를 제거한 후 다음과 같은 Hyper-V 관련 기능이 사용 불가능 함에 유의하세요:

  • Hyper-V
  • Credential Guard 및 Device Guard
  • 가상 머신 플랫폼
  • Windows 샌드박스
  • WSL2.

Hyper-V 기능을 그래픽 사용자 인터페이스(GUI)에서 제어판, 역할 추가 및 기능 마법사를 사용하여 제거하십시오.

Windows 10에서 제어판을 열고 프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭하십시오.

Windows 기능 창이 열립니다.

Hyper-V 체크박스를 선택 해제하고 OK 를 클릭하세요.

Hyper-V를 제거하기 위해서는 컴퓨터를 재시작하세요.

Windows 10과 Windows Server 2016에서 Hyper-V를 제거하는 절차는 비슷합니다.

Windows Server 2016에서는 Server Manager를 열고 관리 > 역할과 기능 제거를 클릭하세요. 역할과 기능 제거 마법사에서 서버 역할 단계로 이동하여 Hyper-V를 선택 해제하세요. 계속 진행하려면 각 단계에서 Next를 클릭하세요. Hyper-V 역할을 완전히 제거하려면 재시작이 필요합니다.

방법 2: PowerShell을 사용하여 Hyper-V 기능을 비활성화

GUI 대신 명령줄 인터페이스를 사용하여 유사한 작업을 수행할 수 있습니다.

관리자 권한으로 PowerShell에 로그인하고 Hyper-V 기능을 비활성화하는 명령을 실행하세요:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor

호스트 머신을 재시작하세요:

shutdown -r -t 0

방법 3: BCDedit를 사용하여 Hyper-V를 비활성화

이 방법의 뜻은 Hyper-V 역할을 제거하지 않고 Hyper-V의 부팅을 비활성화하는 데 도움이 됩니다.

관리자 권한으로 PowerShell에 로그인하거나 쉘 프롬프트에서提升了 명령을 실행하여 Hyper-V를 비활성화하세요:

bcdedit /set hypervisorlaunchtype off

Hyper-V를 다시 활성화하고 기본값을 되돌리려면 다음 명령을 실행하세요:

bcdedit /set hypervisorlaunchtype auto

Windows 10의 빠른 부팅을 비활성화하여 더 많은 제어와 편의를 얻습니다. Windows 레지스트리 편집기를 열고 다음 위치로 이동합니다:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Power

HiberbootEnabled 파라미터를 0으로 설정합니다

Hyper-V VM을 가끔 사용해야 하는 경우, Windows 부트 로더에 두 개의 항목을 만듭니다: 하나는 Hyper-V와 함께 Windows를 부팅하고, 다른 하나는 Hyper-V 없이 Windows를 부팅합니다. 그리고 Windows를 부팅하기 전에 필요한 옵션을 선택합니다. 이 접근법은 Hyper-V를 활성화하거나 비활성화할 때마다 PowerShell에서 명령어를 수동으로 실행할 필요를 제거합니다.

bcdedit /copy “{current}” /d “No Hyper-V”

“항목이 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}에 성공적으로 복사되었습니다.”

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 대신 여러분의 값을 복사하고 붙여넣으세요.

bcdedit /set “{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}” hypervisorlaunchtype off

컴퓨터를 재시작합니다.

컴퓨터가 재시작된 후, Windows Boot Manager에서 두 가지 옵션을 볼 수 있습니다.

No Hyper-V 부팅 항목을 제거하려면 bcdedit에 대한 /delete 옵션을 사용합니다.

현재 부팅 항목 목록을 가져옵니다:

bcdedit /v

A list of all entries with their identifiers is displayed in the output. Copy the ID of the entry which you want to remove, and run the following command:

bcdedit /delete “{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”

메소드 4: PowerShell에서 dism.exe를 사용하여 Hyper-V 역할 제거

이 방법의 주旨은 Hyper-V를 제거하기 위해 명령줄 인터페이스에서 배포 이미지 서비스 및 관리 도구를 사용하는 것입니다.

관리자로 CMD 또는 PowerShell에 로그인합니다. 다음 명령을 실행하여 Hyper-V를 제거합니다:

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

Hyper-V를 다시 설치하려면 이 명령을 사용합니다:

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

메소드 5: Windows에서 가상화 기반 보안을 끄기

이 방법은 Hyper-V와 관련된 기능인 Device Guard와 Credential Guard를 비활성화하는 데 사용됩니다.

로컬 기기의 그룹 정책 편집기를 엽니다. 그룹 정책 편집기는 Windows 10 Pro, Enterprise, Education 에 있습니다. 명령 프롬프트에서 gpedit.msc를 실행합니다.

로컬 컴퓨터 정책 > 컴퓨터 구성 > 템플릿 > 시스템 > Device Guard로 이동합니다.

‘가상화 기반 보안을 켜기’를 더블 클릭합니다. 이 설정의 기본 상태는 구성되지 않음입니다.

열린 창에서 ‘비활성화’를 선택하고 설정을 저장하고 창을 닫으려면 확인을 클릭합니다.

대안으로 레지스트리를 편집합니다.

Windows 10 Home 에서 그룹 정책 편집기가 없는 경우, Windows 레지스트리에서 가상화 기반 보안을 비활성화할 수 있습니다.

레지스트리 설정을 변경하기 전에 Windows 레지스트리의 백업을 만들어 오류와 문제를 피하세요.

레지스트리 편집기를 엽니다. 관리자로 열린 명령 줄에서 regedit를 실행하세요.

HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > DeviceGuard로 이동합니다.

EnableVirtualizationBasedSecurity 항목이 없으면 해당 항목을 만듭니다. 새 항목을 만들려면 DeviceGuard 디렉토리의 빈 곳을 오른쪽 클릭하고 컨텍스트 메뉴에서 New > DWORD (32-bit) Value를 클릭하세요. 이 레지스트리 항목의 이름으로 EnableVirtualizationBasedSecurity를 입력하세요. 이 항목의 데이터는 기본적으로 0으로 설정되어 있어야 합니다 (다음 스크린샷을 참고하세요). EnableVirtualizationBasedSecurity를 더블 클릭하여 수동으로 0으로 설정할 수 있습니다.

HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > Lsa로 이동합니다.

Lsa 디렉토리에 새로운 레지스트리 항목을 만듭니다. 레지스트리 편집기 창의 오른쪽 패널의 빈 공간을 오른쪽 클릭하고 컨텍스트 메뉴에서 New > DWORD (32-bit) Value를 클릭하세요.

이 값을 위한 LsaCfgFlags 이름을 입력하세요. 이 값은 0으로 설정되어야 합니다.

레지스트리 편집기를 닫고 컴퓨터를 재시작하세요.

다음 명령을 PowerShell에서 관리자 권한으로 실행하여 다음 Windows 부팅 시 Device Guard 및 Credential Guard를 비활성화할 수 있습니다.

UEFI 시스템 파티션을 X: 드라이브(사용되지 않은 볼륨으로 선택)로 마운트합니다:

mountvol X: /s

C:\Windows\System32\SecConfig.efi를 X:\EFI\Microsoft\Boot\SecConfig.efi로 복사합니다. 파일이 존재하는 경우 덮어쓸 수 있는 옵션과 함께 복사합니다. 이 파일은 Windows 보안 구성 도구의 부팅 이미지입니다.

copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y

부팅 메뉴에 ID {0cb3b571-2f2e-4343-a879-d86a476d7215}DebugTool 이름을 가진 새 옵션을 만듭니다:

bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d “DebugTool” /application osloader

이전 단계에서 만든 부팅 옵션을 \EFI\Microsoft\Boot\SecConfig.efi로 설정합니다:

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path “\EFI\Microsoft\Boot\SecConfig.efi”

Windows 부팅 관리자를 설정하여 다음 재부팅 시 새 항목을 기본값으로 만듭니다. 이후 Windows를 재부팅하면 정상 부팅으로 돌아갑니다.

bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}

부트로더가 파일을 실행할 때 DISABLE-LSA-ISO,DISABLE-VBS 옵션을 SecConfig.efi 파일에 전달하도록 부트로더를 설정합니다.

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO,DISABLE-VBS

부팅된 드라이브의 파티션을 X: 드라이브로 설정하십시오:

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:

시스템에서 X: 드라이브를 마운트 해제하십시오:

mountvol X: /d

방법 6: VMware Workstation 업데이트

물리 컴퓨터에 Windows 10 버전 2004 (20H1) 빌드 19041 또는 그 이상의 버전이 설치되어 있다면, VMware Workstation을 VMware Workstation 15.5.6 이상의 버전으로 업그레이드하고 Hyper-V 및 장치 가드와 자격 증명 가드 기능을 비활성화/제거하지 않고도 Windows 머신에서 VMware 가상 머신을 실행할 수 있습니다.

많은 고객들의 불만으로 인해 Microsoft와 VMware는 Microsoft Windows Hypervisor Platform (WHP) API를 채택하여 VMware Workstation과 같은 유형 2 하이퍼바이저가 Hyper-V가 활성화된 호스트에서 실행될 수 있도록 공동 프로젝트를 개발하기로 결정했습니다. 이 API는 애플리케이션이 CPU 자원을 관리하고, 레지스트리 값을 읽고/쓰고, CPU 작업을 종료하고, 인터럽트를 생성할 수 있게 합니다.

버전 15.5.5 이전의 VMware Workstation은 CPU 및 가상화 명령 세트(Intel VT-x 또는 AMD-V)에 직접 접근할 수 있는 가상 머신 모니터(VMM)를 사용합니다. VMM은 특권 모드에서 작동합니다. Windows 호스트에서 가상화 기반 보안 기능이 활성화되면 하드웨어와 Windows 사이에 추가 하이퍼바이저 계층(Hyper-V)이 추가됩니다. Hyper-V는 하드웨어 가상화를 위해 사용되는 CPU 기능에 직접 접근할 수 있으며, VMM은 CPU 가상화 기능에 접근할 수 없습니다.

VMware Workstation 15.5.6 architecture에 변경사항을 추가하여 WHP APIs를 사용하고 호환성 문제를 수정했습니다. VMM은 WHP APIs를 사용하여 사용자 레벨(特权 모드로 실행되지 않음)에서 실행할 수 있으며, CPU 가상화 확장에 직접 アクセス하지 않고 VM을 실행할 수 있습니다. 이 모드는 사용자 수준 모니터(User Level Monitor, ULM)이나 호스트 VBS 모드라고 합니다. Windows 호스트에서 Hyper-V 관련 기능을 卸载 하면 VMware Workstation가 자동으로 감지하고 VMM이 CPU 가상화 확장에 직접 アクセ스하는 것으로 (特权 모드로 실행됨) 切り替え합니다.

Windows Hypervisor Platform (WHP)는 Hyper-V를 사용하는 물리적인 Windows 머신에 설치되어 있어야만 VMware Workstation이 이 머신에서 VMware VM을 실행할 수 있습니다. Control Panel에서 Windows Hypervisor Platform 기능을 클릭하여 Windows 기능을 켜거나 꺼짐 수정합니다.

따라서, Windows 10과 VMware Workstation를 물리적인 머신에서 Update하여 호스트 VBS 모드로 VMware Workstation VMs와 Hyper-V 관련 기능을 동시에 실행하는 지원하는 버전으로 변경할 수 있습니다.

Host VBS 모드의 한계:

  • Windows Server 2016 및 다른 Windows Server 버전과 에디션에서 Windows Hypervisor Platform을 지원하지 않습니다. 따라서 VMware Workstation은 Windows Server를 실행하는 물리적인 머신에서 호스트 VBS 모드로 VMware VM을 실행할 수 없습니다.
  • 嵌套 가상화를 지원하지 않습니다. VMware Workstation VM안에 VM을 실행할 수 없습니다.
  • VMware VM은 더 느려집니다.
  • X86 パフォーマンス 모니터링 カウンタ(PMC)를 지원하지 않습니다.
  • 사용자 수준 보호 キー(PKU) 機能을 사용할 수 없습니다.
  • 제한된 트랜잭션 메모리(RTM) 및 하드웨어 락 회피(HLE) 기능을 사용할 수 없습니다.

VirtualBox와 Hyper-V

VirtualBox는 VirtualBox 6.0부터 Hyper-V, 디바이스 가드 및 자격 증명 가드와 함께 공존할 수 있습니다. VirtualBox 6는 Windows 10 v1803 x64에서 VMware Workstation과 유사하게 Hyper-V API와 작동할 수 있습니다.

VirtualBox가 Hyper-V API와 함께 작동하려면 호스트 Windows 기계에서 다음 기능을 활성화해야 합니다:

  • Hyper-V
  • Windows 하이퍼바이저 플랫폼

Hyper-V 기능이 활성화되어 있지만 Windows 하이퍼바이저 플랫폼 기능이 비활성화되어 있는 경우 VM 구성 요약의 시스템 > 가속에서 파라가상화 모드가 켜져 있는 것을 볼 수 있습니다. VM을 시작하려고 하면 VirtualBox가 Windows 하이퍼바이저 플랫폼을 활성화해야 한다는 메시지를 표시합니다.

오류 메시지:
WHvCapabilityCodeHypervisorPresent가 FALSE입니다! ‘Windows 하이퍼바이저 플랫폼’ 기능이 활성화되었는지 확인하세요.

(VERR_NEM_NOT_AVAILABLE).

VT-x를 사용할 수 없습니다 (VERR_VMX_NO_VMX).

Windows에서 필요한 Hyper-V 관련 기능이 활성화되면 다음 정보가 시스템 섹션에서 VM에 표시됩니다:

가속: VT-x/AMD-v, 네스티드 페이징, 파라가상화 Hyper-V

가상 머신은 성공적으로 시작해야 합니다. VirtualBox 창의 하단 패널에 녹색 거북이 아이콘이 표시됩니다. 이 아이콘은 일반적으로 CPU 가상화 확장과 직접 상호 작용할 때 VirtualBox가 사용하는 기본 모드 대신 Hyper-V 패러가상화 모드에서 VM이 실행되고 있음을 나타냅니다. Hyper-V 및 관련 기능이 활성화된 기기에서는 VirtualBox VM의 성능이 저하됩니다. 이러한 호환성 문제를 해결하기 위해 Hyper-V를 비활성화하거나 제거하여 CPU 가상화 확장을 직접 사용하여 VirtualBox에서 VM을 기본 모드로 실행할 수 있습니다.

VirtualBox vs Hyper-V 비교 및 VirtualBox vs VMware 비교도 참고하십시오.

결론

Windows용 새로운 기능인 가상화 기반 보안(디바이스 가드 및 자격 증명 가드), Windows Sandbox, WSL은 Hyper-V 엔진을 사용하여 다른 하이퍼바이저인 VMware Workstation, VirtualBox, QEMU 및 Google Android Emulator을 사용하는 사용자, 관리자 및 소프트웨어 개발자에게 많은 문제를 일으킵니다. 이러한 호환성 문제를 해결하기 위해 두 가지 접근 방식이 있습니다: Hyper-V를 비활성화하거나 제거하거나 Microsoft가 제공하는 Windows Hypervisor Platform API와 같은 Hyper-V API와 작업하는 가상화 애플리케이션의 새 버전을 사용합니다.

Hyper-V에서 API를 사용하여 VirtualBox, VMware Workstation 및 기타 하이퍼바이저에서 VM을 실행하는 경우 비-Hyper-V VM의 성능이 저하될 수 있습니다. 가상화 응용 프로그램이 실패하는 경우 데이터 백업은 중요합니다. 아직 환경에 가장 적합한 Hyper-V 백업 솔루션을 선택하지 않았다면 NAKIVO Backup & Replication을 고려해보세요. 이 솔루션은 견고한 백업, 랜섬웨어 보호, 재해 복구 등을 제공합니다. 솔루션을 확인하려면 무료 버전을 다운로드하세요.

Source:
https://www.nakivo.com/blog/virtualization-applications-with-hyper-v-device-guard-and-credential-guard/