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 Generation 1 유형의 VM을 Generation 2 유형으로 바꾸는 방법

이에 관해 검색하면 다음과 같은 글이 나옵니다.

Hyper-V upgrade generation 1 to generation 2
; https://www.savernova.com/en/docs/manuals/activeimage-protector/hyper-v-upgrade-generation-1-to-generation-2-en

정리해 볼까요? ^^




Gen1에서 Gen2로 바꾸기 위해 가장 중요한 요건은 (VM의) 하드 디스크가 MBR 파티션이 아닌 GPT 파티션이어야 한다는 점입니다.

GPT 파티션으로 바꾸는 것은,

Convert an MBR disk into a GPT disk
; https://learn.microsoft.com/en-us/windows-server/storage/disk-management/change-an-mbr-disk-into-a-gpt-disk

윈도우의 "Disk Management"나 diskpart.exe로도 가능하지만, 여기서 문제는 앞선 2가지 방법은 기존 디스크의 내용을 모두 초기화해야 한다는 것에 있습니다.

우리는 동작하던 VM의 디스크를 바꾸는 것이기 때문에 당연히 초기화해서는 안 되는데, 다행히 마이크로소프트에서 이런 경우를 위한 변환 도구를 제공하므로,

MBR2GPT.EXE
; https://learn.microsoft.com/en-us/windows/deployment/mbr-to-gpt

이것을 사용해 기존 VM의 vhdx 디스크를 (내부 자료 초기화 없이) 변환해 줄 수 있습니다. 하지만, 여기서 다시 문제가 있습니다. ^^ GPT로 변환하려면 해당 디스크를 offline으로 만들어야 하는데, 이는 곧, 현재 해당 VM이 부팅 중에는 mbr2gpt.exe를 실행할 수 없다는 것을 의미합니다.

그래서 "Convert an MBR disk into a GPT disk" 글에서는, GPT 변환 작업을 위해 Recovery 모드로 부팅을 하는데요, 재미있는 건 ISO 설치 디스크 이미지 중에서 mbr2gpt.exe를 내장한 것은 Windows 10/11이라는 점입니다.

따라서, Windows Server 2012가 설치된 VM을 Gen2로 바꾸고 싶어도 Windows 10+ (최소 1909 버전 이상의) 설치 이미지를 구해야 합니다. (아마도 윈도우 서버 버전의 경우 2019부터 제공할 텐데, 2019 VM 정도면 애당초 Gen2로 만들었을 것입니다. ^^) 일단, 어떻게든 mbr2gpt가 있는 이미지를 구했으면 VM에 CD 이미지로 연결한 다음 재부팅해 설치 모드로 진입합니다.

이후 ("Install" 버튼 대신) "Repair your computer" 링크를 통해 "Troubleshoot" / "Command Prompt"를 띄운 후, 다음과 같은 과정으로 mbr2gpt 실행을 합니다.

X:\Srouces> cd X:\Windows\System32

X:\Windows\System32> mbr2gpt /validate /disk:0
MBR2GPT: Attempting to validate disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Validation completed successfully

X:\Windows\System32> mbr2gpt /validate /disk:0
If conversion is successful the disk can only be booted in GPT mode.
These changes cannot be done!

MBR2GPT: Attempting to convert disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Backing up the system partition
MBR2GPT: Creating the EFI system partition
MBR2GPT: Installing the new boot files
MBR2GPT: Performing the layout conversion
MBR2GPT: Migrating default boot entry
MBR2GPT: Adding recovery boot entry
MBR2GPT: Fixing driver letter mapping
MBR2GPT: Conversion completed successfully
Call WinReRepair to repair WinRE
MBR2GPT: Failed to update ReAgent.xml, please try to manually disable and enable WinRE.
MBR2GPT: Before the new system can boot properly you need to switch the firmware to boot to UEFI mode!

혹은, 제가 해보진 않았지만 VM의 vhdx 이미지를 분리해 Hyper-V에 설치된 또 다른 Windows 10 VM에 붙인 다음 그 안에서 디스크를 offline 시키고 mbr2gpt.exe를 실행해도... 아마 될 것입니다. ^^

이렇게 디스크가 준비되었으면, 남은 작업은 새롭게 Generation 2 VM을 껍데기만 새롭게 생성한 다음 (mbr2gpt로 변환한) Gen1 VM의 디스크 이미지(vhdx)를 연결하면 됩니다.




참고로, Gen2로 바꾼 경우의 장/단점은 아래의 글에서 소개하고 있습니다.

