검색결과 리스트
글
출처 : http://snoopybox.co.kr/1293
1. snoopy는 왜 VHD 부팅을 사용하는가?
VHD는 가상 하드디스크입니다. 저는 이 가상 하드디스크 안에 윈도우 7을 설치하여 사용합니다. 왜 물리 하드가 아닌 가상 하드에 윈도우를 설치하는 것일까요? 그 이유는 유지, 보수, 관리를 매우 효율적으로 할 수 있기 때문입니다.
우선 이해를 돕기 위해 그림판 신공을 사용해보겠습니다.
왼쪽 그림은 일반적으로 가장 많이 사용되고 있는 방식입니다. 파티션을 분할하여 C 드라이브에 OS를 설치하고 나머지 공간은 자료 보관용으로 사용하는 것입니다. 오른쪽 그림은 현재 제가 사용하고 있는 방식입니다. 파티션을 나누지 않고 VHD 파일을 하나 만들어 그 안에 윈도우를 설치해서 사용합니다.
이렇게 VHD라는 테두리 안에 윈도우를 설치했을 때 얻을 수 있는 장점을 몇가지 적어보겠습니다.
2. VHD 종류에는 어떤 것들이 있는가?
VHD 파일에는 크게 3가지 종류가 있습니다.
- Fixed
- Expandable
- Differencing
Fixed는 고정 크기 방식입니다. VHD 파일은 처음 생성할 때 그 크기를 지정해줄 수 있습니다. Fixed 방식에서는 일단 크기가 정해지면 해당 크기만큼 실제 하드디스크 안에서 공간을 차지하게 됩니다. 그러니까 자신의 영역을 미리 할당해두는 것인데 그림은 필요없겠지만 그래도 대충 그려보자면
Expandable은 동적 확장 디스크입니다. 사용된 크기만큼 점점 증가하는 형태입니다. 일반적으로 VMware나 버추얼 PC 등에서 가상 하드를 생성할 때 이 방식이 주로 사용됩니다. VMware에 XP를 설치할 때 40GB를 할당했는데 실제로 하드 용량이 40GB 줄어들지는 않죠? 그 이유는 XP가 설치된 용량만큼만 감소했기 때문입니다.
이번엔 오늘의 하이라이트 Differencing 방식입니다. 이 방식에는 부모 VHD 파일과 자식 VHD 파일이 존재합니다. 자식 VHD 파일은 부모 VHD 파일의 내용물을 그대로 전수받으면서 차이점만 기록되는 방식입니다. 일단 여기서는 매우 심플한 그림으로 보여드리겠습니다.
자식 VHD는 부모 VHD의 내용물을 그대로 전수받는데 이때 모셔만 두고 읽기만 합니다. 비유하자면 부모 VHD는 거울 앞에 서 있는 실존하는 나 자신이고 자식 VHD는 거울 속에 비친 내 모습이라 할 수 있습니다. 빨간색 테두리 안의 영역은 부모 VHD에서 그대로 읽어만 온 영역입니다. 만약 저 상태에서 자식 VHD의 한글 2010을 지운다면 실제로 그것이 부모 VHD에서 지워지지 않습니다. 그냥 자식 VHD의 주황색 부분에다가 한글 2010이 지워졌다는 기록이 추가되는 것 뿐입니다. 따라서 자식 VHD에선 더이상 한글 2010이 보이지 않습니다. 하지만 부모 VHD 안에는 한글 2010이 그대로 존재하는 것입니다. 이를 거울에 비유하자면 거울 속 내 얼굴에 빨간색 매직으로 그림을 그린다면 비록 거울 속 내 모습은 변하지만 실제 내 얼굴에는 빨간색 매직이 칠해지지 않는 것과 비슷한 개념입니다.
만약 자식 VHD에 스타크래프트를 설치하게 되면 마찬가지로 그것은 부모 VHD에는 기록되지 않고 자식 VHD 안에만 주황색 영역에 스타크래프트가 설치되는 것입니다. 이정도면 Differencing VHD가 어떤 개념인지 대충 이해하셨으리라 생각합니다.
3. 왜 Differencing VHD를 사용해야 하는가?
그렇다면 왜 제가 그동안 Differencing VHD를 그토록 예찬해왔는지 그 이유를 설명드리겠습니다.
저는 컴퓨터 관련 블로거의 특성상 프로그램을 자주 설치해보는 편입니다. 새로 나온 프로그램이 있다면 일단 설치해본 다음 어떤 프로그램인지 확인합니다. 매우 유용하다 싶으면 블로그에 소개글을 올리기도 합니다. 그런데 대다수의 프로그램들은 한번 설치만 해보는 것으로 끝나버립니다. 지속적으로 계속 사용하게 되는 경우는 거의 없습니다. 아무래도 수년간 애용해왔던 프로그램이 있기 때문에 비슷한 종류의 새로운 프로그램이 등장했을 때는 쉽사리 그것으로 옮겨가지 못하겠습니다. 익숙한 것에 길들여져 있다 보니 변화를 받아들이는 일은 쉽지 않더군요.
또한 프로그램 중엔 트라이얼 버전이 많습니다. 트라이얼 버전은 그 특성상 프로그램을 삭제하더라도 나중에 다시 설치하면 그 이전에 설치했던 기록에 남아있어서 남은 사용기간이 소급 적용되는 경우가 많습니다. 왜냐하면 만약 그런 조치가 없다면 언제든지 기간 안에 지웠다 설치했다를 반복하여 영구적으로 사용할 수 있을 테니까요.
또한 저는 윈도우의 각종 설정을 변경하거나 레지스트리를 건드리는 일을 자주 하는 편입니다. 이처럼 윈도우에 각종 프로그램을 이것 저것 설치했다 지웠다 하거나, 각종 설정을 이것 저것 변경해보는 일은 일반 유저들 입장에서 결코 부담없이 할 수 있는 일은 아닐 것입니다. 왜냐하면 윈도우란 녀석은 언제든지 망가질 가능성이 있는 것이고 만에 하나 받은 파일이 바이러스를 포함하고 있다면 아무리 백신이 있더라도 100% 안전하지는 못할 것입니다. 또한 아무리 프로그램을 깨끗하게 지운다 하더라도 레지스트리에 남아있을지도 모르는 그 미세한 흔적에 대한 찝찝한 기분을 결코 떨쳐버리기 힘들 것입니다.
Differencing VHD는 이 모든 걱정을 해결해줍니다. 마치 샌드박스와도 비슷한 개념이라 할 수 있으며 저는 사용해보지 않았지만 학교 전산실에서 주로 이용하는 순간 복구 프로그램들도 이와 비슷한 원리를 사용하지 않을까 싶습니다. 유지되어야할 원본은 그대로 모셔다 두고 마음대로 가지고 놀아도 되는 공간에서 마음껏 이것 저것을 해보는 것입니다. 그러다 문제가 발생하거나 깨끗한 순수 상태로 복귀하고 싶어지면 변경된 공간을 초기화 시켜버리는 것입니다. 제가 위에서 그렸던 그림으로 설명드리자면 자식 VHD의 주황색 부분을 날려버리는 것이라 할 수 있습니다. 거울에 비유하자면 더러워진 거울은 버리고 새 거울을 걸어두는 것과 비슷하다 할 수 있습니다.
4. Differencing VHD를 활용하는 다양한 시나리오
저는 집에서 혼자 컴퓨터를 사용하기 때문에 가장 기본적인 형태로 자식 VHD 1개만을 생성해서 사용하고 있습니다. 그런데 일부 유저들은 여러개의 자식 VHD를 필요로 하더군요. 이 글을 시작하게 된 이유도 바로 이 부분에 대해 그동안 몇차례 댓글로 요구사항이 있었기 때문에 이번 기회에 이렇게 정리를 해보는 것입니다.
저는 비교적 단순한 시나리오를 한번 구상해보겠습니다. 이것이 가능한 이유는 하나의 부모 VHD에 여러개의 자식 VHD를 연결할 수 있으며, 자식 VHD에 또 그 자식 VHD를 (즉 손자 VHD) 생성할 수 있기 때문입니다. 이 손자 VHD의 경우 할아버지 VHD의 내용과 부모 VHD의 변경분을 더해서 새로운 원본으로 간주하고 나머지 변경분을 기록하게 됩니다. 고손자 증손자 VHD도 계속해서 생성할 수 있습니다.
위 시나리오는 결코 효율적이지 않겠지만 어디까지나 예로 든 것 뿐입니다. 각자 자식 VHD의 특성을 활용해서 다양하게 시나리오를 꾸며보시기 바랍니다.
일단 VHD를 하나 만들어 거기에 윈도우 7을 설치합니다. 딱 윈도우 7만 설치해도 되고 각종 드라이버나 업데이트 정도는 해주셔도 되겠죠. 그리고 아들, 마눌님 모두 공통으로 사용할만한 프로그램이 있다면 역시 설치해주는게 좋을 것입니다. 물론 당연히 정품인증까지는 해두셔야 합니다.
그 다음엔 자식 VHD를 3개 생성합니다. 자식 1번으로 부팅해서 나 혼자 쓰는 각종 프로그램을 설치하고 최적화 작업을 마칩니다. 마찬가지로 자식 2번으로 부팅해서 초등학생 아들이 주로 하는 게임이나 학습용 프로그램을 설치합니다. 자식 3번은 제가 아직 결혼을 안 해서 잘 모르니 마눌님 좋아하시는 프로그램을 설치하고, 각종 카페 바로가기를 바탕화면에 만든다든지 메신저를 설치한다든지 기타 등등 마눌님 사용하시기에 최적화된 윈도우를 구성합니다.
그 다음엔 각 자식 VHD에다 다시 각각 자식 VHD를 생성합니다. 그 이유는 각각의 유저가 윈도우를 망가트렸을 때 복구해주기 위해서입니다. 일단 할아버지와 부모 세대까지는 원본으로 쓰자는 것이죠. 손자 VHD를 만들어서 마음대로 주물럭 거릴 수 있도록 해두자는 것입니다.
끝에 깨끗한 새끼 VHD라고 있는데 이건 복구용입니다. 자식 VHD를 처음 만들면 용량이 100kb 정도밖에 안 됩니다. 그 순수 VHD를 말하는 것입니다. 이 새끼 VHD를 각각의 손자를 처음 만들었을 때 따로 백업을 해둡니다. 이 100kb 짜리 깨끗한 파일 안에는 자신의 부모가 누구인지에 대한 정보 정도밖엔 들어있지 않습니다. 이렇게 만들어둔 깨끗한 녀석은 나중에 예를 들어 초등학생 아들이 뭘 잘못해서 바이러스에 걸렸다든지 윈도우가 날아가버린 경우 (어차피 날아가도 손자 2번만 날아간 것이니 걱정하지 않아도 됩니다.) 깨끗한 새끼 VHD 파일을 손자2.VHD 파일로 교체해버리면 끝입니다. 매우 간단합니다. 그래서 이 Differencing VHD 방식은 순간 복구 시스템과 비슷하다 할 수 있습니다.
또 다른 시나리오는 프로그램을 계층별로 설치해두는 것인데 하나의 부모가 여러개의 자식을 거느릴 수는 있지만 반대로 하나의 자식이 여러명의 부모를 가질 수는 없으므로 (당연한 이치겠지요 부모가 여러명이면 어떤 부모를 참조해서 다른 점을 기록해야 할지 알 수 없으니) 이 점을 고려하여 잘 구성해보시기 바랍니다. 저는 비교적 간단한 모델을 만들어 보겠습니다.
이렇게 구성하면 총 4가지 버전의 멀티부팅을 사용하게 될 것입니다.
1-2-5-8
1-2-6
1-3
1-4-7
그런데 저는 개인적으로 이러한 방식이 마음에 들지 않습니다. 왜냐하면 유지 보수 측면에서 불편하기 때문입니다. 예를 들어 2번에 오피스 2010이 설치되어 있다고 가정하겠습니다. 그런데 어느날 오피스 2010 서비스팩 1이 나왔고 이놈을 설치하고 싶습니다. 그러면 2번 파일로 부팅을 해서 설치를 해야겠지요. 이렇게 했을 때 5, 6, 8번에는 오피스 2010 서비스팩 1이 적용되지 않습니다. 부모 파일에 뭔가 추가된다면 자식 파일의 경우 교체를 해줘야 그 내용이 적용됩니다. 반대로 부모 파일에 뭔가 삭제된 경우라면 자식 파일에 그대로 적용됩니다. 부모에 있던 파일이 사라져버렸다면 자식에선 더이상 그것을 찾을 수 없겠지요. 다른 점만 보관하고 있었을 테니까요.
좀 말이 헛갈릴 수도 있는데 아무튼 2번에 업데이트를 적용하면 5,6번을 교체해야 하는데 5번의 경우 또 고유한 프로그램이 설치되어 있을테니 그것을 포기하지 않으려면 5번에 대한 백업파일을 가지고 있었어야 합니다. 그렇지 않고 클린 파일을 5번에 교체해버리면 8번은 더이상 무용지물이 되겠지요.
말로 설명하려니 좀 어려운데 아무튼 저의 생각은 이렇게 계층화 해서 프로그램을 설치하는 것은 유지 보수 측면에서 별로 좋아보이지 않는다는 것입니다. 따라서 차라리 작업을 많이 하게 되더라도 1세대 부모를 각 시나리오에 맞게 여러개 만들어 두는 것이 좋다고 생각합니다. 2세대 3세대 이어지게 되면 부모세대를 업데이트 해야할 때 골치아파지기 때문입니다.
5. 부모 파일 업데이트?
바로 위에서 부모 파일 업데이트에 대한 이야기를 했습니다. 평소엔 자식 VHD로 부팅해서 사용을 하지만 영구적으로 적용되어야할 사안이 생긴다면 부모 VHD로 부팅해서 그것을 적용해주는 것이 좋습니다. 왜냐하면 그렇게 하지 않은 경우 매번 자식 VHD를 깨끗한 녀석으로 교체해줄 때 마다 지난번에 설정해뒀던 그 내용이 날아가버려 다시 설정해야 하기 때문입니다.
즉 평소엔 거울 위에다 그림을 그리고 치장을 하겠지만 예를 들어 새로 그린 눈썹이 너무 마음에 들어 계속 유지하고 싶다면, 매번 거울을 깨끗한 것으로 교체할 때마다 눈썹을 그리는 일은 불편할테니 거울이 아닌 내 얼굴에 직접 눈썹을 그려줘야 한다는 말입니다.
물론 이 부모 파일 업데이트의 경우 직접 부모 파일로 부팅해서 내용을 적용해주지 않고 이미 변경된 자식 파일의 내용을 부모 파일에 적용시켜주는 커맨드가 있습니다. 하지만 저는 이런 방식을 싫어합니다. 제 컴퓨터에 관해서는 한번 할 때 완벽하고 깔끔하게 하려는 편이기 때문에 자식 파일에 혹시나 모를 이물질이 남아있다면 그것까지 부모 파일에 적용되는게 싫기 때문입니다. 그래서 꼭 적용해야하는 내용이 생기면 (주로 프로그램 업데이트 관련 이슈) 항상 부모 파일로 부팅해서 그것을 적용해준 다음 다시 자식 VHD를 깨끗한 것으로 교체해주곤 합니다.
6. VHD 부팅은 아무 윈도우나 다 지원하는가?
아쉽게도 그렇지 않습니다. 만약 그랬다면 정말로 환상적일텐데 말이죠. 파티션을 나누지 않고 파일만 딱 3개 만들어서 XP, 비스타, 세븐을 각각 설치하는 겁니다. 그러면 얼마나 좋겠습니까. 하지만 현실은 불가능합니다.
VHD 파일 안에 들어있는 윈도우가 네이티브로 부팅할 수 있는 기술은 오로지 윈도우 7에서만 가능합니다. 아 물론 당연히 서버 2008 R2도 포함입니다. 그런데 윈도우 7도 다 되는게 아닙니다. 물론 기술은 다 가지고 있지만 라이선스로 제한되어 있어서 엔터프라이즈, 얼티밋 버전에서만 VHD 부팅 기능이 지원됩니다. 이 점이 매우 아쉽죠.
예전에 어디서 흘러가는 글로 비스타도 업데이트를 통해 VHD 부팅기능을 지원할 것이라는 소문을 얼핏 본 것 같은데 제가 헛소문을 들었거나 꿈에서 본 것이 아니라면 기술적으로 VDI를 적용하는게 그리 어렵지는 않은 모양입니다.
하기야 버추얼 PC를 생각해보면 윈도우 XP도 약간만 패치를 하면 VHD 네이티브 부팅이 가능할 것 같은 느낌은 드는데 뭐 제가 기술자가 아니다보니 잘은 모르겠습니다. 된다면 얼마나 좋을까요.
그런데 이 부분을 가끔 오해하는 분들이 계십니다. 현재 XP가 설치되어 있거나 비스타가 설치되어 있다고 해서 윈도우 7을 VHD에 설치할 수 없는게 아닙니다. 현재 설치되어 있는 OS는 아무 상관이 없습니다. 아무런 OS가 설치되어 있지 않은 비어있는 하드라도 상관이 없습니다. VHD를 만들고 그 안에 윈도우 7을 설치하면 알아서 부팅파일을 외부에 만들어주고 VHD 스스로 알아서 부팅되기 때문입니다.
7. VHD 부팅 활용하기
이제 VHD에 대한 개념은 다 정리되었을 듯 싶습니다. 따라서 마지막으로 그동안 포스팅했던 VHD 관련 글을 링크로 남기겠습니다. 이 글에서 설치부터 활용까지 모든 내용을 중복해서 다룰 수는 없기 때문에 링크로 대체합니다.
먼저 아래 글을 참조하여 VHD 안에 윈도우 7을 설치합니다.
2009/06/16 - [Windows 7] - 윈도우 7 VHD 만들어서 설치하기
설치를 다 하셨다면 이제 각종 프로그램을 설치하고 완벽히 최적 상태로 만듭니다. 그런 다음 이제 자식 VHD를 생성해서 그걸로 부팅해 평소 실사용 하시면 됩니다.
2009/11/22 - [Windows 7] - 윈도우 7의 Differencing VHD 기능을 활용해보자
이렇게 실사용 하다가 자식 VHD를 깨끗한 녀석으로 교체하려면 F8 복구모드나 PE에서 해야하는데 (혹은 멀티부팅 상태라면 다른 OS상에서 바로 교체) 이를 편리하게 자동으로 해주는 글입니다.
2009/12/10 - [Windows 7] - VHD 파일 자동교체 부팅메뉴 등록하기
그리고 마지막으로 재부팅 후 이 자동 교체 메뉴를 선택해주는 것 조차 귀찮으신 분들을 위해 윈도우에서 이 부팅메뉴를 선택할 수 있도록 해주는 프로그램입니다. 이 프로그램은 부모 VHD로 부팅해서 거기에 설치해두시면 편리하겠지요.
2010/04/25 - [유용한 프로그램] - 멀티부팅 메뉴를 윈도우에서 선택 - iReboot
이렇게 Differencing VHD를 활용하여 자주 시스템을 되돌리는 경우, 단점을 하나 꼽으라 한다면 설정 파일이 C 드라이브에 누적되는 프로그램에선 불편해집니다. 예를 들어 uTorrent 프로그램을 들 수 있습니다. 대량으로 시딩하시는 분들은 시딩 리스트에 대한 정보가 C에 저장되기 때문에 이 방식을 그대로 사용하면 자식 파일을 복구한 경우 시딩중이던 리스트의 변화분을 잃어버리게 됩니다. 다행히 uTorrent는 제가 다른 파티션에 옮겨두는 방식을 소개해드렸지만
2010/04/22 - [컴퓨터 관련 팁] - uTorrent 설정 파일 위치 변경하기
다른 프로그램의 경우 자주 설정을 업데이트 해야 한다면 불편할 수 있습니다. 매번 부모 VHD로 부팅을 해줘야 하니까요. 저는 그런 프로그램을 사용하지 않아서 별 문제가 없는데 다른 분들은 혹 그럴 수 있겠다는 생각이 듭니다.
이 외에도 VHD 파일을 자유자재로 주물럭 거리려면 bcdedit, bcdboot, diskpart 등에 익숙해지셔야 합니다. 일일이 다 설명드릴 수는 없으니 막히면 그때그때 글을 찾아보시기 바랍니다.
최대한 알기 쉽게 쓴다고 썼는데도 예전에 썼던 글을 보면 제가 좀 불친절한 부분이 많았던 것 같습니다. 혹시 이해가 되지 않는 부분이 있다면 댓글로 질문 남겨주시면 되겠습니다. 이상입니다.
※ 추가사항
VHD 용량에 대한 보충 설명입니다.
자식 세대는 무조건 Expandable 형식이며 최대 용량은 원조 부모의 그것을 그대로 물려받습니다.
또한 VHD가 Expandable 형식인 경우 평소에는 사용된 용량만큼 공간을 차지하지만 그것이 마운트된 후에는 최대 용량만큼 공간을 차지하게 됩니다.
예제1)
부모 VHD - Fixed 방식, 최대 용량 40GB, 현재 사용량 20GB
이 경우 자식 VHD로 부팅을 하면 부모 VHD는 Fixed 방식이기 때문에 하드에서 공간을 40GB 차지하게 되고, 자식 VHD 역시 부팅된 상태에선 40GB를 차지하게 됩니다. 고로 80GB의 용량이 필요하게 됩니다. 이 경우 부모 VHD에서 사용되지 않은 공간 20GB와 자식 VHD 역시 사용하지 않고 있는 공간 20GB가 중복되기 때문에 하드 용량이 아깝습니다. 따라서 자식 VHD를 붙일 생각이 있다면 부모 VHD는 무조건 Expandable 방식으로 생성하는 것이 용량 면에서 효율적입니다.
예제2)
할아버지 VHD - Expandable 방식, 최대 용량 40GB, 현재 사용량 20GB
부모 VHD - 할아버지에서 5GB 정도 차분 기록된 상태
이 경우 손자 VHD로 부팅을 하면 할아버지 VHD는 20GB, 부모 VHD는 5GB, 손자 VHD는 40GB의 공간을 하드에서 차지하게 됩니다. 이 두번째 예제만 이해하시면 VHD가 하드에서 공간을 어떤 식으로 차지하게 되는지 완전히 이해가 되시리라 생각합니다.
물론 할아버지 VHD가 현재 20GB를 사용하고 있다고 하더라도 이 Expandable 방식의 파일이 마운트되지 않았을 때 정확히 20GB만 차지하는 것은 아닙니다. 그것보다 더 차지합니다. 그러니까 Expandable 방식에선 최 외곽에 위치했던 파일에 의해 용량이 결정되는 것 같습니다. 제가 사용중인 부모의 경우 사용량은 13.1GB이지만 실제 파일은 14GB 정도 공간을 차지하고 있습니다. 만약 제가 부모로 부팅해서 한 20GB쯤 채운 다음 다시 파일을 삭제하고 13GB로 만든다 해도 재부팅 하면 부모 파일은 20GB를 차지할 것입니다. 즉 Expandable 방식에서는 파일을 삭제하더라도 경계선이 따라서 같이 줄어들지는 않습니다.
근본적으로 부모 VHD를 셋팅할 때 최대한 깨끗하게 설치한다면 용량의 낭비를 줄일 수 있겠지만 이것 저것 설치했다 지웠다를 반복하면 용량의 낭비를 초래할 것입니다.
이 Expandable 방식의 공간 낭비 문제점을 조금이라도 해결하고 싶다면 신비님의 아래 글을 참조하시기 바랍니다.
VHD 파일 최적화하기 - SDelete
1. snoopy는 왜 VHD 부팅을 사용하는가?
VHD는 가상 하드디스크입니다. 저는 이 가상 하드디스크 안에 윈도우 7을 설치하여 사용합니다. 왜 물리 하드가 아닌 가상 하드에 윈도우를 설치하는 것일까요? 그 이유는 유지, 보수, 관리를 매우 효율적으로 할 수 있기 때문입니다.
우선 이해를 돕기 위해 그림판 신공을 사용해보겠습니다.
왼쪽 그림은 일반적으로 가장 많이 사용되고 있는 방식입니다. 파티션을 분할하여 C 드라이브에 OS를 설치하고 나머지 공간은 자료 보관용으로 사용하는 것입니다. 오른쪽 그림은 현재 제가 사용하고 있는 방식입니다. 파티션을 나누지 않고 VHD 파일을 하나 만들어 그 안에 윈도우를 설치해서 사용합니다.
이렇게 VHD라는 테두리 안에 윈도우를 설치했을 때 얻을 수 있는 장점을 몇가지 적어보겠습니다.
- 윈도우를 설치할 때 파티션을 나눌 필요 없이 있던 하드 안에 VHD 파일만 새로 하나 만들어 설치하면 된다.
- 그렇기 때문에 윈도우를 설치할 때 포맷을 하기 전 자료를 다른 곳으로 백업할 걱정을 안 해도 된다. 그냥 가상 디스크를 하나 만들어 거기에 설치하면 끝이다. 마치 하드디스크를 추가로 구매하여 거기에 설치하는 것과 비슷하다고 볼 수 있다.
- 마찬가지로 멀티부팅의 경우도 파티션을 나누거나 추가 하드를 필요로 하지 않고 여러개의 VHD 파일을 만들어 각각에 윈도우를 설치하면 된다.
- 설치된 윈도우를 삭제하는 일은 매우 쉽다. 기존 방식에선 멀티부팅을 구성한 경우 OS를 삭제하는 일이 간단하지 않다. 특히나 삭제하려는 OS가 부팅 파일이 존재하는 시스템 파티션에 설치되어 있는 경우 문제는 복잡해진다. 해당 파티션을 포맷하면 다른 OS로도 부팅되지 않기 때문이다. 하지만 VHD 부팅에선 그런 걱정을 할 필요가 없다. 그냥 불필요한 OS가 있다면 VHD 파일만 삭제해버리면 끝이다. 매우 간단하다.
- Expandable 방식의 VHD는 공간 활용 면에서 효율적이다.
- Differencing VHD는 VHD의 꽃이다. 자세한 이야기는 아래에 이어서 설명하겠다.
- Sysprep으로 일반화 봉인해두면 동일 VHD 파일을 다른 PC에 옮겨서도 부팅할 수 있다.
- OS가 VHD 파일 하나에 들어가 있기 때문에 시스템 백업과 복구 역시 그 파일 하나만 백업해뒀다가 교체해버리면 된다. 고스트나 트루 이미지 등 사설 복구 프로그램이 필요하지 않다.
2. VHD 종류에는 어떤 것들이 있는가?
VHD 파일에는 크게 3가지 종류가 있습니다.
- Fixed
- Expandable
- Differencing
Fixed는 고정 크기 방식입니다. VHD 파일은 처음 생성할 때 그 크기를 지정해줄 수 있습니다. Fixed 방식에서는 일단 크기가 정해지면 해당 크기만큼 실제 하드디스크 안에서 공간을 차지하게 됩니다. 그러니까 자신의 영역을 미리 할당해두는 것인데 그림은 필요없겠지만 그래도 대충 그려보자면
Expandable은 동적 확장 디스크입니다. 사용된 크기만큼 점점 증가하는 형태입니다. 일반적으로 VMware나 버추얼 PC 등에서 가상 하드를 생성할 때 이 방식이 주로 사용됩니다. VMware에 XP를 설치할 때 40GB를 할당했는데 실제로 하드 용량이 40GB 줄어들지는 않죠? 그 이유는 XP가 설치된 용량만큼만 감소했기 때문입니다.
이번엔 오늘의 하이라이트 Differencing 방식입니다. 이 방식에는 부모 VHD 파일과 자식 VHD 파일이 존재합니다. 자식 VHD 파일은 부모 VHD 파일의 내용물을 그대로 전수받으면서 차이점만 기록되는 방식입니다. 일단 여기서는 매우 심플한 그림으로 보여드리겠습니다.
자식 VHD는 부모 VHD의 내용물을 그대로 전수받는데 이때 모셔만 두고 읽기만 합니다. 비유하자면 부모 VHD는 거울 앞에 서 있는 실존하는 나 자신이고 자식 VHD는 거울 속에 비친 내 모습이라 할 수 있습니다. 빨간색 테두리 안의 영역은 부모 VHD에서 그대로 읽어만 온 영역입니다. 만약 저 상태에서 자식 VHD의 한글 2010을 지운다면 실제로 그것이 부모 VHD에서 지워지지 않습니다. 그냥 자식 VHD의 주황색 부분에다가 한글 2010이 지워졌다는 기록이 추가되는 것 뿐입니다. 따라서 자식 VHD에선 더이상 한글 2010이 보이지 않습니다. 하지만 부모 VHD 안에는 한글 2010이 그대로 존재하는 것입니다. 이를 거울에 비유하자면 거울 속 내 얼굴에 빨간색 매직으로 그림을 그린다면 비록 거울 속 내 모습은 변하지만 실제 내 얼굴에는 빨간색 매직이 칠해지지 않는 것과 비슷한 개념입니다.
만약 자식 VHD에 스타크래프트를 설치하게 되면 마찬가지로 그것은 부모 VHD에는 기록되지 않고 자식 VHD 안에만 주황색 영역에 스타크래프트가 설치되는 것입니다. 이정도면 Differencing VHD가 어떤 개념인지 대충 이해하셨으리라 생각합니다.
3. 왜 Differencing VHD를 사용해야 하는가?
그렇다면 왜 제가 그동안 Differencing VHD를 그토록 예찬해왔는지 그 이유를 설명드리겠습니다.
저는 컴퓨터 관련 블로거의 특성상 프로그램을 자주 설치해보는 편입니다. 새로 나온 프로그램이 있다면 일단 설치해본 다음 어떤 프로그램인지 확인합니다. 매우 유용하다 싶으면 블로그에 소개글을 올리기도 합니다. 그런데 대다수의 프로그램들은 한번 설치만 해보는 것으로 끝나버립니다. 지속적으로 계속 사용하게 되는 경우는 거의 없습니다. 아무래도 수년간 애용해왔던 프로그램이 있기 때문에 비슷한 종류의 새로운 프로그램이 등장했을 때는 쉽사리 그것으로 옮겨가지 못하겠습니다. 익숙한 것에 길들여져 있다 보니 변화를 받아들이는 일은 쉽지 않더군요.
또한 프로그램 중엔 트라이얼 버전이 많습니다. 트라이얼 버전은 그 특성상 프로그램을 삭제하더라도 나중에 다시 설치하면 그 이전에 설치했던 기록에 남아있어서 남은 사용기간이 소급 적용되는 경우가 많습니다. 왜냐하면 만약 그런 조치가 없다면 언제든지 기간 안에 지웠다 설치했다를 반복하여 영구적으로 사용할 수 있을 테니까요.
또한 저는 윈도우의 각종 설정을 변경하거나 레지스트리를 건드리는 일을 자주 하는 편입니다. 이처럼 윈도우에 각종 프로그램을 이것 저것 설치했다 지웠다 하거나, 각종 설정을 이것 저것 변경해보는 일은 일반 유저들 입장에서 결코 부담없이 할 수 있는 일은 아닐 것입니다. 왜냐하면 윈도우란 녀석은 언제든지 망가질 가능성이 있는 것이고 만에 하나 받은 파일이 바이러스를 포함하고 있다면 아무리 백신이 있더라도 100% 안전하지는 못할 것입니다. 또한 아무리 프로그램을 깨끗하게 지운다 하더라도 레지스트리에 남아있을지도 모르는 그 미세한 흔적에 대한 찝찝한 기분을 결코 떨쳐버리기 힘들 것입니다.
Differencing VHD는 이 모든 걱정을 해결해줍니다. 마치 샌드박스와도 비슷한 개념이라 할 수 있으며 저는 사용해보지 않았지만 학교 전산실에서 주로 이용하는 순간 복구 프로그램들도 이와 비슷한 원리를 사용하지 않을까 싶습니다. 유지되어야할 원본은 그대로 모셔다 두고 마음대로 가지고 놀아도 되는 공간에서 마음껏 이것 저것을 해보는 것입니다. 그러다 문제가 발생하거나 깨끗한 순수 상태로 복귀하고 싶어지면 변경된 공간을 초기화 시켜버리는 것입니다. 제가 위에서 그렸던 그림으로 설명드리자면 자식 VHD의 주황색 부분을 날려버리는 것이라 할 수 있습니다. 거울에 비유하자면 더러워진 거울은 버리고 새 거울을 걸어두는 것과 비슷하다 할 수 있습니다.
4. Differencing VHD를 활용하는 다양한 시나리오
저는 집에서 혼자 컴퓨터를 사용하기 때문에 가장 기본적인 형태로 자식 VHD 1개만을 생성해서 사용하고 있습니다. 그런데 일부 유저들은 여러개의 자식 VHD를 필요로 하더군요. 이 글을 시작하게 된 이유도 바로 이 부분에 대해 그동안 몇차례 댓글로 요구사항이 있었기 때문에 이번 기회에 이렇게 정리를 해보는 것입니다.
저는 비교적 단순한 시나리오를 한번 구상해보겠습니다. 이것이 가능한 이유는 하나의 부모 VHD에 여러개의 자식 VHD를 연결할 수 있으며, 자식 VHD에 또 그 자식 VHD를 (즉 손자 VHD) 생성할 수 있기 때문입니다. 이 손자 VHD의 경우 할아버지 VHD의 내용과 부모 VHD의 변경분을 더해서 새로운 원본으로 간주하고 나머지 변경분을 기록하게 됩니다. 고손자 증손자 VHD도 계속해서 생성할 수 있습니다.
위 시나리오는 결코 효율적이지 않겠지만 어디까지나 예로 든 것 뿐입니다. 각자 자식 VHD의 특성을 활용해서 다양하게 시나리오를 꾸며보시기 바랍니다.
일단 VHD를 하나 만들어 거기에 윈도우 7을 설치합니다. 딱 윈도우 7만 설치해도 되고 각종 드라이버나 업데이트 정도는 해주셔도 되겠죠. 그리고 아들, 마눌님 모두 공통으로 사용할만한 프로그램이 있다면 역시 설치해주는게 좋을 것입니다. 물론 당연히 정품인증까지는 해두셔야 합니다.
그 다음엔 자식 VHD를 3개 생성합니다. 자식 1번으로 부팅해서 나 혼자 쓰는 각종 프로그램을 설치하고 최적화 작업을 마칩니다. 마찬가지로 자식 2번으로 부팅해서 초등학생 아들이 주로 하는 게임이나 학습용 프로그램을 설치합니다. 자식 3번은 제가 아직 결혼을 안 해서 잘 모르니 마눌님 좋아하시는 프로그램을 설치하고, 각종 카페 바로가기를 바탕화면에 만든다든지 메신저를 설치한다든지 기타 등등 마눌님 사용하시기에 최적화된 윈도우를 구성합니다.
그 다음엔 각 자식 VHD에다 다시 각각 자식 VHD를 생성합니다. 그 이유는 각각의 유저가 윈도우를 망가트렸을 때 복구해주기 위해서입니다. 일단 할아버지와 부모 세대까지는 원본으로 쓰자는 것이죠. 손자 VHD를 만들어서 마음대로 주물럭 거릴 수 있도록 해두자는 것입니다.
끝에 깨끗한 새끼 VHD라고 있는데 이건 복구용입니다. 자식 VHD를 처음 만들면 용량이 100kb 정도밖에 안 됩니다. 그 순수 VHD를 말하는 것입니다. 이 새끼 VHD를 각각의 손자를 처음 만들었을 때 따로 백업을 해둡니다. 이 100kb 짜리 깨끗한 파일 안에는 자신의 부모가 누구인지에 대한 정보 정도밖엔 들어있지 않습니다. 이렇게 만들어둔 깨끗한 녀석은 나중에 예를 들어 초등학생 아들이 뭘 잘못해서 바이러스에 걸렸다든지 윈도우가 날아가버린 경우 (어차피 날아가도 손자 2번만 날아간 것이니 걱정하지 않아도 됩니다.) 깨끗한 새끼 VHD 파일을 손자2.VHD 파일로 교체해버리면 끝입니다. 매우 간단합니다. 그래서 이 Differencing VHD 방식은 순간 복구 시스템과 비슷하다 할 수 있습니다.
또 다른 시나리오는 프로그램을 계층별로 설치해두는 것인데 하나의 부모가 여러개의 자식을 거느릴 수는 있지만 반대로 하나의 자식이 여러명의 부모를 가질 수는 없으므로 (당연한 이치겠지요 부모가 여러명이면 어떤 부모를 참조해서 다른 점을 기록해야 할지 알 수 없으니) 이 점을 고려하여 잘 구성해보시기 바랍니다. 저는 비교적 간단한 모델을 만들어 보겠습니다.
이렇게 구성하면 총 4가지 버전의 멀티부팅을 사용하게 될 것입니다.
1-2-5-8
1-2-6
1-3
1-4-7
그런데 저는 개인적으로 이러한 방식이 마음에 들지 않습니다. 왜냐하면 유지 보수 측면에서 불편하기 때문입니다. 예를 들어 2번에 오피스 2010이 설치되어 있다고 가정하겠습니다. 그런데 어느날 오피스 2010 서비스팩 1이 나왔고 이놈을 설치하고 싶습니다. 그러면 2번 파일로 부팅을 해서 설치를 해야겠지요. 이렇게 했을 때 5, 6, 8번에는 오피스 2010 서비스팩 1이 적용되지 않습니다. 부모 파일에 뭔가 추가된다면 자식 파일의 경우 교체를 해줘야 그 내용이 적용됩니다. 반대로 부모 파일에 뭔가 삭제된 경우라면 자식 파일에 그대로 적용됩니다. 부모에 있던 파일이 사라져버렸다면 자식에선 더이상 그것을 찾을 수 없겠지요. 다른 점만 보관하고 있었을 테니까요.
좀 말이 헛갈릴 수도 있는데 아무튼 2번에 업데이트를 적용하면 5,6번을 교체해야 하는데 5번의 경우 또 고유한 프로그램이 설치되어 있을테니 그것을 포기하지 않으려면 5번에 대한 백업파일을 가지고 있었어야 합니다. 그렇지 않고 클린 파일을 5번에 교체해버리면 8번은 더이상 무용지물이 되겠지요.
말로 설명하려니 좀 어려운데 아무튼 저의 생각은 이렇게 계층화 해서 프로그램을 설치하는 것은 유지 보수 측면에서 별로 좋아보이지 않는다는 것입니다. 따라서 차라리 작업을 많이 하게 되더라도 1세대 부모를 각 시나리오에 맞게 여러개 만들어 두는 것이 좋다고 생각합니다. 2세대 3세대 이어지게 되면 부모세대를 업데이트 해야할 때 골치아파지기 때문입니다.
5. 부모 파일 업데이트?
바로 위에서 부모 파일 업데이트에 대한 이야기를 했습니다. 평소엔 자식 VHD로 부팅해서 사용을 하지만 영구적으로 적용되어야할 사안이 생긴다면 부모 VHD로 부팅해서 그것을 적용해주는 것이 좋습니다. 왜냐하면 그렇게 하지 않은 경우 매번 자식 VHD를 깨끗한 녀석으로 교체해줄 때 마다 지난번에 설정해뒀던 그 내용이 날아가버려 다시 설정해야 하기 때문입니다.
즉 평소엔 거울 위에다 그림을 그리고 치장을 하겠지만 예를 들어 새로 그린 눈썹이 너무 마음에 들어 계속 유지하고 싶다면, 매번 거울을 깨끗한 것으로 교체할 때마다 눈썹을 그리는 일은 불편할테니 거울이 아닌 내 얼굴에 직접 눈썹을 그려줘야 한다는 말입니다.
물론 이 부모 파일 업데이트의 경우 직접 부모 파일로 부팅해서 내용을 적용해주지 않고 이미 변경된 자식 파일의 내용을 부모 파일에 적용시켜주는 커맨드가 있습니다. 하지만 저는 이런 방식을 싫어합니다. 제 컴퓨터에 관해서는 한번 할 때 완벽하고 깔끔하게 하려는 편이기 때문에 자식 파일에 혹시나 모를 이물질이 남아있다면 그것까지 부모 파일에 적용되는게 싫기 때문입니다. 그래서 꼭 적용해야하는 내용이 생기면 (주로 프로그램 업데이트 관련 이슈) 항상 부모 파일로 부팅해서 그것을 적용해준 다음 다시 자식 VHD를 깨끗한 것으로 교체해주곤 합니다.
6. VHD 부팅은 아무 윈도우나 다 지원하는가?
아쉽게도 그렇지 않습니다. 만약 그랬다면 정말로 환상적일텐데 말이죠. 파티션을 나누지 않고 파일만 딱 3개 만들어서 XP, 비스타, 세븐을 각각 설치하는 겁니다. 그러면 얼마나 좋겠습니까. 하지만 현실은 불가능합니다.
VHD 파일 안에 들어있는 윈도우가 네이티브로 부팅할 수 있는 기술은 오로지 윈도우 7에서만 가능합니다. 아 물론 당연히 서버 2008 R2도 포함입니다. 그런데 윈도우 7도 다 되는게 아닙니다. 물론 기술은 다 가지고 있지만 라이선스로 제한되어 있어서 엔터프라이즈, 얼티밋 버전에서만 VHD 부팅 기능이 지원됩니다. 이 점이 매우 아쉽죠.
예전에 어디서 흘러가는 글로 비스타도 업데이트를 통해 VHD 부팅기능을 지원할 것이라는 소문을 얼핏 본 것 같은데 제가 헛소문을 들었거나 꿈에서 본 것이 아니라면 기술적으로 VDI를 적용하는게 그리 어렵지는 않은 모양입니다.
하기야 버추얼 PC를 생각해보면 윈도우 XP도 약간만 패치를 하면 VHD 네이티브 부팅이 가능할 것 같은 느낌은 드는데 뭐 제가 기술자가 아니다보니 잘은 모르겠습니다. 된다면 얼마나 좋을까요.
그런데 이 부분을 가끔 오해하는 분들이 계십니다. 현재 XP가 설치되어 있거나 비스타가 설치되어 있다고 해서 윈도우 7을 VHD에 설치할 수 없는게 아닙니다. 현재 설치되어 있는 OS는 아무 상관이 없습니다. 아무런 OS가 설치되어 있지 않은 비어있는 하드라도 상관이 없습니다. VHD를 만들고 그 안에 윈도우 7을 설치하면 알아서 부팅파일을 외부에 만들어주고 VHD 스스로 알아서 부팅되기 때문입니다.
7. VHD 부팅 활용하기
이제 VHD에 대한 개념은 다 정리되었을 듯 싶습니다. 따라서 마지막으로 그동안 포스팅했던 VHD 관련 글을 링크로 남기겠습니다. 이 글에서 설치부터 활용까지 모든 내용을 중복해서 다룰 수는 없기 때문에 링크로 대체합니다.
먼저 아래 글을 참조하여 VHD 안에 윈도우 7을 설치합니다.
2009/06/16 - [Windows 7] - 윈도우 7 VHD 만들어서 설치하기
설치를 다 하셨다면 이제 각종 프로그램을 설치하고 완벽히 최적 상태로 만듭니다. 그런 다음 이제 자식 VHD를 생성해서 그걸로 부팅해 평소 실사용 하시면 됩니다.
2009/11/22 - [Windows 7] - 윈도우 7의 Differencing VHD 기능을 활용해보자
이렇게 실사용 하다가 자식 VHD를 깨끗한 녀석으로 교체하려면 F8 복구모드나 PE에서 해야하는데 (혹은 멀티부팅 상태라면 다른 OS상에서 바로 교체) 이를 편리하게 자동으로 해주는 글입니다.
2009/12/10 - [Windows 7] - VHD 파일 자동교체 부팅메뉴 등록하기
그리고 마지막으로 재부팅 후 이 자동 교체 메뉴를 선택해주는 것 조차 귀찮으신 분들을 위해 윈도우에서 이 부팅메뉴를 선택할 수 있도록 해주는 프로그램입니다. 이 프로그램은 부모 VHD로 부팅해서 거기에 설치해두시면 편리하겠지요.
2010/04/25 - [유용한 프로그램] - 멀티부팅 메뉴를 윈도우에서 선택 - iReboot
이렇게 Differencing VHD를 활용하여 자주 시스템을 되돌리는 경우, 단점을 하나 꼽으라 한다면 설정 파일이 C 드라이브에 누적되는 프로그램에선 불편해집니다. 예를 들어 uTorrent 프로그램을 들 수 있습니다. 대량으로 시딩하시는 분들은 시딩 리스트에 대한 정보가 C에 저장되기 때문에 이 방식을 그대로 사용하면 자식 파일을 복구한 경우 시딩중이던 리스트의 변화분을 잃어버리게 됩니다. 다행히 uTorrent는 제가 다른 파티션에 옮겨두는 방식을 소개해드렸지만
2010/04/22 - [컴퓨터 관련 팁] - uTorrent 설정 파일 위치 변경하기
다른 프로그램의 경우 자주 설정을 업데이트 해야 한다면 불편할 수 있습니다. 매번 부모 VHD로 부팅을 해줘야 하니까요. 저는 그런 프로그램을 사용하지 않아서 별 문제가 없는데 다른 분들은 혹 그럴 수 있겠다는 생각이 듭니다.
이 외에도 VHD 파일을 자유자재로 주물럭 거리려면 bcdedit, bcdboot, diskpart 등에 익숙해지셔야 합니다. 일일이 다 설명드릴 수는 없으니 막히면 그때그때 글을 찾아보시기 바랍니다.
최대한 알기 쉽게 쓴다고 썼는데도 예전에 썼던 글을 보면 제가 좀 불친절한 부분이 많았던 것 같습니다. 혹시 이해가 되지 않는 부분이 있다면 댓글로 질문 남겨주시면 되겠습니다. 이상입니다.
※ 추가사항
VHD 용량에 대한 보충 설명입니다.
자식 세대는 무조건 Expandable 형식이며 최대 용량은 원조 부모의 그것을 그대로 물려받습니다.
또한 VHD가 Expandable 형식인 경우 평소에는 사용된 용량만큼 공간을 차지하지만 그것이 마운트된 후에는 최대 용량만큼 공간을 차지하게 됩니다.
예제1)
부모 VHD - Fixed 방식, 최대 용량 40GB, 현재 사용량 20GB
이 경우 자식 VHD로 부팅을 하면 부모 VHD는 Fixed 방식이기 때문에 하드에서 공간을 40GB 차지하게 되고, 자식 VHD 역시 부팅된 상태에선 40GB를 차지하게 됩니다. 고로 80GB의 용량이 필요하게 됩니다. 이 경우 부모 VHD에서 사용되지 않은 공간 20GB와 자식 VHD 역시 사용하지 않고 있는 공간 20GB가 중복되기 때문에 하드 용량이 아깝습니다. 따라서 자식 VHD를 붙일 생각이 있다면 부모 VHD는 무조건 Expandable 방식으로 생성하는 것이 용량 면에서 효율적입니다.
예제2)
할아버지 VHD - Expandable 방식, 최대 용량 40GB, 현재 사용량 20GB
부모 VHD - 할아버지에서 5GB 정도 차분 기록된 상태
이 경우 손자 VHD로 부팅을 하면 할아버지 VHD는 20GB, 부모 VHD는 5GB, 손자 VHD는 40GB의 공간을 하드에서 차지하게 됩니다. 이 두번째 예제만 이해하시면 VHD가 하드에서 공간을 어떤 식으로 차지하게 되는지 완전히 이해가 되시리라 생각합니다.
물론 할아버지 VHD가 현재 20GB를 사용하고 있다고 하더라도 이 Expandable 방식의 파일이 마운트되지 않았을 때 정확히 20GB만 차지하는 것은 아닙니다. 그것보다 더 차지합니다. 그러니까 Expandable 방식에선 최 외곽에 위치했던 파일에 의해 용량이 결정되는 것 같습니다. 제가 사용중인 부모의 경우 사용량은 13.1GB이지만 실제 파일은 14GB 정도 공간을 차지하고 있습니다. 만약 제가 부모로 부팅해서 한 20GB쯤 채운 다음 다시 파일을 삭제하고 13GB로 만든다 해도 재부팅 하면 부모 파일은 20GB를 차지할 것입니다. 즉 Expandable 방식에서는 파일을 삭제하더라도 경계선이 따라서 같이 줄어들지는 않습니다.
근본적으로 부모 VHD를 셋팅할 때 최대한 깨끗하게 설치한다면 용량의 낭비를 줄일 수 있겠지만 이것 저것 설치했다 지웠다를 반복하면 용량의 낭비를 초래할 것입니다.
이 Expandable 방식의 공간 낭비 문제점을 조금이라도 해결하고 싶다면 신비님의 아래 글을 참조하시기 바랍니다.
VHD 파일 최적화하기 - SDelete
'씨앗 나눔 화원 > OS' 카테고리의 다른 글
#2. 윈도우 7의 Differencing VHD 기능을 활용해보자 -snoopy- (0) | 2011.04.24 |
---|---|
#1. 윈도우 7 VHD 만들어서 설치하기 -snoopy- (0) | 2011.04.24 |
윈도우7 VHD 크기 조절 방법 (0) | 2011.04.24 |
Windows7을 VHD에 설치하기와 활용법 (0) | 2011.04.24 |
포맷 후 백업했던 윈도우7 VHD로 부팅하는 방법 (0) | 2011.04.24 |
RECENT COMMENT