Tips/VHD

윈도우7 VHD -부모와 자식에 대한 이해

Maximer 2012. 3. 29.
728x90

윈도우7 VHD 부팅의 개념과 활용 에서 VHD의 상속에 대해 알아보았는데요, 좀더 자세하게 설명하겠습니다.

 

VHD는 자식을 순풍 순풍 낳을 수 있는데요 이 자식은 부모가 가지고 있는 모든 정보를 그대로 상속받습니다.

자식VHD로 부팅을 하게되면 부모VHD로 부팅한 상태와 똑같은 상태가 됩니다.

하지만 자식이 감히 부모에게 이래라 저래라 할 수는 없듯이 자식VHD로 부팅한 상태에서 설치한 모든 것들은

부모VHD에 영향을 전혀 주지 않습니다. 자식VHD가 프로그램을 설치하든, 바이러스가 걸리든

부모VHD속의 있는 파일들은 여전히 그대로 있기 때문에, 

첫째 자식을 버려버리고 새로운 자식을 또 순풍 낳아버리면

그 둘째 자식은 다시 부모와 똑같은 상태로 태어나게 됩니다.

이렇게 우리는 VHD만으로 브랜드PC처럼 원할때 다시 예전 시스템으로 돌아갈 수 있는 복구솔루션을 갖출 수 있게 됩니다.

부모VHD는 그대로 유지되고 자식을 생성하여 변화량,즉 차이점은 자식에게만 적용이 된다하여 이런 부팅을

Differencing VHD 부팅이라고 합니다.

 

VHD자식 생성

먼저,부모VHD로 부팅한 상태에서는 자식VHD를 생성할 수가 없습니다. 때문에 자식을 생성하기 위해서는

윈도우7 PE나 다른 윈도우7에서 작업을 해야합니다.

그리고 이미 생성했던 자식이 있다면 그자식으로 부팅해서는 가능합니다. 무슨 말인가 하면,

WIN7.VHD로 부팅한 상태에서는 WIN7.VHD의 자식은 생성이 불가능합니다.

WIN7.VHD의 자식으로 부팅한 상태에서 다시 WIN7.VHD의 새 자식은 생성이 가능합니다.

또한, 다른 부모VHD로 부팅하거나 그 자식 VHD로 부팅한 상태에서도 가능합니다.

물론 VHD가 아니라 직접 설치한 상태에서 VHD를 생성하여 그자식을 생성할 수도 있습니다.

윈도우7 PE도 하나의 독립된 윈도우7 OS의 일종이므로, PE상태에서도 가능합니다.

한마디로 중이 제 머리를 깍지 못합니다.

커맨드창에서 DISKPART 실행합니다.

diskpart

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

parent부분에 부모vhd파일의 풀주소를 적어줍니다.

그리고 자식VHD파일은 같은 디렉토리는 아니더라도, 부모와 같은 파티션에 생성해야합니다.

 

 

자식VHD 운용

 

일반적인 Differencing VHD

그러면 자식VHD를 어떤식으로 운용을 해야 효과적일까요?

시스템복원을 하고 싶을때마다 새로 자식을 생성하는 것은 비효율적이기 때문에

애초에 자식을 생성할 때 2개를 생성합니다. 여기에서 DISKPART로 두번 자식을 생성해줄 필요는 없고,

하나의 자식만 생성한 다음 파일을 복사해서 2개로 만들어도 됩니다. 어차피 같은 일란성 쌍둥이죠

자식을 2개 생성하여 운용할 경우에는 보통 이런 방식을 많이들 사용합니다.

부모VHD가 Win7.vhd 이고 자식VHD를 Win7A.vhd와 Win7Clean.vhd로 만들어 놓았다면

평상시에는 자식A로만 부팅을 계속하고, 자식Clean는 항상 깨끗한 상태를 유지하기 위해 아예 부팅조차 하지 않고

오직 시스템복원을 하고 싶을 때 PE등으로 부팅하여 자식Clean를 자식A에 덮어 씌워 다시 자식 A를 깨끗하게 해줍니다.

※자식A로 부팅된 상태에서 자식Clean을 하나더 복사하여 자식B를 생성한 후 자식 B를 부팅메뉴에 추가시키고 

자식B를 기본 부팅메뉴로 만든후 부팅된 자식A를 멀티부팅메뉴항목에서 제거하고 자식B로 부팅하여 

