강좌 / 팁

윈 도 우 자식 VHDX 부팅, 해결 방법입니다

2012.11.05 08:00

suk 조회:12470 추천:7

win7에서 vhd만 자식으로 연결하여 몇달 사용해봤는데요

 

win8에서 vhdx는 어쩐지 부모vhdx는 잘 부팅이 되는데

 

자식 vhdx로 부팅을 하면 시작도 하지 못 하네요.

 

웃기는 점은 처음에는 부팅이 됩니다.

 

부모vhdx로 부팅 후에 다시 자식으로 부팅하면 영영 부팅이 안 됩니다

 

이 이상한 현상을 겪는 분들이 많아서 이 글을 씁니다.

 

이유는 vhdx는 부모파일이 바뀌면 다시 자식vhdx를 만들어줘야 합니다 orz (부팅만 해도 여러 파일들이 수정됩니다.)

 

자식vhdx로만 부팅하시면 (교대로 하는 부팅 포함) 괜찮습니다.

 

오늘 테스트를 해보니까 확실하더군요. . .

 

이제 본격적으로 C드라이브에 win8 vhdx를 사용하시는 분들 중에 자식vhdx까지 사용하시려는 분들은...

 

모든 작업은 PE의 cmd창에서 진행합니다.(아차,vhdx 부팅하시려면 4.0PE가 필요합니다)

 

* 좋은 것은 밑에 있습니다 ㅎㅎ

 

format /q c:

 

:일단 C를 빠른 포맷합니다

 

diskpart

rem 여기부터 전부 다 붙여넣기 합니다.

 

create vdisk file=c:\Win8_Pro_K.vhdx maximum=30720 type=expandable
rem vhdx이름과 용량을 변경하세요. 용량은 MB입니다(30G). 고정으로 하시려면 fixed

 

sel vdi file=c:\Win8_Pro_K.vhdx
rem 역시 vhdx 이름 변경해주세요

 

attach vdi
rem vhdx 연결,마운트 하는 겁니다

 

cre par pri
rem vhdx에 파티션을 만들어주는 겁니다

 

format fs=ntfs quick label=vhdx
rem vhdx를 포맷을 하는겁니다. 빠른 포맷. vhdx 볼륨 라벨(이름)은 변경하셔도 됩니다.

 

ass letter=j
rem vhdx 드라이브 문자할당 합니다.

 

exit

:diskpart를 종료합니다

 

d:\imagex.exe /apply "d:\sources\install.wim" 1 j:\

:마운트한 vhdx에 install.wim파일을 압축해제 합니다

 

bcdboot j:\windows /s c:
:vhdx를 c드라이브에 부팅파일 만드는 겁니다. 이대로 사용하시면 됩니다.

 

bcdedit /store c:\boot\bcd /set {default} bootmenupolicy  legacy

:win7형식 부팅메뉴..win8형식으로 부팅하면 자꾸 처음으로 돌아가서 부팅을 합니다;; 그래서..

 

:여기까지 한꺼번에 붙여넣기 하세요(설명 포함해도 됩니다) 주루룩 되는 걸 보시고 놀라실 겁니다 ㅎㅎ

 

2번째로 vhdx 상태로 다운 받으신 분들은...

 

역시 PE에서 작업을 합니다.

 

format /q c:

 

:일단 C를 빠른 포맷합니다

 

diskpart

rem 여기부터 붙여넣기 합니다.

 

sel vdi file=c:\Win8_Pro_K.vhdx
rem 역시 vhdx 이름 변경해주세요

 

attach vdi

rem vhdx 연결,마운트 하는 겁니다

 

lis vol

rem 볼륨확인 합니다. 드라이브 문자 확인

 

exit

:diskpart 종료합니다

: 일단 여기까지 붙여넣기 하시면 됩니다.

 

bcdboot j:\windows /s c:
: c드라이브에 부팅파일 만드는 겁니다. j:은 방금 확인한 걸로 변경해주세요.

 

bcdedit /store c:\boot\bcd /set {default} bootmenupolicy  legacy

:win7형식 부팅메뉴..win8형식으로 부팅하면 자꾸 처음으로 돌아가서 부팅을 합니다;; 그래서..

 

위 방법보다는 좀 더 단순하죠. 이미 설치가 되어 있으니까요.

 

3번째로 기존 윈도는 그대로 두시고 다운 받으신 vhdx만 멀티부팅으로 하시려는 분들도 계시더군요.

 

이건 그냥 윈도상에서 해결됩니다

diskmgmt.msc 디스크관리 ->동작 ->vhd열기

 

bcdboot j:\windows 
: j:은 방금 확인한 걸로 변경해주세요.

 

bcdedit /set {default} bootmenupolicy  legacy

