VHD의 종류에는 크게 3가지가 있습니다.

Fixed - 고정 크기 디스크. 한번 만들면 그 크기가 고정되는 형태입니다. Expandable - 동적 확장 디스크. 사용량에 따라 그 크기가 점점 증가하는 유동적인 형태입니다. Differencing - 부모 VHD 파일과의 차이점만 기록되는 형태입니다.

지난번에 포스팅했던 윈도우 7의 VHD 부팅기능을 활용해보자

글에서 wing4bee님께서 알려주신 내용인데, 언제 한번 내용을 알아봐야겠다고 생각만 했다가 이번에 XP 모드 관련 글을 포스팅하면서 XP 모드가 바로 이 Differencing VHD 방식을 사용하고 있다는 것을 알게 되었습니다.

Differencing VHD를 활용하면 저처럼 VHD 부팅기능을 사용하시는 분들에겐 매우 큰 도움이 될 것입니다. 왜냐하면 저같은 경우 거의 하루에 한번 꼴로 VHD 파일을 복원합니다. 그냥 뭔가 새로운 프로그램이 나오면 한번 설치해보게 되고 계속 사용할 생각이 없다면 언인스톨 하는게 아니라 그냥 VHD 파일을 복원시켜버리죠. 현재 저는 윈도우 7 64비트 얼티밋 버전을 사용하고 있으며, 대략 9GB 정도의 VHD 파일을 최적셋팅 원본 상태로 사용하고 있습니다. 그런데 매일같이 이 9GB VHD 파일을 PE나 다른 OS로 부팅한 다음 복원시키는 일은 여간 귀찮은게 아닙니다. 대략 3~4분 정도 걸리는 작업인데 이 시간을 줄여보고 싶어서 Differencing VHD 방식을 고려하게 되었습니다. 저는 아크로니스 트루이미지를 사용하지 않지만 트루이미지의 증/차분 백업과 약간 비슷한 개념이라고 생각하시면 될 것 같습니다.

만약 제가 현재 사용중인 9GB의 VHD 파일을 부모 파일로 지정해두고 자식 VHD 파일을 새로 생성해서 앞으로는 그걸로 부팅하게 된다면 어떻게 될까요? 참고로 방금 제 컴퓨터에서 직접 만들어본 결과... 바로 생성된 자식 VHD 파일을 BCD에 등록시킨 다음 크기를 보니... 40MB 밖에 되지 않습니다. 즉 앞으로 저는 이 40MB 짜리 파일만 교체해주면 다시 최적상태로 돌아올 수 있습니다. 9GB 복사하던 일을 앞으로는 40MB만 복사하면 되니 가히 혁신적인 기능이라 하지 않을 수 없습니다.





이제 개념설명은 그만하고 실전에 들어가보겠습니다. 먼저 VHD에 윈도우 7을 설치합니다. 참고 : 윈도우 7 VHD 만들어서 설치하기

설치를 다 하셨다면 이제 각종 프로그램을 설치하고 최적 셋팅을 합니다. 물론 윈도우만 설치된 상태에서 바로 자식 VHD를 생성하셔도 되겠죠. 이건 취향에 달린 문제니까... 저는 최적화 셋팅을 다 마친 다음 현재 사용중인 9GB 부모 VHD 파일을 기준으로 자식 VHD를 생성하겠습니다.

이제 PE로 부팅합니다. 윈도우 7 DVD로 부팅하셔도 되고, F8 복구모드로 들어가셔도 되고, 최근에 소개해드린 PE를 멀티부팅 메뉴에 등록하기 글을 참조하셔도 됩니다. 어떤 방법을 활용하시든 윈도우 7 PE로만 부팅하시면 됩니다. PE로 부팅하셔서 명령 프롬프트를 띄우신 다음 (설치 화면에서 Shift + F10)

1. DISKPART로 들어갑니다. - diskpart

