윈 도 우 VHDman.exe으로 VHD 교차부팅 테스트
2020.07.10 04:41
질문에 올라와서 저도 오랜만이고 해서 한번 테스트해봤습니다
개인적으로 VHD 교차부팅을 할 때는 diskpart 으로 VHD 만들어서 직접 bat 파일을 만들어서 작업스케줄러에 등록했습니다
그런 cmd 명령을 이용하는 방법은 아무래도 더 불편하실 것이고, VHDman.exe 이 더 편리하실 겁니다.
테스트는 vmware로 했습니다. 실컴도 마찬가지 방법으로 됩니다. 당연하지만 예전에 실제 사용할 때는 실컴으로 했습니다
디스크 초기화하여 파티션 만들기 부터 시작합니다. 처음부터 VHD를 만들어서 윈도를 설치합니다
가상머신에 디스크를 파티션도 만들지 않은 상태라서 탐색기에 나타나지 않네요
디스크관리 실행하면 자동으로 디스크 초기하라는 화면이 나옵니다
MBR 디스크 형식으로 했습니다만, 잠시 후에 VHDman.exe 내부의 파티션 툴로 파티션을 다시 만들 때 GPT 디스크로 할 거라서 상관없습니다
VHDman.exe 내부의 파티션 툴은 스샷대로 아래쪽에 있습니다.
참고로 RSImageX에도 마찬가지 위치에 같은 파티션 툴이 있습니다
처음에 아무 것도 하지 않은 화면입니다
방법은 스샷에 있는대로 입니다. 일일이 수동 입력하는 것이 아니고 GPT 클릭하면 거의 다 내용이 만들어집니다
Z 입력하고 파티션 크기를 빈칸으로 하는 정도만 수정했습니다
파티션 생성을 클릭하면 파티션이 체크한대로 만들어집니다
금새 만들어집니다 ^^
무슨 일인지 실패하더군요;;
위에 스샷대로 GPT 체크해제만 하여 파티션 만들기 성공했습니다. 이유는 아직 모릅니다
실컴은 GPT 디스크여도 VHD는 MBR 디스크 형식으로 부팅이 가능합니다. VHD 형식은 별로 중요하지 않더군요.
제 경험상으로 그렇고, 다른 컴퓨터의 다양한 환경에서는 제 경험과는 다를 수 있습니다. VHD도 GPT 형식이어야만 UEFI 부팅이 가능할 수도 있습니다
위와 같은 방법으로 VHD를 만들면 install.wim 설치도 VHD 만든 후에 진행됩니다
install.wim 설치 완료 후에 별도로 bcdboot로 부팅 파일을 만들어줍니다. 부팅 파일은 EFI 파티션에 만들어야 합니다
파티션 만들 때 EFI 파티션에 Z을 할당했습니다. 그래서 시스템 파티션으로 Z을 선택한 것입니다. 왼쪽에 VHD드라이브는 말 그대로 VHD 드라이브입니다
vmware를 uefi로 설정했습니다. 그러면 PE 부팅은 bios 부팅을 한 것인데요.
PE는 어떤 상태로 부팅해도 작업이 가능합니다. 이런게 pe의 맛입니다
일단 VHD로 부팅하여 윈도를 설치합니다.
자식 VHD 교차 부팅은 부모 VHD가 완성된 후에 자식 VHD로 교대로 부팅하는 것이기 때문입니다
그냥 윈도 설치 과정입니다
몇분 기다리기 귀찮아서 ctrl + alt + del 눌려서 재부팅을 해버립니다. 문제는 없습니다
VHD는 가상메모리를 할당하지 못 해서 처음 부팅하면 저런 가상 메모리 설정하라는 화면이 나옵니다
가상 메모리 설정해주면 다시는 나타나지 않습니다
VHD 내부에 해당하는 C:에 가상 메모리를 할당하면 안 됩니다.
C:이 아니면 되는데요. 저는 VHD가 위치한 D:에 할당했습니다
이렇게 동적 VHD는 부팅하면 설정한 크기로 확장합니다. 실사용량과는 관계없습니다
부모 VHD로 부팅하여 여러가지 프로그램들 설치와 윈도 설정 등을 전부 완료한 후에
다시 PE로 부팅하여 자식 VHD 만들기+부팅등록을 합니다. 자식 VHD 만들기는 부모 VHD 부팅 상태에서는 만들 수 없습니다
순식간에 교차부팅에 필요한 3개의 자식 VHD가 만들어집니다 ^^
이름만 다를 뿐이고, 만들어질 때는 전부다 같은 세쌍둥이 입니다.
2개는 교대로 부팅하는 역할이고
clean이 붙은 VHD는 계속 초기 상태로 복사해줘서 초기 상태로 만들어주는 VHD입니다.
초기 상태라는건 정확하게는 부모 VHD의 상태 그대로라고 할 수 있습니다. 부모 VHD를 변경해도 그대로 clean에 적용됩니다
자식 VHD는 부모 VHD에 변경사항만 저장한 것입니다. 그래서 clean으로 복사하여 초기화하면 변경사항만 제거되어 부모 VHD와 같게 됩니다
그런데 bcd 부팅 등록 상황을 확인하려고 했더니....좀 이상하더군요
자동으로 나타난 Y:이 아니라 D:으로 efi 파티션을 탑재해야 되네요
다시 자식 vhd 부팅 등록까지 하기 위하여 만들어진 자식 VHD들은 전부 삭제했습니다
다시 자식 VHD들을 만들었습니다
이번에는 제대로 efi 파티션의 bcd에 자식 vhd들이 부팅 등록이 되었습니다 ^^
위 스샷에서 ESP 탑재 클릭하면 자동으로 EFI 파티션이 탑재됩니다.
드라이브 문자는 자동으로 할당됩니다. 여기서는 D:으로 할당되었습니다
이건 저도 VHDman.exe을 교차부팅용으로 잘 사용하지 않고, VHD 교차부팅도 자주하지 않아서 실수한 것입니다.
교차부팅은 부모 VHD로 부팅한 상태에서 해야 합니다. 왜냐하면 작업스케줄러에 등록해야 하기 때문입니다
부모 VHD의 작업 스케줄러에 등록을 해야 자식 VHD 부팅했을 때도 계속 적용됩니다
그래서 부모 VHD로 부팅했습니다. 자식이 생겨서 부모라고 합니다만 그냥 처음 만든 VHD입니다
뭔가 거창하게 대기하고 있습니다;;
위에 스샷대로 부모VHD와 자식VHD를 지정해주고 교차부팅을 클릭하면 됩니다
-> 다시 해볼 일이 생겨서 해봤는데, 자식 VHD 1개만 지정하고 교차 부팅 클릭해도 됩니다. 교차부팅은 자식 VHD만 하는 것이기 때문일 겁니다
저렇게 교차부팅에 필요한 파일들이 만들어집니다.
여기는 나오지 않습니다만, 작업스케줄러에 등록도 되어 있습니다
ini 내용을 한번 봤습니다. 보기만 하고 수정은 하지 않았습니다
위와 같이 자식 VHD들 2개와 clean VHD가 등록되어 있습니다
재부팅하면 이렇게 1번 자식 VHD로 부팅하게 됩니다
위에서 쓴대로 동적 VHD는 부팅하면 용량이 설정한 크기가 확장되기 때문에 어떤 VHD로 부팅했는지 쉽게 알 수 있습니다
다시 재부팅을 하게 되면 2번 자식 VHD로 자동 설정되어 있습니다
이렇게 매번 재부팅 때마다 부모 VHD 상태로 돌아가는 것이 교차부팅입니다
변경하고 싶으신 것이 있는 경우만 (프로그램 설치, 설정, 윈도 업데이트 등) 부모 VHD로 부팅하셔서 작업하시면 됩니다
부모 VHD로 부팅하셔서 변경하신 경우 (부팅만 해도 변경됩니다) 자식 VHD를 다시 만들지 않으셔도 됩니다
VHDX는 부모 VHDX를 부팅만 해도 자식 VHDX 등을 전부 다시 만들어야 합니다. 아니면 블루스크린 뜹니다.
참고로 무조건 교차 부팅이 되는 것이 아니라 ini 의 마지막에 숫자 1을 다른 숫자로 하시면 자동 교차 부팅이 되지 않습니다
저는 예전부터 그렇습니다만, 내용상 강좌 성격인데 강좌는 좀 더 형식적으로 만들어야 할 듯 하여 부담스러워서 자유로운 사용기에 잘 올립니다.
댓글 [30]
-
점돌이 2020.07.10 06:48
-
무쏘뿔 2020.07.10 07:17
수고하셨습니다.^^
-
거미손 2020.07.10 08:20
늘 한결같이 상세하고 섬세한 사용기를 올려주셔서 많은 배움으로 참고 잘 적용하고 있습니다.
감사합니다.
-
cungice 2020.07.10 08:36
고생 많으셨습니다. 자상한 사용기 잘 보았습니다.
-
하늘개구 2020.07.10 08:49
^^* 좋은 지식 나누어 주심 고맙습니다.
늘 성원합니다.건강하십시요.~
-
수색앗 2020.07.10 08:59
강좌 잘 보았습니다. 수고하셨어요.
-
할배장 2020.07.10 09:16
수고하셨습니다.
-
배낭 2020.07.10 09:43
수고 많으셨습니다..
-
카멜 2020.07.10 10:31
역시 석님이시네요.. 다시 돌아오셔서 반갑습니다.
gpt방식에 체크돼 있으면 먼저 vhd파일을 만든 후에 convert gpt를 실행합니다.
그러면 파티션이 2개가 생기더군요.
그래서 첫번째 파티션을 강제로 삭제를 하는 과정이 진행됩니다.
작은 크기로 테스트 해보면 별문제 없이 잘 되는데 무슨 문제인지 좀더 살펴봐야겠습니다.
-
suk 2020.07.11 01:50
네, 안녕하세요
방금 실컴에서 테스트해보니까 GPT 체크해도 이상없이 잘 작동합니다
예전에도 GPT 체크해서 이상이 없었습니다.
아무래도 PE 버전에 따라서 다른 건지...다른 PE로 해봐야겠습니다
그런데 제가 가진 몇가지 PE에서 해봐도 GPT 체크하면 에러가 발생하네요..
먼저 실컴 윈도에서 gpt 형식으로 VHD는 잘 만들어집니다
PE에서는 이렇게 실패하네요
제가 예전에 만든 PE로도 한번 해봤는데 마찬가지로 실패하네요
gpt 체크해제하면 잘 만들어집니다
제가 주로 PE가 아닌 실컴에서만 VHDman.exe과 RSImageX를 사용하고, 특히 GPT로 VHD를 잘 만들지 않아서 아직까지 모르고 있었네요
다른 유명하신 분의 PE를 한번....사실 본문의 PE도 유명하신 분의 PE입니다만;; 다른 분들 PE도 한번 테스트해봐야겠습니다
어떤 분이 가장 유명하신지...? (혼자 생각중입니다) // 어쩌면 가상머신의 상황이 문제가 되는건지..그러면 실컴으로 PE 부팅을 해봐야겠네요
13일간 리부팅하지 않고 버티고 있었는데요. 오랜만에 산책을 하겠네요 ^^
-----------------------
실컴에서 PE 부팅을 해도 마찬가지 현상입니다. 실컴까지 특이한 상황인지는 모르겠네요
gpt 체크해제만 하면 잘 만들어집니다
또 다른 유명하신 분의 PE도 같은 현상입니다
역시 gpt 체크해제하면 잘 만들어집니다
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - 실컴 윈도우는 잘 됩니다 2020-07-11_013055.jpg (521.8KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - 실컴 윈도우는 잘 됩니다 2020-07-11_013127.jpg (502.2KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - PE는 이상하게 몇가지 PE로 해봐도 안 되네요 2020-07-11_013557.jpg (298.1KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - PE는 이상하게 몇가지 PE로 해봐도 안 되네요 2020-07-11_013927.jpg (316.1KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - PE는 이상하게 몇가지 PE로 해봐도 안 되네요 - MBR 형식은 잘 만들어집니다 2020-07-11_014018.jpg (320.7KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - PE는 이상하게 몇가지 PE로 해봐도 안 되네요 - 실컴 PE 부팅해도 같습니다 2020-07-11_020416.png (645.3KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - PE는 이상하게 몇가지 PE로 해봐도 안 되네요 - 실컴 PE 부팅해도 같습니다 2020-07-11_020529.png (627.0KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - PE는 이상하게 몇가지 PE로 해봐도 안 되네요 - 실컴 PE 부팅해도 같습니다 2020-07-11_021928.jpg (345.2KB)(1)
- VHDman.exe v2.07으로 gpt 형식의 VHD 만들기 테스트 - PE는 이상하게 몇가지 PE로 해봐도 안 되네요 - 실컴 PE 부팅해도 같습니다 2020-07-11_022013.jpg (336.4KB)(1)
-
카멜 2020.07.11 11:03
제가 가진 pe에서 테스트 해보니 같은 에러가 생기네요.
실컴에서 실행하면 convert gpt실행시 msr파티션이 생겨서 이걸 삭제하는 코딩을 넣어뒀는데 pe에서 실행해보니 msr파티션이 생기질 않네요.
삭제할 파티션이 없으니 에러가 생기면서 진행이 안되더군요.
실컴과 pe가 왜 다른지 참..
어떻게 수정해야 할지 고민이 됩니다.
msr파티션을 그대로 두면 vhdman에서의 작업이 주로 파티션 1을 선택해서 하는건데 원하는 파티션이 선택안되고 msr판티션이 선택돼서 작업이 되는 경우가 생길 수도 있고 해서요
-
suk 2020.07.11 11:11
마침 지금 댓글 달려고 했는데 오셨네요
알고 보니까 저도 1달전쯤에 어떤 테스트하면서 bat 파일 만들 때 gpt로 변환하는 것을 했습니다
그리고 그 때 실컴에서는 gpt로 변환하자마자 msr 예약 파티션이 생겨서 삭제하는 명령을 넣었고
PE에서는 gpt로 변환해도 msr이 생기지 않아서 삭제하지 않도록 했습니다.
실컴과 PE를 구분하지 않고 그냥 에러가 생기면 다르게 처리되도록 했습니다
bat 파일의 일부입니다. 그 때 bat 파일에 주석까지 달아났네요 ㅎㅎ;
>"%tmp%\diskpart.tmp" echo Select disk %disk%
>>"%tmp%\diskpart.tmp" echo clean
>>"%tmp%\diskpart.tmp" echo convert GPT
>>"%tmp%\diskpart.tmp" echo sel par 1
diskpart /s "%tmp%\diskpart.tmp" || goto :not_msr
>"%tmp%\diskpart.tmp" echo Select disk %disk%
>>"%tmp%\diskpart.tmp" echo sel par 1
>>"%tmp%\diskpart.tmp" echo del par override
:: 실컴에서는 GPT로 만들자마자 자동으로 msr 예약 파티션이 생기는 윈도가 있어서 삭제함. PE에서는 생기지 않음
:cre_par
>>"%tmp%\diskpart.tmp" echo CREATE PARTITION EFI SIZE=100
>>"%tmp%\diskpart.tmp" echo format quick fs=fat32 label="System"
>>"%tmp%\diskpart.tmp" echo assign letter="Z"
...
...
:not_msr
>"%tmp%\diskpart.tmp" echo Select disk %disk%
@goto :cre_par
1번째 파티션 선택했을 때 msr 파티션이 없어서 에러가 생긴다는 점을 이용하여 위와 같이 만들었습니다
-
카멜 2020.07.11 12:07
diskpart /s "%tmp%\diskpart.tmp" || goto :not_msr
제가 배치 파일은 잘 몰라서요. 여기서 || 의 의미가 뭔지요?
위 배치파일을 보니 efi파티션을 만드시는것 같은데 그걸 만들 필요가 있을까요? 어차피 부팅은 실컴의 efi파티션에서 할테니까요
-
suk 2020.07.11 15:25
네, || 는 오류가 생긴 것을 의미합니다. 반대로 &&는 성공한 경우를 의미합니다
제가 1달 전에 테스트한 것은 UEFI 부팅에 필요한 실컴 파티션을 만드는 것이라서 efi 파티션부터 만들었습니다
VHD 부팅과는 관련이 없는 그냥 GPT 디스크를 만드는 것이었습니다
혹시나 하는 노파심에 씁니다
위에 > 1개와 >> 2개를 주의하셔야 됩니다. 전부 > 1개나 >> 2개로 하시면 문제가 생깁니다
> 1개는 시작할 때만 사용합니다. >> 2개는 계속 추가하는 것입니다.
-
카멜 2020.07.11 16:58
네 답변 감사합니다 -
suk 2020.07.11 17:11
참고로, 위에 명령어들은 1달 전에 테스트했을 때 제대로 작동하는걸 확인한 것입니다.
msr 예약파티션이 생기든지, 생기지 않든지 제대로 작동했습니다
방금 다시 확인해봤습니다
PE에서는 gpt로 변환했을 때 msr이 생기지 않아서 1번째 파티션을 선택하면 오류가 발생합니다
그래서 1번째 파티션 삭제없이 바로 파티션 만들기를 진행합니다
윈도에서는 msr이 생기기 때문에 1번째 파티션을 선택했을 때 오류가 생기지 않습니다
-
suk 2020.07.11 21:29
제가 테스트한 것이 VHD가 아니고 일반 디스크라서 다를 수 있다고 생각하실 듯 하여 VHD를 대상으로 테스트해봤습니다
결국은 같았습니다. VHD를 만드는 것만 앞에 추가되었습니다
실컴 윈도에서 실행한 것입니다
다음은 PE에서 실행한 것입니다.
일반 디스크와 VHD가 gpt로 만들 때 같았습니다
-
카멜 2020.07.11 23:59
다양한 테스트까지 해주시고
찬찬히 잘 살펴보겠습니다 -
suk 2020.07.12 14:29
참고로 올립니다. 위에 bat 파일을 좀 더 수정했습니다
clean을 방금 만든 vhd라서 필요없어서 제외하고, 디스크를 찾는 방식을 언어와 관계없이 찾을 수 있게 했습니다
그 외에는 디스크 상태가 어떤지 보기용으로 추가했습니다
@prompt $s
@color 1f
@cd /d %~dp0
@title VHD를 GPT 디스크로 만들기
@mode con cols=200 lines=1000
@setlocal enabledelayedexpansion
@if /i "%SystemDrive%"=="X:" goto :disk
@echo 관리자권한 확인용 >%windir%\admin.confirm || @(
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\admin.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 1 >> "%temp%\admin.vbs"
wscript.exe "%temp%\admin.vbs" & del "%temp%\admin.vbs" & exit)
@del %windir%\admin.confirm
:disk
cls
@echo.
@echo.
@echo.================================================
@echo. VHD를 GPT 디스크로 만듭니다 - 10GB
@echo.================================================
@echo.
@pause
echo lis dis | diskpart
@echo.
>"%tmp%\diskpart.tmp" echo create vdisk file="%~dp0Test.vhd" maximum=10240 type=expandable
>>"%tmp%\diskpart.tmp" echo attach vdisk
diskpart /s "%tmp%\diskpart.tmp" || @(
@echo.
@echo.
@echo.================================================
@echo. diskpart 작업에 오류가 발생했습니다
@echo.================================================
@echo.
@pause
@exit
)
echo lis dis | diskpart > "%tmp%\diskpart.tmp"
@type "%tmp%\diskpart.tmp"
@echo.
for /f "tokens=2 delims=* " %%a in ('"type "%tmp%\diskpart.tmp""') do @set disk=%%a
:: 언어와 관계없이 disk 번호를 찾게 했습니다
>"%tmp%\diskpart.tmp" echo Select disk %disk%
:: 이 자리에 있던 clean은 방금 만든 vhd라서 필요 없기 때문에 제외했습니다
>>"%tmp%\diskpart.tmp" echo convert GPT
>>"%tmp%\diskpart.tmp" echo sel par 1
set error=0
diskpart /s "%tmp%\diskpart.tmp" || set error=1
>"%tmp%\diskpart.tmp" echo Select disk %disk%
if %error%==1 goto :cre_par
>>"%tmp%\diskpart.tmp" echo sel par 1
>>"%tmp%\diskpart.tmp" echo del par override
:: 윈도우에서는 diskpart로 GPT 디스크로 변환하자마자 자동으로 msr 예약 파티션이 생겨서 삭제합니다. PE에서는 생기지 않습니다
:cre_par
>>"%tmp%\diskpart.tmp" echo cre par pri
>>"%tmp%\diskpart.tmp" echo format quick fs=ntfs override
>>"%tmp%\diskpart.tmp" echo assign letter="W"
>>"%tmp%\diskpart.tmp" echo lis dis
>>"%tmp%\diskpart.tmp" echo lis par
diskpart /s "%tmp%\diskpart.tmp"
@del /f/a/q "%tmp%\diskpart.tmp"
@echo.
@echo.
@echo.=====================================================
@echo. 모든 작업을 완료했습니다
@echo.=====================================================
@echo.
@pause
@exit
이건 윈도우에서 실행한 것이고 다음은 PE에서 실행한 것입니다
위 pe는 작업에는 관계없습니다만, 조금 특이하게 %tmp% 변수가 윈도우 폴더로 되어 있더군요.
-
REFS 2020.07.10 11:30
수고많으셨습니다
강좌 잘보고갑니다..
-
규니 2020.07.10 11:57
좋은 정보 감사드립니다~ 고생하셨습니다~
-
UU自適 2020.07.10 12:44
좋은 강좌 감사합니다.
숫자 1을 다른 숫자로 하여 교차부팅이 안되게 사용하다가
필요시에 한번만 교차부팅되게 배치파일 하나 추가해주시면 좋겠습니다.
그러면 순간복구툴로 사용할 수 있겠네요.
-
카멜 2020.07.10 15:40
배치파일이 아니라 번거롭지만 가끔씩 기본부팅을 변경시에는 자식파일중 아무 파일이나 하나 선택후 교차부팅 버튼 위의 clean자식부팅을 클릭하면 다음 부팅시엔 다른 자식으로 부팅이 됩니다.
-
suk 2020.07.10 16:43
본문에 쓰려다가 혹시 제가 사용하던 것과 다를 수도 있다는 생각에 말았는데요. 방금 해보니까 제가 하던대로 됩니다
자동 교차 부팅은 강제적인 것은 아닙니다
부팅 때 자동 선택된 메뉴와 반대로 기존에 부팅하시던 자식 VHD를 선택하여 부팅하시면 계속 사용하시던대로 유지가 됩니다
필요시에만 자동 선택된 메뉴를 선택하시면 초기화가 됩니다. 따라서 bat 파일은 필요하지 않을 듯 합니다
-
dakgong 2020.07.10 14:53
열정과 노고에 박수를 보냅니다. 포스팅을 해주셔서 감사합니다.
-
아긔천사 2020.07.11 10:22
잘보고갑니다 염치업지만 공유가능하신가요
-
ehdwk 2020.07.11 11:19
수고하셨습니다. -
와로 2020.07.11 16:03
suk님이 4년전에 올려주신 "교차부팅 bat 패키지 상품" 지금까지 아주 잘 사용하고 있습니다 https://windowsforum.kr/review/7127829
그리고 카멜님의 VHDman알기전까진 자식들을 디스크파트 카피 명령어와 bcdboot으로 힘들게 낳고 키웠었는데
클릭 몇번으로 쉽게 VHD패밀리 구성할수 있게 해주신 두분께 다시한번 감사드립니다~!
-
티어s 2020.07.14 23:17
https://www.snoopybox.co.kr/1428?category=316318
이 내용으로 수동으로도 되는데 vhdman으로 하는것과 무슨원리차이인지 궁금합니다
-
광풍제월 2020.07.16 04:38
좋은강좌.
잘봤습니다.
수고하셨습니다.
수고해 주신 정보를 따라 하기 쉽게
많은 캡처와 자세한 설명으로 풀어주신
suk님의 강좌에 초보는 늘 감사합니다.