: 역시 멀티부팅이라서 7형식으로 해야 빠릅니다.

 

일단 이렇게 하신 다음에 재부팅하셔서 부모파일을 설치를 해주세요

 

이것 저것 다 설치하시고 다시 PE로 오십니다. 여기서 제 나름대로 방금 작품?을 하나 만들었습니다

 

부모파일 업데이트 할때마다 자식vhdx를 만드는 것이 귀찮은 작업이죠.

 

그래서 클릭만 하면 자동으로 모든게 다 되는 bat파일을 만들었습니다.

 

개인적으로는 vhdx 사용도 안 하는데 이게 무슨...

 

주의할 것은 2번째부터 자식vhdx를 만드실 때는

 

먼저, 부모파일로 부팅하셨을 때는 잊지 말고 msconfig ->부팅에서 자식vhdx를 다 삭제해주세요.

 

계속 부팅 메뉴가 쌓여가기 때문이죠.(나중에 자식vhdx에서 해주셔도 됩니다. 부팅파일은 vhdx와 별도로 있기 때문이죠)

 

 

bat파일 내용입니다.

 

바꾸실 것은 부모vhdx 3개만 하시면 되겠네요(이름을 위와 같이 하셨으면 그대로 사용가능합니다)

이 밑은 그냥 혹시나 해서 참고용이고요. 해당 안 되는 경우는 신경 안 써셔도 됩니다.

 

ace.vhdx는 교체용 파일이고요 son, son2가 교대로 부팅하는 자식vhdx입니다.

그냥 이대로 사용하시는 것이 편하죠. 여기서 또 한번 주루룩 자동으로 다 되는 것에 놀라실 듯?;;

 

*가장 주의할 점: 밑의 파일은 클릭만 하면 다 끝나서야 멈춥니다;;

그러니까 미리 변경하실 것은 변경하고 클릭하세요.

 

혹시나해서..C드라이브를 기준으로 만든 겁니다. C가 아니면 c:을 전부 바꿔주셔야 합니다

vhdx파일 경로만 아니라 bcdedit /store c:\boot\bcd /set %%a osdevice vhd="%vhdaddpathbcd%"

이런 것 엄청 많죠. 전부 다 바꾸셔야 합니다. 한꺼번에 바꾸기를 이용하세요 ctrl+h c:\boot를 d:\boot 이런 식으로요.

기존 윈도 사용하시는 분들은 vhdx파일 경로만 바꾸시면 됩니다. c:\boot 이건 윈도만 C드라이브에 설치되어 있으면 됩니다.

vhdx는 어디에 있건 관계없죠.

 

 

@echo off
title VHDX 자식2개 부팅등록하기
mode con cols=70 lines=200
cd /d %~dp0

:============== 기존 자식 VHDX 삭제하기 =================


del c:\ace.vhdx
del c:\son.vhdx
del c:\son2.vhdx

:처음 자식vhdx 만드실때 실행해도 상관없습니다. 삭제할게 없다고 에러가 나봐야 ..


:=============== 3가지 자식 VHDX 만들기, 경로와 파일 이름에 주의해주세요.================

:ace.vhdx는 교체파일입니다. 부팅등록은 하지마세요.

echo cre vdi file=c:\ace.vhdx parent=c:\Win8_Pro_K.vhdx >temp.txt
echo cre vdi file=c:\son.vhdx parent=c:\Win8_Pro_K.vhdx >>temp.txt
echo cre vdi file=c:\son2.vhdx parent=c:\Win8_Pro_K.vhdx >>temp.txt

diskpart /s temp.txt

del temp.txt


:======================= 첫번째 자식 VHDX 부팅등록 ========================

 

:경로를 입력해주세요 c:\son.vhdx 이런 것이 다르면 변경 입력해주세요.

set vhdaddpath=c:\son.vhdx

:부팅 이름을 정해주세요

set vhdaddmenu=Son.vhdx

:밑에 2번째 vhdx파일도 입력해주시고 실행하세요.


 

:이런 건 복잡해도 신경 안 쓰셔도 됩니다. 부팅 등록하는 것이죠. c드라이브만 맞는지 확인하시면 됩니다.
for /f "tokens=1 delims=\" %%a in ("%vhdaddpath%") do set vhdaddpath1=%%a
for /f "tokens=2 delims=:" %%a in ("%vhdaddpath%") do set vhdaddpath2=%%a
set vhdaddpathbcd=[%vhdaddpath1%]%vhdaddpath2%
bcdedit /store c:\boot\bcd /create /application OSLOADER /d "%vhdaddmenu%" > %temp%\guid.txt

 