자식A(Win7A.vhd)파일을 지워줘도 됩니다. 자식vhd파일명이 달라졌을뿐 결과는 같으니까요.

 

이렇게 운용하면, 시스템복원을 하지 않는 이상 계속 자식에 변화량이 축적됩니다.

그래서 깨끗한 자식으로 교체하기전까진 계속 자식VHD파일의 용량이 커질 수밖에 없습니다.

※자식으로 부팅하여 아무것도 하지 않고 다시 종료했더라도 PE에서 자식VHD파일용량을 비교해보면 미세하게 늘어납니다.

그리고 깨끗한 자식으로 교체하기 위해 PE로 부팅하는 것이 귀찮을 수도 있습니다.(물론 5분에서10분도 안걸리지만)

또, PC를 킬때마다 항상 깨끗한 자식으로만 부팅하길 원할 수도 있습니다.

 

자동 교차 Differecing VHD

이런 조건을 충족시킬 수 있는 방법이 애초에 자식 3개를 운용하여 교차부팅을 하는 것입니다..

자식A,자식B,자식Clean 이렇게 일란성 세쌍둥이를 만들어 놓고

자식A와 자식B로만 부팅을 하고, 자식Clean은 역시 깨끗한 상태를 유지하기위한 백업본으로만 존재합니다.

먼저 자식A로 부팅을 합니다. 부팅이 되는 순간 자식A는 더럽혀집니다.

그다음에는 자식B로 부팅합니다. 역시나 자식B도 더럽혀집니다.

그래서 부모VHD에 윈도우 시작시 이런 명령어를 넣어줍니다. (부모에 넣어주어야 자식들 모두에게 똑같이 적용이 되니까요)

"현재 부팅된 OS가 자식 A라면 자식B를 깨끗하게 만들고 다음 재부팅때에는 자식B로 부팅하라.

만약 자식A로 부팅된게 아니라 자식B로 부팅한것이라면, 자식A를 깨끗하게 만들고 다음 재부팅때에는 자식A로 부팅하라.”

이렇게 함으로써 PC를 부팅할때마다 깨끗한 자식으로 부팅이 가능해집니다.

지금까지 말로 설명드린 모든 내용이 아래 포스팅에 포함되어 있으니 참고하세요.

윈도우7 VHD 설치부터 Differencing VHD세팅까지 - 실습하기

 

추가로 자식뿐만 아니라 손주도 가능합니다. 사용예를 드는 것이 이해가 더 빠를 것입니다.

자식A와 자식B를 생성하고

자식A의 자식인 손자1와 손자2를 생성합니다. 자식B도 마찬가지로 손녀1,2를 생성 해줍니다.

 

부모는 익스플로러8이 설치되어 있습니다.

자식A에는 그대로 익스플로러8이 설치되어 있고 홈 네트워크를 공유하도록 설정했습니다.

자식B로 부팅하여 익스플로러9로 업데이트해서 익스플로러9를 설치합니다.

손자1,2로 교차부팅을 하게되면 항상 익스8,홈네트워크 환경의 깨끗한 상태가 되고

손녀1,2는 항상 익스9 환경의 깨끗한 상태가 됩니다.

익스플로러로 예를 들었지만 이런식으로 같은 윈도우7이더라도 유저에 맞게 몇가지 버전을 만들 수 있습니다.

 

 

자식VHD부팅시 VHD파일의 용량변화

처음 VHD를 생성할 때 고정디스크(fixed)와 동적디스크(expandable)로 정하여 생성할 수 있지만

그 자식VHD는 동적디스크로 밖에 생성이 되지 않습니다.

동적디스크란 VHD로 부팅하지 않았을 경우에는 실제 파일이 들어있는 용량만큼만 하드디스크에 자리를 차지합니다.

고정디스크란 VHD로 부팅하지 않았을 경우에도 무조건 처음 지정한 용량만큼 하드디스크에 자리를 차지합니다.

물론 동적이든 고정이든 VHD로 부팅하게되면 마운팅되기때문에 해당VHD파일은 지정한 최대크기로 확장이 되며,

해당 VHD디스크의 볼륨은 C:가 됩니다. VHD로 부팅했을때 C:의 전체용량이 VHD의 최대용량크기인 것입니다.

 

부모VHD가 고정디스크일 경우