Should You create a generation 1 or 2 virtual machine in Hyper-V?
; https://www.linkedin.com/pulse/should-you-create-generation-1-2-virtual-machine-gaby-machaalany/

  • Faster boot times: Generation 2 virtual machines use UEFI firmware, which allows them to boot faster than generation 1 virtual machines.
  • Improved hardware support: Generation 2 virtual machines support a wider range of hardware devices, including those that require UEFI support, such as some network adapters and storage controllers.
  • Enhanced security features: Generation 2 virtual machines support features such as Secure Boot and Trusted Platform Module (TPM), which can help to secure the virtual machine and the host system.
  • Improved performance: Generation 2 virtual machines may offer improved performance compared to generation 1 virtual machines, particularly for workloads that rely on hardware acceleration or require high I/O throughput.

다른 건 상관없는데, 성능이 나아진다는 것 하나만으로도 Gen2로 옮길 충분한 이유가 됩니다.




마지막으로, mbr2gpt를 offline 시키지 않은 디스크에 대해 실행하면 이런 오류 메시지가 나옵니다.

C:\Windows\system32> mbr2gpt /validate /disk:0
ERROR: MBR2GPT can only be used from the Windows Preinstallation Environment. Use /allowFullOS to override.

C:\Windows\system32> mbr2gpt /validate /disk:0 /allowFullOS
MBR2GPT: Attempting to validate disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
Disk layout validation failed for disk 0




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

[연관 글]






[최초 등록일: ]
[최종 수정일: 2/22/2024]

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

비밀번호

댓글 작성자
 




... [196]  197 
NoWriterDateCnt.TitleFile(s)
40정성태7/23/200321828COM 개체 관련: 10. IE BHO 개체를 개발할 때, 인터넷 익스플로러가 아닌 탐색기에서 활성화 되는 문제 해결 [1]
41김성현7/24/200320667    답변글 COM 개체 관련: 10.1. [답변]: IE BHO 개체를 개발할 때, 인터넷 익스플로러가 아닌 탐색기에서 활성화 되는 문제 해결
42정성태7/29/200318610        답변글 COM 개체 관련: 10.2. feedback 을 받기 위해서 답변 기능을 가능하게 해두었습니다.
39정성태7/17/200324392VS.NET IDE: 5. 원격 제어 3가지 방법
38정성태7/17/200320947.NET Framework: 8. IIS 서버 재설치와 ASP.NET 서비스의 문제점
36정성태7/17/200321607.NET Framework: 7. 시행착오 - WebService 참조 추가 오류
35정성태7/17/200322129.NET Framework: 6. Win2000에서의 .NET COM+ 자동 등록 오류 발생 해결
34정성태7/17/200320793VS.NET IDE: 4. VC++ 원격 디버깅파일 다운로드1
33정성태7/17/200320947VS.NET IDE: 3. Win2000 NAT 서비스
32정성태7/17/200322162COM 개체 관련: 9. _bstr_t, CComBSTR, string 클래스 사용 [1]
31정성태7/17/200319237COM 개체 관련: 8. IDL 구문에서 구조체를 pack 하는 방법
30정성태7/17/200336492VC++: 7. [STL] vector 사용법 및 reference 사용예 [1]파일 다운로드1
28정성태7/17/200320907스크립트: 3. Programming Microsoft Internet Explorer 5 - CHM 파일
29정성태7/17/200320386    답변글 스크립트: 3.1. Programming Microsoft Internet Explorer 5 - 소스코드
27정성태7/17/200319323COM 개체 관련: 7. HTML Control에서 DELETE, 화살표 키 등이 안 먹는 문제
26정성태7/17/200320478COM 개체 관련: 6. WebBrowser 콘트롤에서 프레임을 구하는 소스
25정성태7/17/200318116COM 개체 관련: 5. C++ Attributes - Make COM Programming a Breeze with New Feature in Visual Studio .NET [2]파일 다운로드1
24정성태7/17/200321740.NET Framework: 5. (MHT 변환해서 가져온 글) .NET 의 COM+ 서비스 사용파일 다운로드1
23정성태7/17/200325427.NET Framework: 4. webservice.htc - HTML Script에서도 웹서비스 엑세스 [2]파일 다운로드1
22정성태7/17/200319963.NET Framework: 3. .NET Framework SDK 퀵 스타트 자습서
21정성태7/17/200319036.NET Framework: 2. 김현승님의 "ASP.NET & .NET EnterpriseServices & Remoting 코드 템플릿"
20정성태2/15/200526052VS.NET IDE: 2. Platform SDK 설치
19정성태7/17/200322002.NET Framework: 1. JScript.NET 강좌 사이트[영문]
18정성태7/17/200319411COM 개체 관련: 4. Exchanging Data Over the Internet Using XML [1]파일 다운로드1
17정성태7/17/200327358VC++: 6. Win32 API Hook - 소스는 "공개소스"에있습니다. [2]
16정성태7/17/200319681COM 개체 관련: 3. IE 툴밴드의 위치문제파일 다운로드1
... [196]  197