몇몇 분들이 지난번에 포스팅했던 Differencing VHD에서 항상 깨끗한 VHD로 부팅하기 글에 대해 질문을 자주 주셨기 때문에 이번 기회에 정리를 한번 해보려 합니다.

일단 이 시나리오는 현재 제가 사용중입니다. 이렇게 사용하기 시작한지 벌써 두달이 지났습니다. 그런데 다른 분들께는 그다지 권장하지 않습니다. 왜냐하면... 굳이 이렇게 구성할 필요가 없기 때문입니다. 제가 이렇게 사용하는 이유는 제가 컴퓨터를 사용하는 스타일이 다른 분들과 많이 다르기 때문입니다. 일단 저는 지워지면 안 되는 파일은 전부 C 드라이브를 제외한 나머지 드라이브에 보관합니다. 그렇기 때문에 C 드라이브는 언제든지 날려먹어도 상관이 없습니다. uTorrent도 E 드라이브로 두고 사용하고, 아이튠즈 설정, 백업파일도 E 드라이브로 옮겨두고 사용하고, 크롬 플러스도 D 드라이브에 두고 사용하고...

그래서 저는 매번 부팅시마다 C 드라이브가 초기화 되어도 상관이 없습니다. 또한 저는 블로그 특성상 프로그램 설치를 자주 하는 편이고 레지스트리 수정도 자주 하는 편입니다. 막 연습장에 낙서하듯이 C 드라이브를 멋대로 사용해버립니다. 어차피 재부팅하면 초기화 되기 때문에 막 거칠게 다뤄도 상관이 없습니다.

이해를 돕기 위해 지금 제가 사용하고 있는 Differencing VHD 2개로 교차 부팅하는 방식을 그림판으로 설명드리겠습니다.



현재 제가 사용중인 SSD 안에는 총 4개의 VHD 파일이 들어있습니다.

부모, 자식 1번, 자식 2번, 깨끗한 자식

그림으로 이해가 되시겠지만, 멀티부팅 메뉴에는 부모, 자식1, 자식2 이렇게 3가지가 등록되어 있습니다. 깨끗한 자식은 부팅메뉴에 등록할 필요가 없습니다. 저놈은 부팅할 일이 없고 그냥 교체용 파일일 뿐이기 때문입니다. 

그런데 저 자식 3개는 사실 일란성 세 쌍둥이입니다. 저는 DISKPART에서 자식을 만들 때 1개만 만듭니다. 나머지 2개는 전부 복사본입니다. 따라서 결국 3개 다 똑같은 파일입니다. 똑같은 부모를 가지고 있고 처음 만들었을 때 그 크기는 100kb 정도밖에 되지 않습니다. 똑같은 놈들인데 이름만 다르게 붙여서 파일 3개로 보관하고 있는 것입니다.


현재 제가 자식 1번으로 부팅했다고 가정하겠습니다. 이때 윈도우 진입시 두가지 작업이 자동으로 진행됩니다.

1. 다음 부팅시 자식 2번으로 부팅되도록 기본 부팅 메뉴를 변경해버린다.
2. 자식 2번 자리에다 깨끗한 자식을 복사해 덮어씌운다. 즉 더러워진 자식 2번을 초기화 한다는 뜻.

이제 제가 자식 1번에서 완전 개망나니 짓을 해서 C 드라이브를 초토화 시켰다고 가정하겠습니다. 이때 재부팅을 합니다. 그러면 이번엔 자동으로 자식 2번으로 부팅되겠죠? 자식 2번은 바로 위에서 말씀드렸듯이 깨끗한 자식으로 초기화 되었기 때문에 완전 백지상태 연습장입니다. 이때 마찬가지로 자식 2번 윈도우로 진입시 또 자동으로 두가지 작업이 진행됩니다.

1. 다음 부팅시 자식 1번으로 부팅되도록 기본 부팅 메뉴를 변경해버린다.
2. 자식 1번 자리에다 깨끗한 자식을 복사해 덮어씌운다. 즉 방금 초토화 시켰던 자식 1번을 초기화 한다는 뜻.

따라서 자식 2번으로 부팅해서 멋대로 놀다가 다시 재부팅을 하면 이번엔 깨끗한 자식 1번으로 부팅이 되는 것입니다. 이렇게 2개의 자식을 가지고 교차로 부팅하면서, 서로 부팅했을 때 반대쪽 자식을 깨끗하게 초기화 시켜버리기 때문에 항상 부팅시 깨끗한 자식으로만 부팅하는 것이 가능해집니다.



어차피 이렇게 구성하실 분들은 VHD에 대해 대충 다 이해하고 계시리라 생각하기 때문에 전체 과정을 뼈대만 나열해보겠습니다.

1. 먼저 윈도우 7을 VHD 안에 설치합니다. 이 작업은 부모 VHD를 구성하는 작업입니다.
윈도우 7 VHD 만들어서 설치하기

2. 윈도우 설치를 완료했다면 각종 프로그램 설치, 윈도우 업데이트, 나만의 최적화 등의 작업을 합니다. 더이상 완벽할 수 없다고 느낄 정도의 완벽한 부모 VHD를 구성합니다. 완전무결 완벽셋팅 마스터 하드를 만든다고 생각하시면 됩니다.

