Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)
(시리즈 글이 12개 있습니다.)
Windows: 63. 윈도우 서버 2012 - Hyper-V의 새로운 기능 Live Migration
; https://www.sysnet.pe.kr/2/0/1356

개발 환경 구성: 211. Hyper-V - Generation 2 유형의 VM 생성 시 ISO 부팅이 안된다면?
; https://www.sysnet.pe.kr/2/0/1603

개발 환경 구성: 236. Hyper-V에 설치한 리눅스 VM의 VHD 크기 늘리는 방법
; https://www.sysnet.pe.kr/2/0/1742

개발 환경 구성: 317. Hyper-V 내의 VM에서 다시 Hyper-V를 설치: Nested Virtualization
; https://www.sysnet.pe.kr/2/0/11218

개발 환경 구성: 405. Hyper-V 가상 머신에서 직렬 포트(Serial Port, COM Port) 사용
; https://www.sysnet.pe.kr/2/0/11720

.NET Framework: 798. C# - Hyper-V 가상 머신의 직렬 포트와 연결된 Named Pipe 간의 통신
; https://www.sysnet.pe.kr/2/0/11722

디버깅 기술: 169. Hyper-V의 VM에 대한 메모리 덤프를 뜨는 방법
; https://www.sysnet.pe.kr/2/0/12284

개발 환경 구성: 608. Hyper-V 가상 머신에 Console 모드로 로그인하는 방법
; https://www.sysnet.pe.kr/2/0/12859

개발 환경 구성: 664. Hyper-V에 설치한 리눅스 VM의 VHD 크기 늘리는 방법 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/13246

Windows: 259. Hyper-V Generation 1 유형의 VM을 Generation 2 유형으로 바꾸는 방법
; https://www.sysnet.pe.kr/2/0/13564

개발 환경 구성: 718. Hyper-V - 리눅스 VM에 새로운 디스크 추가
; https://www.sysnet.pe.kr/2/0/13706

Windows: 280. Hyper-V의 3가지 Thread Scheduler (Classic, Core, Root)
; https://www.sysnet.pe.kr/2/0/13901




Hyper-V 내의 VM에서 다시 Hyper-V를 설치: Nested Virtualization

최근 지인의 Facebook을 통해 알게 된 재미있는 사실이 하나 있습니다. ^^

Tuesdays with Corey: M-Series and Nested Virtualization on Azure
; https://channel9.msdn.com/Shows/Tuesdays-With-Corey/Tuesdays-with-Corey-M-Series-and-Nested-Virtualization-on-Azure

저걸 보면서... Azure에도 있는데, 혹시 Windows 운영체제의 Hyper-V에도 있지 않을까... 하는 생각에 찾아봤더니 역시나 있었습니다.

가상화안에 또 다른 가상화를, Nested Virtualization
; https://docs.microsoft.com/en-us/archive/blogs/koalra/nested-virtualization

즉, 윈도우 운영체제에 내장된 Hyper-V에서는 벌써부터 중첩 가상화가 지원되었던 것입니다. 단지, 그다지 사용 사례가 많지 않을 거라 생각했는지 Hyper-V 관리 콘솔에서의 설정은 지원되지 않고 Powershell로 명시적으로 활성화시켜야만 합니다.

가령 제 컴퓨터의 Hyper-V에 설치한 win10en64라는 VM에 중첩 가상화가 설정되어 있는지 다음의 명령어로 확인할 수 있습니다.

PS C:\WINDOWS\system32> GET-VMProcessor -VMName win10en64  | Format-List *

