부모VHD생성하여 윈도우 설치


이미 윈도우7이 설치된 상태에서는 보다 편하게

새로운 VHD에 윈도우를 설치하고 VHD를 부팅메뉴에 등록시킬 수 있지만 본 포스팅에서는

XP가 이미 설치되어 있든,윈도우7이 설치되어 있든, 아니면 아예 새하드디스크이든,

모든 상태에서 적용가능할 수 있도록 새 하드디스크라고 가정하고 작업을 해보겠습니다.

요즘에는 제가 제작한 pe를 포함해 pe상태에서 보다 쉽게 vhd를 생성 및 관리를 해줄 수 있지만,

언제나 기본에 충실해야하고 기본원리를 알아야만이 자체 문제 해결능력을 높일 수 있기 때문에

원초적인 방법으로 VHD에 윈도우를 설치하고 자식VHD까지 생성한 후

부팅할 때마다 깨끗한 자식VHD로 부팅하기 위한 세팅까지 해보도록 하겠습니다.

먼저 윈도우7 DVD나 USB로 부팅을 합니다.(UltraISO로 부팅가능한 USB 만들기)

부팅을 하게 되면 아래 그림처럼 윈도우를 설치할 파티션을 설정하는 곳까지 옵니다.




새하드디스크라서 포맷되어 있지 않아 할당되지 않은 공간(RAW)이라면 “새로 만들기”로 파티션을 만들어주고

포맷을 해줍니다. 물론 이때 예약 파티션이 생성되지 않도록 100MB이하로 한번 생성하였다가 원하는 크기로

확장시키는것 잊지 마시고요.

이상태에서 SHIFT+F10을 눌러 명령프롬프트 창을 띄우고 아래와 같이 명령어를 때립니다.

C: 

vhd파일을 저장할 파티션으로 이동합니다.

md vhd

vhd파일을 저장할 폴더인 vhd폴더를 생성합니다. 나중에 자식vhd까지 생성해야하고 또 나중에 다른 vhd를 멀티부팅할 수도 있기 때문에 vhd파일만 따로 한 폴더에 모아 관리를 용이하게 하기 위해서입니다.

diskpart

윈도우자체 디스크파티션툴인 diskpart를 실행시킵니다.

create vdi file=c:\vhd\Win7.vhd maximum=10240 type=expandable

c:\vhd\Win7.vhd는 vhd를 생성할 위치와 vhd의 파일명을 지정하는 것입니다.

maximum=10240은 VHD로 부팅했을때 C:의 용량으로 자신이 윈도우외에 용량 큰 응용프로그램을 많이 설치한다면

거기에 맞게 지정을 하면 됩니다. 단위는 MB이므로 10GB는 10240이 됩니다.

type=expandable은 vhd디스크의 저장방식으로

fixed와 expandable 두가지가 있는데 fixed는 고정디스크로 앞서 정한 vhd크기가 고정됩니다.

10기가로 지정했다면 vhd에 3기가만 설치해도 하드디스크내에서 차지하는 vhd파일크기는 10기가가 됩니다.

반면에 expandable은 동적디스크로 3기가만 설치했다면 실제 하드디스크에서 차지하는 용량도 3기가가 됩니다.

성능면에서 고정디스크가 약간 좋지만 체감할 정도는 아니기에 용량절약차원에서  동적디스크를 추천합니다.

attach vdi(또는 attach vdisk)

생성한 vhd 디스크를 마운트해줍니다. (vhd 연결)



다시 윈도우 설치화면으로 돌아가서 방금 마운트한 vhd디스크가 보이도록 새로고침을 눌러줍니다.




그럼 이제 일반적으로 윈도우7을 설치하듯이 “다음”을 눌러 설치를 진행합니다.



 

자식VHD를 생성하여 부팅메뉴에 등록시키기

윈도우 설치를 모두 마치면 또 다시 윈도우7 DVD/USB로 부팅을 해줍니다.

자식 VHD를 생성하기 위해서인데 부모VHD로 부팅한 상태에서는 불가능하기 때문에

