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)
1073정성태6/20/201127175오류 유형: 127. Visual Studio에서 WCF 서비스의 이름 변경 시 발생할 수 있는 오류
1072정성태6/19/201126649.NET Framework: 224. EF 4.1 Code First에서 Identity 칼럼 생성하는 방법파일 다운로드1
1071정성태6/19/201130201.NET Framework: 223. Entity Framework 4.1의 Code First를 이용한 SQL Azure 데이터베이스 생성 [3]파일 다운로드1
1070정성태6/19/201127711.NET Framework: 222. Windows Azure - VM Role 베타 프로그램 참여 [2]
1069정성태6/18/201127807.NET Framework: 221. Cache 영향을 받지 않는 DNS 이름 풀이 [2]파일 다운로드1
1068정성태6/16/201125394개발 환경 구성: 127. Portable Library - 닷넷 N-Screen용 공통 라이브러리 제작 [1]
1067정성태6/15/201124954오류 유형: 126. Windows failed to apply the Group Policy Folder Options settings. [1]
1066정성태6/14/201127986개발 환경 구성: 126. MSDN 구독자 - Windows Azure 무료 서비스 신청하는 방법 [4]
1065정성태6/13/201132814개발 환경 구성: 125. Firebird - 유니코드 기본 문자셋 지정
1064정성태6/11/201127461웹: 22. Visual Studio 2010에서 CSS 3 인텔리센스(intellisense) 지원하는 방법 [1]
1063정성태6/10/201129054웹: 21. Sysnet 웹 사이트의 CSS 2.1 변환 기록 [1]
1062정성태6/9/201129212웹: 20. Sysnet 웹 사이트의 HTML5 변환 기록 [1]
1061정성태6/8/201127461오류 유형: 125. 인터넷 익스플로러 - 개발자 도구에서 정지점(BP: Breakpoint) 설정이 안 되는 경우 [1]
1060정성태6/8/201124017VC++: 51. PHP 모듈의 F5 디버깅
1059정성태6/6/201129145VC++: 50. PHP 모듈 - php_mysql 빌드하는 방법파일 다운로드1
1058정성태6/5/201132791개발 환경 구성: 124. .NET 개발자가 처음 해보는 PHP + MySQL 연동 [2]
1057정성태6/4/201130171VC++: 49. 소스 코드로부터 php5apache2_2.dll 생성하는 방법파일 다운로드1
1056정성태6/2/201128328VC++: 48. 윈도우에서 Apache Module - Content Handler 컴파일파일 다운로드1
1055정성태6/1/201125559오류 유형: 124. MVC 프로젝트의 Site.Master 관련 오류 정리
1054정성태5/31/201129817.NET Framework: 220. ASP.NET MVC Web Site 프로젝트 - 단위 테스트 작성파일 다운로드1
1053정성태5/31/201132330VC++: 47. Apache Module에 대한 'F5 디버그 (Start with debugging)' [2]
1052정성태5/30/201129960.NET Framework: 219. ASP.NET MVC Web Site 프로젝트 구성하기파일 다운로드1
1051정성태5/28/201138444VC++: 46. 윈도우에서 Apache Module 컴파일 (VC++)파일 다운로드1
1050정성태5/28/201124611오류 유형: 123. Firebird - Exception of type 'FirebirdSql.Data.Common.IscException' was thrown.
1049정성태5/28/201130311.NET Framework: 218. WCF REST 서비스 - 웹 브라우저 측 Ajax 호출 캐시 [1]
1048정성태5/27/201132238개발 환경 구성: 123. Apache 소스를 윈도우 환경에서 빌드하기
... 151  152  153  154  155  156  157  158  [159]  160  161  162  163  164  165  ...