VMCheckpointId                               : 00000000-0000-0000-0000-000000000000
VMCheckpointName                             : 
ResourcePoolName                             : Primordial
Count                                        : 4
CompatibilityForMigrationEnabled             : False
CompatibilityForOlderOperatingSystemsEnabled : False
HwThreadCountPerCore                         : 1
ExposeVirtualizationExtensions               : False
Maximum                                      : 100
Reserve                                      : 0
RelativeWeight                               : 100
MaximumCountPerNumaNode                      : 8
MaximumCountPerNumaSocket                    : 1
EnableHostResourceProtection                 : False
OperationalStatus                            : {}
StatusDescription                            : {}
Name                                         : Processor
Id                                           : Microsoft:CCD4E0B9-8880-4557-AE8E-FCCA2A29AFF2\b637f346-6a0e-4dec-af52-bd70cb80a21d\0
VMId                                         : ccd4e0b9-8880-4557-ae8e-fcca2a29aff2
VMName                                       : win10en64
VMSnapshotId                                 : 00000000-0000-0000-0000-000000000000
VMSnapshotName                               : 
CimSession                                   : CimSession: .
ComputerName                                 : TESTPC
IsDeleted                                    : False

ExposeVirtualizationExtensions 설정이 False로 되어 있는데, 이를 다음의 명령어로 True로 바꿔주면 중첩 가상화가 활성화됩니다.

PS C:\WINDOWS\system32> Set-VMProcessor -VMNAME win10en64 -ExposeVirtualizationExtensions:$True 

참고로, 해당 VM이 실행 중이면 다음과 같은 예외가 발생하니,

Set-VMProcessor : Failed to modify device 'Processor'.
Cannot change the processor functionality of a virtual machine now.
'win10en64' failed to modify device 'Processor'. (Virtual machine ID CCD4E0B9-8880-4557-AE8E-FCCA2A29AFF2)
Cannot change the processor functionality of virtual machine 'win10en64' while it is running. (Virtual machine ID CCD4E0B9-8880-4557-AE8E-FCCA2A29AFF2)
At line:2 char:2
+  Set-VMProcessor -VMNAME win10en64 -ExposeVirtualizationExtensions:$T ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Set-VMProcessor], VirtualizationException
    + FullyQualifiedErrorId : InvalidState,Microsoft.HyperV.PowerShell.Commands.SetVMProcessor

반드시 VM을 끄고 합니다.




ExposeVirtualizationExtensions 설정을 활성화했으면, 해당 VM 내에서 다시 Hyper-V 구성 요소를 설치하는 것이 가능합니다. 제약 조건은, 그 VM의 운영체제가 Windows 10 TH2(10576+) 이상이어야 한다는 점입니다.

당연하지만, Hyper-V뿐만 아니라 VirtualBox 역시 설치할 수 있습니다. 실제로, 테스트를 위해 ExposeVirtualizationExtensions == False 상태의 VM에서 VirtualBox를 설치해 가상 VM을 생성하려고 시도해봤습니다. 물론 이대로는 다음과 같은 오류가 발생합니다.

가상 머신 xxx의 세션을 열 수 없습니다.

VT-x is not available (VERR_VMX_NO_VMX).

결과 코드: 
E_FAIL (0x80004005)
구성 요소: 
ConsoleWrap
인터페이스: 
IConsole {872da645-4a9b-1727-bee2-5585105b9eed}

재미있는 것은, 해당 VM의 메모리 설정을 4GB에서 2GB로 낮추면 다음과 같은 메시지만 뜰 뿐,

nested_virtual_1.png

"
시스템에서 VT-x/AMD-V 하드웨어 가속을 사용할 수 없습니다. OS/2나 QNX같은 일부 게스트 운영 체제는 이 기능이 필요하며, 사용하지 않으면 부팅할 수 없습니다.
"


"계속" 버튼을 누르면 VM 생성 단계로 넘어간다는 점입니다. 하지만, VirtualBox.exe 프로세스 사용률이 25%로 올라만 갈 뿐 더 이상 진전이 없습니다. 왜냐하면, 어쨌든 Hyper-V 내의 VM에서는 VirtualBox를 다시 띄워서 가상 머신을 생성할 수 없기 때문입니다.

반면, ExposeVirtualizationExtensions == True 상태로 바꿔주면 VM 내의 VirtualBox에서도 다시 VM을 설치하는 데 문제가 없습니다.