for /f "tokens=1 usebackq" %%a in (%temp%\guid.txt) do (
 bcdedit /store c:\boot\bcd /set %%a device vhd="%vhdaddpathbcd%"
 if errorlevel 1 goto _vhdaddnotkor
 bcdedit /store c:\boot\bcd /set %%a osdevice vhd="%vhdaddpathbcd%"
 bcdedit /store c:\boot\bcd /set %%a path \Windows\system32\winload.exe
 bcdedit /store c:\boot\bcd /set %%a locale ko-KR
 bcdedit /store c:\boot\bcd /set %%a inherit {bootloadersettings}
 bcdedit /store c:\boot\bcd /set %%a systemroot \Windows
 bcdedit /store c:\boot\bcd /set %%a nx OptIn
 bcdedit /store c:\boot\bcd /set %%a detecthal Yes
 bcdedit /store c:\boot\bcd /displayorder %%a /addlast
 bcdedit /store c:\boot\bcd /timeout 30
 goto _vhdaddsuccess
)

:_vhdaddnotkor
for /f "tokens=2 usebackq delims={" %%a in (%temp%\guid.txt) do (
 for /f "tokens=1 usebackq delims=}" %%b in ('%%a') do (
  bcdedit /store c:\boot\bcd /set {%%b} device vhd="%vhdaddpathbcd%"
  bcdedit /store c:\boot\bcd /set {%%b} osdevice vhd="%vhdaddpathbcd%"
  bcdedit /store c:\boot\bcd /set {%%b} path \Windows\system32\winload.exe
  bcdedit /store c:\boot\bcd /set {%%b} locale ko-KR
  bcdedit /store c:\boot\bcd /set {%%b} inherit {bootloadersettings}
  bcdedit /store c:\boot\bcd /set {%%b} systemroot \Windows
  bcdedit /store c:\boot\bcd /set {%%b} nx OptIn
  bcdedit /store c:\boot\bcd /set {%%b} detecthal Yes
  bcdedit /store c:\boot\bcd /displayorder {%%b} /addlast
  bcdedit /store c:\boot\bcd /timeout 30
  goto _vhdaddsuccess
)

:_vhdaddsuccess


:============================ 2번재 VHDX 파일 등록 ====================================


:경로를 입력해주세요
set vhdaddpath=c:\son2.vhdx

:부팅 이름을 정해주세요
set vhdaddmenu=Son2.vhdx

 

 

for /f "tokens=1 delims=\" %%a in ("%vhdaddpath%") do set vhdaddpath1=%%a
for /f "tokens=2 delims=:" %%a in ("%vhdaddpath%") do set vhdaddpath2=%%a
set vhdaddpathbcd=[%vhdaddpath1%]%vhdaddpath2%
bcdedit /store c:\boot\bcd /create /application OSLOADER /d "%vhdaddmenu%" > %temp%\guid.txt

for /f "tokens=1 usebackq" %%a in (%temp%\guid.txt) do (
 bcdedit /store c:\boot\bcd /set %%a device vhd="%vhdaddpathbcd%"
 if errorlevel 1 goto _vhdaddnotkor
 bcdedit /store c:\boot\bcd /set %%a osdevice vhd="%vhdaddpathbcd%"
 bcdedit /store c:\boot\bcd /set %%a path \Windows\system32\winload.exe
 bcdedit /store c:\boot\bcd /set %%a locale ko-KR
 bcdedit /store c:\boot\bcd /set %%a inherit {bootloadersettings}
 bcdedit /store c:\boot\bcd /set %%a systemroot \Windows
 bcdedit /store c:\boot\bcd /set %%a nx OptIn
 bcdedit /store c:\boot\bcd /set %%a detecthal Yes
 bcdedit /store c:\boot\bcd /displayorder %%a /addlast
 bcdedit /store c:\boot\bcd /timeout 30
 goto _vhdaddsuccess
)

:_vhdaddnotkor
for /f "tokens=2 usebackq delims={" %%a in (%temp%\guid.txt) do (
 for /f "tokens=1 usebackq delims=}" %%b in ('%%a') do (
  bcdedit /store c:\boot\bcd /set {%%b} device vhd="%vhdaddpathbcd%"
  bcdedit /store c:\boot\bcd /set {%%b} osdevice vhd="%vhdaddpathbcd%"
  bcdedit /store c:\boot\bcd /set {%%b} path \Windows\system32\winload.exe
  bcdedit /store c:\boot\bcd /set {%%b} locale ko-KR
  bcdedit /store c:\boot\bcd /set {%%b} inherit {bootloadersettings}
  bcdedit /store c:\boot\bcd /set {%%b} systemroot \Windows
  bcdedit /store c:\boot\bcd /set {%%b} nx OptIn
  bcdedit /store c:\boot\bcd /set {%%b} detecthal Yes
  bcdedit /store c:\boot\bcd /displayorder {%%b} /addlast
  bcdedit /store c:\boot\bcd /timeout 30
  goto _vhdaddsuccess
)

:_vhdaddsuccess

bcdedit /store c:\boot\bcd /set {default} bootmenupolicy  legacy

:win7형식으로 부팅하는 겁니다. win8 형식으로 하면 다시 처음부터 부팅해서 느립니다


bcdedit /store c:\boot\bcd


echo.
pause

exit

방금 테스트 완료했습니다.

 

주루룩.등록.png

 

 

주루룩.등록2.png

 

이건 윈도상에서 한 겁니다. PE에서 한 거는 미처 캡처를 못 했군요.

 

 

마지막으로 부팅할때마다 자식vhdx 자동교체하는 건 vhdx가 부모파일 변하면 안 된다고 해서 난감하더군요

 

이것도 어느정도 자동화가 가능하군요. 반자동화.

 

@echo off
copy  c:\ace.vhdx c:\son.vhdx && bcdedit /bootsequence {65953bd6-5cd7-11e0-b01e-00016c61a9ba} 
if errorlevel 1 copy c:\ace.vhdx c:\son2.vhdx && bcdedit /bootsequence {65953bd7-5cd7-11e0-b01e-00016c61a9ba}

shutdown /r /t 0
exit

 

{ } 이런 것은 방금 자식vhdx 등록하실 때 나오는 화면에서 위 창 제목에서 우클릭으로 '편집'->'표시'로 하여

복사,붙여넣기 하시면 됩니다. 실행하시면 다른 자식vhdx 초기화 한 후에 바로 재부팅됩니다.

부팅 선택조차 안 되니까 다른 자식vhdx로 부팅하실 때만 이용하세요. 지금 부팅메뉴를 선택하는 것과 같습니다.

 

근데 if errorlevel 1 은 없어도 되겠는데요 ;; 괜히 한 듯..중간에 && 이 비슷한 역할이죠.

 

또 조금 전에는 win8이 있는 상태에서 vhdx를 만들어서 테스트해봤는데요

편하기는 제일 편하네요. 윈도 상에서 모든 작업을 다 할 수 있기 때문입니다. 맛보기로는 이게 나을 듯..

 

자식VHDX부팅등록하기.bat

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
538 윈 도 우| 사무실 확인 시 확인ID 중요하군요. [6] 바부맨 11391 2 11-16
537 윈 도 우| [작은팁] 익스플로러 탭 분리하기 [4] 유치원때모 12255 1 11-16
536 윈 도 우| 모던(매트로) UI용 익스플로러에서 플래쉬 사용하기 [7] 고맙쥐 13696 7 11-15
535 윈 도 우| 윈도우8 알면 좋은 팁 5가지 동영상 [4] wopd 15217 1 11-13
534 윈 도 우| 윈도우8에서 스크롤바 두께 조절하기 [2] eeeeeeelll 15167 1 11-13
533 윈 도 우| KMSmicro v3.10 설치시 libssp-0.dll 오류 [1] 민꼴 16626 2 11-12
532 윈 도 우| 윈8 팁 [5] 지그재그 16846 9 11-12
531 윈 도 우| 윈8 구입 설치후 재설치 [9] camaver 10858 1 11-11
530 윈 도 우| 윈도우8 다국어 언어팩 설치 방법(영문 기준) [7] chkid 51185 5 11-11
529 윈 도 우| 자신의 운영체제 제품키 보기를 원하시는분들... [8] LastID 13383 1 11-11
528 윈 도 우| 윈도우 8 메트로 UI 기본 앱 바로가기 [4] 머스빅 12216 2 11-10
527 윈 도 우| IE10 으로 윈도우포럼 왔을때... [11] LastID 11376 3 11-10
526 윈 도 우| UEFI 설치의 모든것 [13] LazyFlow 20647 4 11-09
525 윈 도 우| UEFI로 설치한 윈8에서 vhdx 부팅메뉴 추가 [12] 바람의언덕 11016 4 11-09
524 윈 도 우| 삼실 13 볼륨 사용기한 조정하기 [5] 라임바바 9806 2 11-09
523 윈 도 우| USB UEFI 설치 팁 [29] 보[boram]람 18758 3 11-09
522 윈 도 우| 볼륨 믹서 프로그램별 설정 초기화 [1] Per4u3e 11136 3 11-08
521 윈 도 우| 윈도우 8 레지스트리 파일 몇개올립니다. [14] 머스빅 16584 10 11-08
520 윈 도 우| 윈도우8 오버스캔 문제 [3] emd 11898 1 11-06
» 윈 도 우| 자식 VHDX 부팅, 해결 방법입니다 [10] suk 12470 7 11-05
XE1.11.6 Layout1.4.8