PE로 부팅하여 생성해주기 위해서입니다. (PE가 대체 무엇인가요?)

PE로 부팅하면 바로 SHIFT+F10을 눌러 커맨드창을 열어줍니다.

diskpart

cre vdi file=c:\vhd\Win7A.vhd parent=c:\vhd\Win7.vhd

c:\vhd\Win7A.vhd는 생성할 자식 vhd의 위치와 파일명입니다.

parent=c:\vhd\Win7.vhd는 자식의 부모가 누구인지 타켓팅하는것입니다. 호로자식을 만들면 안돼겠죠.

그리고 자식과 부모의 위치는 파티션이 같아야 합니다. 부모님은 한국에 사시는데 자식을 미국에서 키울 순 없죠.

exit

copy c:\vhd\Win7A.vhd c:\vhd\Win7B.vhd

copy c:\vhd\Win7A.vhd c:\vhd\Win7Clean.vhd

생성한 자식인 Win7A.vhd를 Win7B.vhd와 Win7Clean.vhd라는 이름으로 2개를 더 만들어줍니다.

이 3개의 자식vhd들은 이제 모두 일란성 세쌍둥이가 되었습니다.


 

자식A를 부팅메뉴에 등록

diskpart

sel vdi file=c:\vhd\Win7A.vhd

작업할 자식vhd A를 선택해줍니다.

attach vdi

마운트합니다.

list vol

마운트된 vhd디스크의 드라이브 문자를 알아봅니다.

exit

bcdboot f:\windows /l ko-KR

마운트된 자식vhd Win7A.vhd를 부팅메뉴에 등록시켜줍니다. 앞서 list vol로 알아본 드라이브문자로 입력해줍니다.
저같은경우 f:입니다.
 

자식B를 부팅메뉴에 등록

diskpart

sel vdi file=c:\vhd\Win7A.vhd

이전에 마운트된 자식A를 선택하고

detach vdi

마운트된 자식A를 언마운트해줍니다.(vhd 분리)

sel vdi file=c:\vhd\Win7B.vhd

작업할 자식vhd B를 선택해줍니다.

attach vdi

마운트합니다.

list vol

마운트된 vhd디스크의 드라이브 문자를 알아봅니다.

exit

bcdboot f:\windows /l ko-KR

마운트된 자식vhd Win7B.vhd를 부팅메뉴에 등록시켜줍니다.



※ Diskpart와 일반 커맨드창을 계속 exit와 diskpart로 오가며 작업을 하게 되면 한번 선택한 vhd를 또다시 선택해주어야

하므로 이렇게 애초에 창을 두개 띄어 한쪽에서는 diskpart를 하고 bcdboot가 필요할때만 다른 일반 커맨드창에서 작업을

하셔도 됩니다.



모두 끝마치면 이제 재부팅을 합니다. 부팅메뉴등록을 BCDBOOT.EXE를 통해 했기 때문에

부팅메뉴에 등록된 이름들이 모두 하나같이 Windows 7입니다.

bcdboot로 등록을 하게되면 가장 마지막에 등록한 메뉴가 가장 상단에 위치하며 기본부팅메뉴로 잡히기 때문에

저와같이 똑같은 순서로 작업했다면 각 부팅메뉴는 아래와 같습니다.



 가장 아래에 있는 부모 VHD로 부팅을 합니다. 

Differencing VHD 구현


커맨드창을 관리자 권한으로 열어주고 bcdedit를 입력합니다.



 

현재 부팅된 OS가 부모vhd이고 기본부팅메뉴가 pe에서 가장 마지막에 추가시킨 자식vhd B입니다.

나중에 GUID라는 식별기호를 직접 입력해야하는데 아래 그림과 같이

자식vhd B는 GUID가 {default}로 나와버리기 때문에 현재의 부모vhd를 기본부팅메뉴로 먼저 바꾸어 주어

자식vhd B의 GUID가 나오도록 해줍니다.



bcdedit /default {current}



이렇게 자식 vhd의 GUID가 정상적으로 나오게 됩니다.