(그렇긴 한데, 안정성 측면에서 봤을 때 VirtualBox보다는 역시 Hyper-V를 중첩해서 이용하는 것이 더 나을 듯합니다. ^^)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/9/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  94  95  [96]  97  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11535정성태6/7/201823389.NET Framework: 759. C# - System.Span<T> 성능 [1]
11534정성태6/6/201829127.NET Framework: 758. C# 7.2 - Span<T> [6]
11533정성태6/5/201831696.NET Framework: 757. 포인터 형 매개 변수를 갖는 C++ DLL의 함수를 C#에서 호출하는 방법파일 다운로드1
11532정성태6/5/201821747.NET Framework: 756. JSON의 escape sequence 문자 처리 방식
11531정성태6/4/201826038오류 유형: 468. JSON.parse가 허용하지 않는 문자 [9]
11530정성태5/31/201826046.NET Framework: 755. C# 7.2 - 스택에만 생성할 수 있는 값 타입 지원 - "ref struct" [2]파일 다운로드1
11529정성태5/23/201823376.NET Framework: 754. 닷넷의 관리 포인터(Managed Pointer)와 System.TypedReference [6]파일 다운로드1
11528정성태5/17/201822886.NET Framework: 753. C# 7.2 - 3항 연산자에 ref 지원(conditional ref operator) [1]
11527정성태5/17/201820535오류 유형: 467. RDP 로그인 에러 - This could be due to CredSSP encryption oracle remediation.
11526정성태5/16/201820608.NET Framework: 752. C# 7.2 - 메서드의 반환값 및 로컬 변수에 ref readonly 기능 추가파일 다운로드1
11525정성태5/16/201824678.NET Framework: 751. C# 7.2 - 메서드의 매개 변수에 in 변경자 추가 [3]파일 다운로드1
11524정성태5/15/201823604.NET Framework: 750. C# 7.2 - readonly 구조체 [5]파일 다운로드1
11523정성태5/15/201821367.NET Framework: 749. C# - 값 형식의 readonly 인스턴스에 대한 메서드 호출 시 defensive copy 발생 [1]파일 다운로드1
11522정성태5/15/201819109개발 환경 구성: 378. Azure - VM 진단 설정 화면의 "This subscription is not registered with the Microsoft.Insights resource provider."
11521정성태5/15/201818172개발 환경 구성: 377. Azure - 원하는 성능 데이터로 모니터링 대시보드 구성
11520정성태5/12/201819726.NET Framework: 748. C# 7.1 - 참조 어셈블리(Ref Assemblies)
11519정성태5/12/201821324개발 환경 구성: 376. ASP.NET Web Application 프로젝트의 FileSystem 배포(Publish) 시 Before/After Task 설정 방법 [1]
11518정성태5/10/201819708.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
11517정성태5/10/201818770.NET Framework: 746. Azure runbook 예제 - 6시간 동안 수행 중인 VM을 중지 [1]파일 다운로드1
11516정성태5/9/201818878.NET Framework: 745. Azure runbook을 PowerShell 또는 C# 코드로 실행하는 방법파일 다운로드1
11515정성태5/9/201821317.NET Framework: 744. C# 6 - Expression bodied function [1]
11514정성태5/3/201819434오류 유형: 466. Bitvise - Error in component session/transport/kexHandler [2]
11513정성태5/3/201826327.NET Framework: 743. C# 언어의 공변성과 반공변성 [9]파일 다운로드2
11512정성태5/2/201818511개발 환경 구성: 375. Azure runbook 실행 시 "Errors", "All Logs"에 오류 메시지가 출력되는 경우
11511정성태5/2/201820579개발 환경 구성: 374. Azure - Runbook 기능 소개
11510정성태4/30/201821687.NET Framework: 742. windbg로 확인하는 Finalizer를 가진 객체의 GC 과정파일 다운로드1
... 91  92  93  94  95  [96]  97  98  99  100  101  102  103  104  105  ...