2. 자식 VHD 파일을 생성해줍니다. - create vdisk file=c:\win7-diff.vhd parent=c:\win7.vhd (자식 VHD 파일 이름은 각자 원하는 이름으로, 부모 VHD 파일 위치는 정확히 지정해주세요.) ※ 자식 VHD 파일과 부모 VHD 파일은 반드시 동일한 파티션에 존재해야 합니다.

3. 자식 VHD 파일을 마운트합니다. - attach vdisk

4. 방금 자식 VHD 파일이 어느 드라이브에 마운트 되었는지 확인해줍니다. - list vol

5. 확인이 되었다면 이제 DISKPART를 종료합니다. - exit

6. 이제 자식 VHD 파일을 BCD에 부팅 등록시켜 줍니다. - bcdboot f:\windows /l ko-kr (F 드라이브는 5번 단계에서 확인했던 VHD 파일이 마운트된 드라이브를 지칭합니다.)

7. 자식 VHD 파일을 이제 다른 곳에 백업합니다. 저는 40MB 정도 나왔는데 이걸 지금 백업해둬야 최소화된 백업 원본을 소유하게 되겠죠? - copy c:\win7-diff.vhd d: (백업을 꼭 해야하는건 아니지만 매번 자식 VHD를 똑같은 이름으로 새로 만드는 것 보다는 백업해둔 파일을 교체하는 편이 훨씬 간단하기 때문에 저는 파일을 백업해둡니다.)





이게 끝입니다. 이제 재부팅 해보시면 자식 VHD로 부팅이 될 것입니다. 다만 기존 부모 VHD 엔트리와 이번에 새로 만든 자식 VHD 엔트리가 공존하게 되는데 기존 부모 VHD 엔트리는 삭제해주시면 됩니다. 엔트리 편집으로 가장 편한 방법은 msconfig 들어가서 부팅 탭에서 사용하지 않는 부모 VHD 부팅 메뉴를 삭제하시면 됩니다.







저는 이제부터 기존에 9GB 교체하던 작업을 앞으로는 40MB만 교체하면 됩니다. 제가 쓰고있는 부모 VHD와 백업해둔 자식 VHD 파일입니다.







(추가1) 아 중요한걸 빠뜨렸네요. 바로 자식 VHD의 변화분을 부모 VHD에 적용시키는 것입니다. 이렇게 자식 VHD로 부팅해서 사용하다보면 새로 추가된 프로그램이나 윈도우 설정이 마음에 들어서 이걸 부모 VHD에 적용시키고 싶어질 경우가 발생할 것입니다. 이럴 때는 부모 VHD 파일 자체를 변경시키는게 좋겠죠?

마찬가지로 PE로 부팅한 다음 CMD 창에서

1. DISKPART로 들어갑니다. - diskpart

2. 자식 VHD 파일을 선택합니다. - sel vdisk file=c:\win7-diff.vhd

3. 부모 VHD 파일에 자식 VHD 파일을 병합시켜줍니다. - merge vdisk depth=1

4. DISKPART를 종료합니다. - exit








(추가2) 자식파일 크기가 40MB로 된건 bcdboot 작업 때문에 attach를 한번 해줬기 때문에 그런 것 같습니다. 어차피 BCD엔 동일 이름으로 등록되어 있으니 자식 파일 삭제하고 다시 동일 이름으로 만들어주고 attach를 하지 않으니 100KB로 생성되었습니다. 저는 이제 교체할 때 100KB 파일만 바꾸면 됩니다. 어차피 40MB나 100KB나 바꾸는데 1초 걸리는건 똑같지만 그래도 용량을 절감하게 되었네요. ^^







(추가3) 자식 VHD 생성 작업은 PE로 부팅해야 하는게 맞습니다. 부모 VHD로 부팅한 상태에서 바로 자식 VHD를 생성해주려고 시도해보니 사용중이라는 이유로 거절당했습니다.