자식VHD A와 B의 GUID를 복사하여 메모장을 열어서 아래와 같이 적어줍니다.

@echo off 
pushd d:\VHD 
bcdedit /default {23EE7B16-7720-11E1-A550-E8006F6638CF} & copy Win7Clean.vhd Win7A.vhd 
if errorlevel 1 bcdedit /default {23EE7B17-7720-11E1-A550-E8006F6638CF} & copy Win7Clean.vhd Win7B.vhd 
exit

노랑색에는 자식VHD A의 GUID를 적고

빨강색에는 자식VHD B의 GUID를 적으면 됩니다. GUID는 부팅항목을 생성할때 랜덤으로 알파벳과 숫자로 생성되기

때문에 자신의 부팅항목의 GUID를 적으셔야합니다. 저와 똑같이 적으면 안됩니다.^^

그리고 pushd d:\vhd는 vhd로 부팅했을때의 vhd파일의 위치경로입니다.

스크립트의 내용은

자식a로 부팅을 하면 다음 부팅시에는 자식b로 부팅을 하도록 설정하고 자식b.vhd는 자식clean.vhd로 교체되어

다음 부팅때에는 깨끗한 자식vhd로 부팅이 되는 원리입니다.

이제 이것을 스크립트로 저장을 해줍니다.

파일형식에서 모든파일로 선택하고 확장자를 CMD로 하셔야합니다. 저는 VHD.CMD로 저장을 했습니다.



이 파일을 윈도우가 시작할때마다 자동으로 시작할 수 있도록 시작메뉴에 등록시킵니다.

여기서 잠깐!

bcdedit는 관리자권한이 필요하므로 윈도우계정을 관리자계정으로 만든 상태이거나 사용자 계정 컨트롤(UAC)가 최하로 되어 있어야합니다.

시작을 눌러 시작프로그램폴더에서 우클릭해주세요. “ 열기-모든 사용자 “ 클릭



vhd.cmd파일을 복사해줍니다. 물론 이동해줘도 되고요.



현재 부팅기본항목이 부모vhd로 되어 있으니 바로 다음 재부팅부터 자식들로 부팅을 하고 싶다면

vhd.cmd파일을 한번 실행시켜주시고 재부팅하면 멀티부팅메뉴에 자동으로 자식vhd가 선택되어집니다.

이제 작업은 모두 끝났지만 현재 시간이 30초라서 너무 길고, 부모와 자식들의 부팅항목이름이 모두 같기 때문에

부팅메뉴대기시간과 멀티부팅메뉴에서 표기되는 부팅항목들의 이름을 변경해보도록 하겠습니다.

부팅시간변경하기

실행에서 msconfig



부팅항목에서 제한시간을 조절하시면 됩니다.



또는 커맨드창에서

bcdedit /timeout 10

부팅메뉴항목 이름변경

bcdedit /set {변경할 부팅항목의 GUID} description "새로 표시될 이름"

예를 들어 자식A를 바꾸고 싶다면 이렇게 하시면 됩니다.

bcdedit /set {23EE7B16-7720-11E1-A550-E8006F6638CF} description "Win7 Child A"

이제 모든 작업을 완료했습니다.



이제 가끔 업데이트할일이 있거나 주로 써야하는 프로그램이 생겼다면 가끔씩 부모vhd로 부팅을 하여 작업만 해주면 됩니다.

그외엔 항상 자식 A와 B로 교차부팅하여 부팅할때마다 깨끗하고 최적화된 상태로 부팅이 가능합니다.

지금까지 정석으로 3개의 자식vhd를 생성하여 자식 2개의 교차부팅을 통한 Differencing VHD에 대해 알아봤습니다만,

이 모든 작업을 쉽게 할 수 있도록 pe로 제작해봤습니다.

윈도우7 VHD 쉽고 간편하게 설치하기 - Differencing VHD

VHD에 대해 아직 잘 모르시는 분은 윈도우7 VHD 부팅의 개념과 활용


출처 : http://maximer.tistory.com/324

posted by ZeroZZaNG™