하드디스크가 1개의 파티션으로 이루어져 있고 용량은 50기가라 할때

부모VHD를 15GB 고정디스크로 생성하였고 실제 설치한 용량은 윈도우를 포함하여 7기가라 할때 

그자식으로 부팅을 하면,부모VHD파일이 15GB를 차지하고 자식VHD도 15GB를 차지하게 됩니다. 

자식VHD는 부모의 용량까지 상속을 받기 때문이죠

그렇기 때문에

C:는 전체 15GB가 되고 남은 용량은 15-7=8GB가 됩니다.

D:는 원래 하드디스크의 용량인 50GB가 전체용량이고, 부모VHD파일과 자식VHD파일을 합쳐 30GB가 차지하므로

남은 용량은 20GB가 됩니다.

 

부모VHD가 동적디스크일 경우

부모로 부팅하는것이 아니라 자식VHD로 부팅하는 것이기 때문에

자식VHD파일은 역시 15GB로 같지만 부모VHD파일은 실제 파일이 들어있는 7GB만큼만 D:에 차지하게 됩니다.

당연히 C:는 똑같습니다.

D:는 전체50GB - (부모VHD파일 7GB+자식VHD파일15GB=22GB)=28GB

부모가 동적디스크이면 이렇게 용량면에서 이득을 볼 수 있게 됩니다.

고정디스크의 장점은 미리 하드디스크의 공간을 고정적으로 미리 할당해놓기 때문에 

성능면에서 동적디스크보다 좀더 나은 결과를 보여준다는 것이지만, 유저가 실제로 체감할 그정도는 아니기 때문에 

보통 동적디스크를 사용합니다.

그런데 여기에서 한가지 주의할 점이 있습니다.

앞서 자식은 무조건 동적디스크라고 했는데요, ssd같이 용량이 적은 하드디스크를 사용할 경우 용량을 고려해서

부모vhd의 최대용량을 지정해주어야 합니다.

부팅전에는 동적디스크이므로 실제 파일들이 들어 있는 만큼만 용량을 차지하지만

부팅을 하는 과정에서 VHD가 최대용량으로 확장을 하기 때문에, 부팅오류가 생길 수 있습니다

예를 들어

VHD파일이 존재하는 파티션 용량이 50GB이고 부모VHD의 최대용량을 30GB로 지정했습니다.

처음에는 부모VHD에 별로 설치하지 않은 상태에서 자식으로 VHD부팅을 하던중

부모에 무거운 프로그램을 설치하게 되어 부모의 실제 파일용량이 20GB가 되었습니다.

다시 재부팅하여 자식 B로 부팅하려고하면 블루스크린이 뜨며 부팅이 되지 않습니다.

그러므로 부모VHD에 나중에 프로그램을 거의 꽉 채워 설치할 것을 고려하여

VHD파일이 존재하는 파티션의 용량의 1/2보다 작게 부모VHD용량을 설정하는 것을 권장합니다.

위와같은 상황에서 부모의 최대크기가 23GB가 였다면 아슬하게 부팅이 되었을 것입니다.^^

부모 23GB + 자식A 2GB+ 자식B 23GB= 48GB < 50GB

여기서 한가지 의문이 생기죠.

부모VHD로 다시 부팅하여 설치했던 프로그램을 지우면 어떻게 될까요?

예를 들어 설치했던 프로그램이 8GB였다고 하였을때 다시 지우게 되면

부모VHD 파일은 20GB-8GB해서 12GB가 될까요? 그래서 12GB+2GB+30GB=44GB < 50GB 되므로 부팅이 될까요?

정답은 부모VHD파일은 그대로 20GB를 유지합니다.

NTFS 포맷시스템이든 FAT시스템이든 우리가 파일을 지운다고 해서 실제 해당 파일이 지워지는게 아니고

해당 파일이 있다라는 정보와 위치정보 정도를 지우는 것이기 때문에 여전히 실제 파일은 VHD안에 존재하고 있는것이죠.

포맷/파일시스템/일반포맷/빠른포맷 개념 이해 이 포스팅을 참고하신다면 이해가 되실겁니다.

그래서 실제 파일들도 지워주는 작업을 해주면 부모VHD파일의 용량을 줄일 수 있게 됩니다. - VHD 파일 실제 용량 최적화

donaricano-btn
커피 한 잔 값으로 블로그를 후원하실 수 있습니다.

728x90

댓글