3. 이제 자식 VHD를 만들 차례입니다. PE 환경으로 진입합니다. 부모 VHD로 부팅된 상태에선 자식을 생성할 수 없기 때문입니다. PE로 부팅한 다음 DISKPART로 들어가서 자식을 하나 만들기만 하고 바로 나옵니다. 다른 작업은 하지 마시고 딱 만들기만 하고 바로 빠져나오세요.

예제)
diskpart
create vdisk file=c:\vhd\clean.vhd parent=c:\vhd\win7.vhd
exit

4. 이제 재부팅 해서 다시 부모 VHD로 진입합니다. 방금 만들었던 clean.vhd 파일을 찾아갑니다. 아마 그 크기는 100kb 내외일 것입니다. 이놈을 복사해서 2개를 더 만듭니다. 그러니까 총 3개의 100kb 파일이 필요합니다. 그림으로 설명드리죠. 저는 복사본의 이름을 각각 child1.vhd와 child2.vhd로 했습니다.


5. 이렇게 해놓고 이제 child1.vhd 파일과 child2.vhd 파일을 부팅 메뉴에 등록시킵니다. 부팅 메뉴에 등록시키는 작업을 조금 편하게 하려면 아래 툴에서 4번 메뉴를 이용해보세요.
윈도우 7 BCD 종합 관리도구

6. 지금까지 잘 따라오셨다면 멀티부팅 메뉴에 부모, 자식1, 자식2 까지 등록되어 있을 것입니다. 이제 윈도우 진입시 자동으로 상대편 자식을 깨끗한 clean.vhd 파일로 교체해주고 다음 부팅시 상대편 자식으로 부팅되도록 작업을 해줘야겠지요? 그게 바로 Differencing VHD에서 항상 깨끗한 VHD로 부팅하기 글입니다. 그런데 각자 자신의 부팅메뉴 GUID를 스크립트에 적어야 하는데, 제가 예제로 적어놓은 스크립트를 그대로 복사해서 적용하는 분들이 계시더군요. 그러면 당연히 스크립트가 작동하지 않겠지요.

일단 bcdedit 입력해서 자식 1번과 자식 2번의 식별자 GUID를 확인하세요. GUID는 각자 다르게 나옵니다. 그래야 정상입니다.



저는 현재 위 그림과 같은 상태이기 때문에 스크립트를 아래와 같이 구성했습니다. 저는 D 드라이브 VHD 폴더에 VHD 파일들이 다 들어있습니다. 각자 사용 환경에 맞추어 아래 스크립트를 수정해서 사용하시면 됩니다.

@echo off
cd /d d:\vhd
bcdedit /default {a67e5b18-e003-11df-b728-f58259d53943} & copy clean.vhd child1.vhd
if errorlevel 1 bcdedit /default {a67e5b19-e003-11df-b728-f58259d53943} & copy clean.vhd child2.vhd
exit

위 스크립트를 말로 설명하자면 이렇습니다.

VHD 파일들이 존재하는 곳으로 프롬프트를 이동시켜라

자식 1번을 부팅메뉴 기본값으로 지정하라 & 자식 1번을 깨끗한 자식으로 초기화 시켜버려라

만약에 위 과정에서 오류가 발생한다면 (즉 지금 자식 1번으로 부팅된 상태라면 당연히 오류가 발생함) 자식 2번을 부팅메뉴 기본값으로 지정하라 & 자식 2번을 깨끗한 자식으로 초기화 시켜버려라


이 스크립트를 아무 이름이나 상관없이 확장자만 CMD로 저장한 다음 시작 메뉴의 시작프로그램에 등록시켜주면 됩니다.

%AppData%\Microsoft\Windows\Start Menu\Programs\Startup

탐색기에 위 주소를 붙여넣으시면 바로 시작프로그램 폴더로 이동이 가능합니다. 거기에 CMD 파일을 넣어주시면 됩니다. 물론 이 작업은 당연히 부모 VHD에서 해야합니다. 부모 VHD에 적용을 해줘야 자식 VHD에 적용되기 때문입니다.

또한 이 스크립트가 정상적으로 작동하려면 Administrator 계정이거나 UAC가 꺼진 상태이어야만 합니다. 왜냐하면 bcdedit 작업은 관리자 권한을 요구하기 때문입니다.



가끔 부모 VHD 파일을 업데이트 해야하는 경우가 있습니다. 윈도우 업데이트를 해야 한다든지, 자주 사용하는 프로그램이 실행될 때마다 업데이트 하라는 창이 뜬다면 일단 부모 VHD로 부팅해서 그 프로그램을 업데이트 해줘야겠지요? 또는 윈도우 레지스트리에 변화를 줘야 한다든지, 익스플로러 설정값을 변경한다든지 등 영구적으로 고정시켜야할 설정값이 생기면 일단 부모 VHD로 부팅을 해서 그것을 적용시켜줘야 자식 VHD들에게 적용이 됩니다.

이정도 설명이면 충분하다고 생각하는데 어떨지 모르겠습니다. 이렇게 구성해두면 항상 완벽한 셋팅상태의 윈도우를 사용할 수 있고, 다른 사람이 내 컴퓨터를 사용해서 엉망으로 만들어놔도 어차피 재부팅하면 초기화 되기 때문에 아무런 걱정이 없습니다. 제가 윈도우 업데이트를 전혀 하지 않고, 백신도 사용하지 않는 이유가 바로 이것입니다. 어차피 재부팅하면 초기화 되기 때문입니다.

혹시 이해가 안 되는 부분이 있다면 댓글 남겨주세요.