Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)
(시리즈 글이 10개 있습니다.)
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




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

비밀번호

댓글 작성자
 




1  2  [3]  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13597정성태4/15/20242043닷넷: 2239. C# - WAV 파일의 PCM 데이터 생성 및 출력파일 다운로드1
13596정성태4/14/20242355닷넷: 2238. C# - WAV 기본 파일 포맷파일 다운로드1
13595정성태4/13/20242309닷넷: 2237. C# - Audio 장치 열기 (Windows Multimedia, NAudio)파일 다운로드1
13594정성태4/12/20242324닷넷: 2236. C# - Audio 장치 열람 (Windows Multimedia, NAudio)파일 다운로드1
13593정성태4/8/20242383닷넷: 2235. MSBuild - AccelerateBuildsInVisualStudio 옵션
13592정성태4/2/20243089C/C++: 165. CLion으로 만든 Rust Win32 DLL을 C#과 연동 [1]
13591정성태4/2/20242216닷넷: 2234. C# - WPF 응용 프로그램에 Blazor App 통합파일 다운로드1
13590정성태3/31/20242100Linux: 70. Python - uwsgi 응용 프로그램이 k8s 환경에서 OOM 발생하는 문제
13589정성태3/29/20242300닷넷: 2233. C# - 프로세스 CPU 사용량을 나타내는 성능 카운터와 Win32 API파일 다운로드1
13588정성태3/28/20242796닷넷: 2232. C# - Unity + 닷넷 App(WinForms/WPF) 간의 Named Pipe 통신 [2]파일 다운로드1
13587정성태3/27/20242335오류 유형: 900. Windows Update 오류 - 8024402C, 80070643
13586정성태3/27/20243488Windows: 263. Windows - 복구 파티션(Recovery Partition) 용량을 늘리는 방법
13585정성태3/26/20242535Windows: 262. PerformanceCounter의 InstanceName에 pid를 추가한 "Process V2"
13584정성태3/26/20242628개발 환경 구성: 708. Unity3D - C# Windows Forms / WPF Application에 통합하는 방법 [4]파일 다운로드1
13583정성태3/25/20242488Windows: 261. CPU Utilization이 100% 넘는 경우를 성능 카운터로 확인하는 방법
13582정성태3/19/20242633Windows: 260. CPU 사용률을 나타내는 2가지 수치 - 사용량(Usage)과 활용률(Utilization)파일 다운로드1
13581정성태3/18/20242642개발 환경 구성: 707. 빌드한 Unity3D 프로그램을 C++ Windows Application에 통합하는 방법
13580정성태3/15/20242313닷넷: 2231. C# - ReceiveTimeout, SendTimeout이 적용되지 않는 Socket await 비동기 호출파일 다운로드1
13579정성태3/13/20242753오류 유형: 899. HTTP Error 500.32 - ANCM Failed to Load dll
13578정성태3/11/20243037닷넷: 2230. C# - 덮어쓰기 가능한 환형 큐 (Circular queue)파일 다운로드1
13577정성태3/9/20243338닷넷: 2229. C# - 닷넷을 위한 난독화 도구 소개 (예: ConfuserEx)
13576정성태3/8/20242626닷넷: 2228. .NET Profiler - IMetaDataEmit2::DefineMethodSpec 사용법
13575정성태3/7/20242880닷넷: 2227. 최신 C# 문법을 .NET Framework 프로젝트에 쓸 수 있을까요?
13574정성태3/6/20242715닷넷: 2226. C# - "Docker Desktop for Windows" Container 환경에서의 IPv6 DualMode 소켓
13573정성태3/5/20242599닷넷: 2225. Windbg - dumasync로 분석하는 async/await 호출
13572정성태3/4/20242848닷넷: 2224. C# - WPF의 Dispatcher Queue로 알아보는 await 호출의 hang 현상파일 다운로드1
1  2  [3]  4  5  6  7  8  9  10  11  12  13  14  15  ...