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

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  [160]  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1081정성태7/9/201128429VC++: 53. Windows 7에서 gcc.exe 실행 시 Access denied 오류 [2]
1080정성태7/8/201126992웹: 23. Sysnet 웹 사이트의 HTML5 변환 기록 - 두 번째 이야기파일 다운로드1
1079정성태7/6/201131370오류 유형: 129. Hyper-V + Realtek 랜카드가 설치된 시스템의 BSOD 현상 [2]
1078정성태7/5/201138919VC++: 52. Chromium 컴파일하는 방법 [2]
1077정성태6/24/201136389.NET Framework: 226. HttpWebRequest 타입의 HaveResponse 속성 이야기파일 다운로드1
1076정성태6/23/201130725오류 유형: 128. SQL Express - User Instance 옵션을 사용한 경우 발생하는 오류 메시지 유형 2가지
1075정성태6/21/201126266VS.NET IDE: 69. 윈폰 프로젝트에서 WCF 서비스 참조할 때 Reference.cs 파일이 비어있는 경우
1074정성태6/20/201126464.NET Framework: 225. 닷넷 네트워크 라이브러리의 트레이스 기능파일 다운로드1
1073정성태6/20/201128596오류 유형: 127. Visual Studio에서 WCF 서비스의 이름 변경 시 발생할 수 있는 오류
1072정성태6/19/201128182.NET Framework: 224. EF 4.1 Code First에서 Identity 칼럼 생성하는 방법파일 다운로드1
1071정성태6/19/201131658.NET Framework: 223. Entity Framework 4.1의 Code First를 이용한 SQL Azure 데이터베이스 생성 [3]파일 다운로드1
1070정성태6/19/201129223.NET Framework: 222. Windows Azure - VM Role 베타 프로그램 참여 [2]
1069정성태6/18/201129307.NET Framework: 221. Cache 영향을 받지 않는 DNS 이름 풀이 [2]파일 다운로드1
1068정성태6/16/201126796개발 환경 구성: 127. Portable Library - 닷넷 N-Screen용 공통 라이브러리 제작 [1]
1067정성태6/15/201126335오류 유형: 126. Windows failed to apply the Group Policy Folder Options settings. [1]
1066정성태6/14/201129351개발 환경 구성: 126. MSDN 구독자 - Windows Azure 무료 서비스 신청하는 방법 [4]
1065정성태6/13/201134256개발 환경 구성: 125. Firebird - 유니코드 기본 문자셋 지정
1064정성태6/11/201128917웹: 22. Visual Studio 2010에서 CSS 3 인텔리센스(intellisense) 지원하는 방법 [1]
1063정성태6/10/201130506웹: 21. Sysnet 웹 사이트의 CSS 2.1 변환 기록 [1]
1062정성태6/9/201130699웹: 20. Sysnet 웹 사이트의 HTML5 변환 기록 [1]
1061정성태6/8/201128880오류 유형: 125. 인터넷 익스플로러 - 개발자 도구에서 정지점(BP: Breakpoint) 설정이 안 되는 경우 [1]
1060정성태6/8/201125478VC++: 51. PHP 모듈의 F5 디버깅
1059정성태6/6/201130721VC++: 50. PHP 모듈 - php_mysql 빌드하는 방법파일 다운로드1
1058정성태6/5/201134311개발 환경 구성: 124. .NET 개발자가 처음 해보는 PHP + MySQL 연동 [2]
1057정성태6/4/201131712VC++: 49. 소스 코드로부터 php5apache2_2.dll 생성하는 방법파일 다운로드1
1056정성태6/2/201129843VC++: 48. 윈도우에서 Apache Module - Content Handler 컴파일파일 다운로드1
... 151  152  153  154  155  156  157  158  159  [160]  161  162  163  164  165  ...