바로 앞선 글에서 신비님의 글을 소개해드렸는데 제 방식대로 설명해보겠습니다.

Expandable VHD 방식의 단점은 일단 한번 덩치가 커지면 안에 들어있는 파일을 삭제하더라도 그 덩치가 같이 줄어들지는 않는다는 것입니다. 그 이유는 하드에서 데이터를 삭제하면 실제로 그 위치에서 바이너리가 삭제되는 것이 아니고 데이터가 그 위치에 있다는 정보만 사라지는 것이기 때문입니다. 그러한 이유로 인해 삭제된 파일을 복구하는 프로그램이 존재할 수 있는 것이죠.

따라서 삭제된 파일 영역에 0이라는 값을 채워넣어 줘야 완전히 비울 수 있습니다. 이를 흔히 제로필이라 부르는데 VHD 파일의 빈 공간을 제로필 해준 다음 DISKPART의 Compact 명령어를 써주면 용량을 최소화 시킬 수 있습니다.

준비물


위 파일을 압축 푼 다음 D 드라이브에 복사해둡니다. 꼭 D일 필요는 없지만 아무튼 PE로 부팅했을 때 파일이 바로 보일 수 있도록 VHD가 아닌 물리 하드에 복사해두는 것이 좋겠지요.

윈도우 7 DVD나 F8 복구모드, PE 등으로 부팅을 해서 Shift + F10으로 커맨드 창을 띄웁니다. 이때 커맨드 창에다
start cmd 라고 입력하시면 커맨드 창을 2개 띄울 수 있습니다. 이렇게 하는 이유는 한쪽에선 DISKPART 작업을 하고 한쪽에선 SDelete 작업을 하기 위함입니다. 저는 DISKPART 작업을 해야하는 경우 보통 이렇게 커맨드 창을 2개 띄워놓고 하는 편입니다. 왜냐하면 창이 하나일 때는 중간에 DISKPART를 나갔다가 다시 들어와야 하는 경우 불편하기 때문입니다. 게다가 윈도우 7은 DVD로 부팅했을 때도 에어로 스냅을 사용할 수 있기 때문에 더욱 편리합니다. 창을 끌어서 좌우로 옮기시면 각각 절반 크기로 최대화 됩니다.

왼쪽

오른쪽

diskpart
- 디스크파트 실행

 

sel vdi file=c:\win7.vhd
- 최적화할 VHD 파일 선택

 

attach vdi
- VHD 마운트

 

sel par 1
- 첫번째 파티션 선택

 

ass letter=T
- 임시 문자 할당

 

 

sdelete -c T:
- 제로필 시작

detach vdi
- VHD 분리

 

com vdi
- compact로 용량 최적화

 




위에서 사용한 DISKPART의 명령어는 대부분 약자입니다. 저는 이게 더 편한데 헛갈리실 수도 있겠네요.

sel => select
vdi => vdisk
par => partition
ass => assign
com => compact


아무튼 Expandable VHD의 크기가 쓸데없이 너무 커졌다 싶을 때는 한번씩 이렇게 최적화를 해주는 것도 괜찮을 것 같습니다. 최적화 전에는 한 1GB 정도 차이가 났었는데 최적화 후에는 현재 사용중인 C 드라이브의 용량과 부모 VHD 파일의 크기가 거의 같아졌습니다.

신고
Share
  1. 이전 댓글 더보기
  2. fd
    2010.06.06 18:13 신고

    물어 볼 곳이 여기뿐이군요.
    시스템 예약 파티션을 삭제하지 않고 확장할 수 있는 방법은 없는지요?
    100메가에 남은 공간이 1%뿐이라서 더 이상의 vhd작업이나 새로운 운영체제의 멀티 운영을 위한 설치가 안됩니다.
    시스템 예약 파티션없이 사용할 때는 관심 밖이었는데 사용하다 보니 이런 문제에 봉착합니다. ㅎㅎㅎ

    사실 그 안에 뭐가 그리 공간을 차지하는지도 볼 수가 없어서 타당한 사용인지도 궁금합니다.
    참고로 SSD입니다.

    • BlogIcon snpbox
      2010.06.06 18:34 신고
      수정 및 삭제

      그걸 확장하려면 동일 하드의 다른 파티션을 먼저 줄여야 가능하겠지요.

      일단 뭔가 좀 이상합니다. 부팅파일은 10mb 정도밖에 안 될겁니다. 디스크 관리에 들어가서 예약 파티션에 문자를 할당해주세요. 그럼 들어갈 수 있습니다. 안에 뭐가 있어서 그리 용량을 많이 먹었는지 확인해보세요.


  3. 2010.06.21 03:35

    비밀댓글입니다

  4. VHD사랑
    2010.06.21 17:19 신고

    기초가 딸려서 따라하는데 무지 애를 먹는군요.ㅡㅜ;
    질문이 하나있는데요.
    부모 VHD를 만들고 자식 VHD를 만든다음에 새로운 프로그램을 부모에 설치한 후 자식에 적용을 시키려면 어떻게 해야하죠? 이번에 VHD를 만들면서 사이트 전체를 훓었는데... 잘 모르겠네요.;;
    구체적인 명령어를 좀 가르쳐 주시겠어요?
    적용을 못시켜서 번번히 자식 VHD새로 만드는 것도 좀 그렇구요.
    자식 VHD에만 있는 파일도 있는데 프로그램 설치할 때 마다 지워버리면 백업의 문제도 있구요.
    해결이 좀 되었으면 좋겠네요

    • kwanwoo
      2010.06.21 19:59 신고
      수정 및 삭제

      스누피 님의 글을 정독하시면 따라하는데 큰 무리는 없을 것이라 생각됩니다. 부모 VHD를 만들고 자식 VHD를 적용한다면 새로운 프로그램을 부모에는 설치할 수 없습니다. 아마도 자식은 만들었으되 부모 VHD만으로 부팅한후 프로그램을 설치한거 같으신데 그럴 경우에는 무조건 새로 자식을 만들어야 합니다. 그게 아니라 자식에서 새로깐 프로그램을 부모에도 적용시키고 싶다면 PE부팅>diskpart>merge > 자식 VHD 새로 생성 과 같은 절차를 거치셔야 됩니다.

      자세한 내용은 스누피님의 강좌 http://snoopybox.co.kr/1176 를 참조하세요

  5. 무혈
    2010.06.29 23:59 신고

    VHD를 오늘 처음 알아서 이미지를 만들어 봤습니다
    궁금한점이 있는뎅
    VHD 이미지로 만들어 놓은 이미지를 C로 풀어서 (로컬하드로 복사해서) 하드로 부팅시킬 수 있는지요?
    이때 안에 설정된 내용은 그대로 유지하면서요
    그리고 반대로, 기존 로컬하드 C의 내용을 VHD 이미지로 만들어 둘 수는 없는지요?
    VHD 에서는 Bcdedit가 실행이 안되고, 드라이브문자를 변경할 수가 없더군요 (어디선가 그래서 PE로 멀티부팅 하라는 글도 읽은거 같습니다만 ^^; bcdedit 사용시..)
    하드가 여러개라서 뒤죽박죽 되니깐..
    어딘가 써두셧을지 모르는데 제가 못찼은건지도 모르겠습니다

  6. endy3000
    2010.07.04 21:16 신고

    부모VHD 파일이, 실제 들어있는 내용은 16GB에 불과한데
    30GB까지 용량이 치솟았습니다.
    병합을 할때마다 용량이 커지더니, 정말 기하급수적으로 커졌습니다.

    웃긴건 병합을 단 3회밖에 안했구요. 포스팅 하신 방법으로 최적화를 시도해도
    용량은 그대로 30GB 입니다. 왜 그런걸까요? 진단할 방법이 없을런지요..

  7. trevis
    2010.09.04 16:20 신고

    항상 좋은글 감사드립니다 그런데 따라하기도중에 문제가 발생했습니다 본문글중에 좌측내용은 잘진행이 되는데 우측커맨드창에서 sdelete -c t: 입력할경우에 다음과같은 에러 메시지가 나옵니다 "이미지 유형을 지원하는데 필요한 하위 시스템이 없습니다." 고수님의 도움 기다립니다 항상 건강하세요

    • BlogIcon snpbox
      2010.09.04 19:07 신고
      수정 및 삭제

      64비트 PE에는 WOW64 기능이 없어서 32비트 프로그램을 실행할 수 없습니다. 32비트 PE에서 작업하시면 됩니다.

    • trevis
      2010.09.04 21:54 신고
      수정 및 삭제

      말씀하신대로 했더니 잘되네요 빠른 답변 감사드립니다 항상 건강하세요

    • 강현아빠
      2010.09.06 15:47 신고
      수정 및 삭제

      저도 같은 현상이었는데 32비트 PE에서 작업하려면 어떻게 해야되지요?^^;

    • BlogIcon snpbox
      2010.09.06 20:24 신고
      수정 및 삭제

      32비트 윈도우 7 DVD로 부팅하시면 됩니다.

  8. 느린지니
    2010.10.20 18:13 신고

    저도 요거 "이미지 유형을 지원하는데 필요한 하위 시스템이 없습니다." 떴는데 찾아보니
    여기 답이 있었군요. ^_______^ 감사!!

    참고로 스누피님 글을 따라서 64비트 PE를 부팅메뉴에 등록해 놓고 쓰고 있었는데
    (그때는 64비트 윈7깔아 쓰고 있었으나 프린트 문제로 32비트로 돌아왔음)
    공간절약하는 거 해 보려고 32비트로 바꾸려고 하니 그냥 32비트 윈7설치 DVD에서
    boot.sdi. boot.wim 파일 찾아 교체만 해줘도 되는 군요.
    (너무 당연한 것인데 혹 모르는 분들이 계실까하여... ^^)

  9. 느린지니
    2010.10.20 18:19 신고

    근데 이게 윈도우 7 상에서는 안되는 군요... 혹시나 될까하여 해 보았는데
    그렇게 하면 파티션에 드라이브 명이 할당이 안되네요.
    PE로 부팅해서는 되는데..

  10. 어니
    2010.11.13 17:53 신고

    sdelete -c T:에서 10분이 넘게 "Cleaning free space on T:: 1%" 라고만 되어 있는데 그냥 다음 단계 진행해도 되나요?
    위의 그림상으로는 프롬프트가 나와야 되는 거 같은데...
    지금까지 고스트만 사용하다가 오늘 처음 VHD 해보고 있는데 처음이라 그런지 쉽지가 않네요.

  11. 강인혁
    2010.12.29 16:13 신고

    안녕하세요. 스누피님 덕분에 VHD에 대해 알게 됐고 잘 쓰고 있습니다.
    최적화를 하고자 조각 모음을 하고자 하는데요,
    VHD로 부팅이 되어있는상태에서, 조각모음을 하여도 상관없는지 궁금하여 이렇게 댓글 남깁니다
    더이상 최적화 할게 없을정도로 셋팅을 해놓고 최종적으로 조각모음을 한후 부모VHD를 봉인
    해두고 자식VHD를 돌리려고 하는데, 조각모음을 해도 시스템상 상관없는건지 궁금합니다.
    VHD에 대한 자세한 지식이 없어서 고민중이네요 ㅎㅎ

    • BlogIcon snpbox
      2010.12.29 17:29 신고
      수정 및 삭제

      저도 조각모음 가끔 해주긴 하는데, VHD 안에서 하는게 의미가 있는지는 사실 잘 모르겠습니다. ^^

  12. 민들레
    2011.03.04 11:43 신고

    최적화를 실행을 시킨후 cmd창에서 dir로 확인을 해보면 확실히 용량이 줄어든 것을 확인 할 수 있는데 부팅후 탐색기에서 확인을 해보니 용량이 전과 동일 합니다. - E드라이브에 win7.vhd라고 만들어 놓고 부트로더에 등록후 부팅을 해보면 C드라이브의 용량은 최적화 했을때 확인해 본 용량과 비슷한데 E:드라이브에 저장되어 있는 win7.vhd의 용량은 그대로 입니다. 최적화 할때 sel vdisk file=e:\win7.vhd로 불러들여 최적화를 한 상태입니다.

  13. 스따브로긴
    2011.05.01 17:31 신고

    vhd...공부 중인데 감사합니다.

  14. 봄봄
    2011.05.14 10:27 신고

    제 경우 기존 36GB VHD파일을 sdelete -c해주니 19기가가 되었고 여기서 compact해주니 25MB가 줄었습니다.

  15. 아무개
    2011.05.29 20:49 신고

    SSD중 몇몇 제품들은 초기블럭상태가 00가 아닌 FF(인디링스)나 A5(삼성)등이라서 제로필을 하기가 뭐한데,

    'SSD내부의 VHD'의 공간을 제로필하는 것은 실제 SSD에도 제로필을 하게 되는건가요?

  16. 망설이는 중
    2011.10.25 22:13 신고

    저는 win7(하드설치본)에서 부모vhd 최적화를 해 봤는데 창을 2개 사용하니 vhd다시 연결하는 과정도 생략되고 명령어도 줄고,, 좋습니다.
    아이디어가 남 달르십니다.

  17. Phoenix7
    2012.03.21 21:10 신고

    안녕하세요 스누피님이 작성하신 vhd를 활용방법을 이용해서 win7을 잘 이용하고 있습니다.
    vhd 최적화에 문제가 있어서 문의드립니다.
    pe로 부팅해서 최적화 명령을 입력하는 것을 스누피님이 작성하셨던 다른 배치파일들을 분석해서 제 나름대로 만들어 봤는데 정상적으로 작동하지 않습니다. (sdelete이 실행은 돼는데 엉뚱한 드라이브로 시행됩니다.)
    제가 봤을때는 배치파일에 문제는 없는것 같은데 스누피님이라면 문제를 발견하실 수 있을것으로 보여 문의드립니다.


    @echo off
    cd /d %~dp0

    cls
    echo.
    echo.
    echo
    echo Windows 7 Master VHD (Windows7.vhd) Compact 실행
    echo
    echo.
    echo.
    echo.
    pause

    for %%Z in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: Y: Z:) do if exist %%Z\VHD\OS\Windows7.vhd set vhdpath=%%Z\VHD\OS

    echo select vdisk file=%vhdpath%\Windows7.vhd > disklist1.txt
    echo attach vdisk >> disklist1.txt
    echo select partition 1 >> disklist1.txt
    echo assign T >> disklist1.txt
    echo exit >> disklist1.txt

    diskpart /s disklist1.txt

    sdelete -c T:

    echo select vdisk file=%vhdpath%\Windows7.vhd > disklist2.txt
    echo detach vdisk >> disklist2.txt
    echo compact vdisk >> disklist2.txt
    echo exit >> disklist2.txt

    diskpart /s disklist2.txt

    del disklist1.txt
    del disklist2.txt

    cls
    echo.
    echo.
    echo
    echo Windows 7 Master VHD (Windows7.vhd) Compact 실행 완료
    echo
    echo.
    echo.
    echo.
    pause
    cls

    :EOF

    • BlogIcon snpbox
      2012.03.22 00:40 신고
      수정 및 삭제

      echo assign T >> disklist1.txt

      여기 잘못되었네요.

      echo assign letter=T >> disklist1.txt

    • Phoenix7
      2012.03.22 19:54 신고
      수정 및 삭제

      답변 감사합니다.

      중요한 드라이버 위치지정에서 틀렸었네요

      그런데 알려주신데로 수정해서 시행해봤는데 계속 에러가 발생합니다. ㅜ.ㅜ

      알려주신데로 수정해서 배치파일을 진행하면 화면표시에서

      DiskPart가 가상 디스크 파일을 선택했습니다.

      100 퍼센트 완료

      DiskPart가 가상 디스크 파일을 연결했습니다.

      1 파티션이 선택한 파티션입니다.

      지정한 볼륨이 없습니다.
      볼륨을 선택하고 다시 시도해 보십시오.

      이렇게 나오네요 결국 vhd 파일의 위치가 T가 아닌 E(순서상 비어있는곳)로 설정됩니다. ㅜ.ㅜ

      이 문제를 어떻게 해결해야할지...

  18. 엽군
    2012.03.28 00:09 신고

    안녕하세요 스누피님~

    질문이 있는데요, 저도 expandable VHD를 사용중인데..
    왜 스누피님 스샷처럼 용량이 안나오고, 항상 30G 고정으로 나오는걸까요?ㅡ,.ㅡ;;;

    VHD 드라이브의 사용량은 20.0g 라고 나오는데..막상 vhd 파일은 30g 고정이네요..
    제가 혹시 fixed VHD로 만들어버린걸까요?ㄷㄷ

    • 엽군
      2012.03.28 00:52 신고
      수정 및 삭제

      해결했습니다..ㅡ.,ㅡ;;
      VHD가 하나뿐이라 이미 활성화 되어 있어서 최대 용량으로만 표현이 되었었네요....ㅎㅎ
      자식diff-vhd 를 만들어서 자식으로 부팅하니 사용용량이 제대로 표현됩니다...ㅎㅎ
      암튼 좋은 정보 감사합니다~

  19. Ougon
    2012.04.06 21:58 신고

    왜 되려 용량이 늘었을까요;;

    용량이 모자라 자식 VHD를 부팅할수도 없게 돼버렸습니다.

    부모 7GB
    내다 놓은 자식 9GB 에서

    부모 15GB
    내다 놓은 자식 12GB 이 되어버렸네요;;

    sdelete 파일이 다른 드라이브에 있었던 것만 제외하면

    드라이브 문자 T도 똑같이 했는데 ... 왜 그럴까요

    부모
    자식1, 2
    내다 버린 자식
    내다 버린 자식의 자식....

    요렇게 쓰고 있습니다

    • Ougon
      2012.04.06 23:36 신고
      수정 및 삭제

      다시 시도했습니다.

      이번엔 T: 드라이브로 sdelete를 카피해서 진행했습니다

      헌데 sdelete 옵션을 보니 -z 라는 옵션에
      VHD 옵티마이징에 적합하다는 설명이 있더군요

      -z 옵션을 주고 진행한뒤 com vdi 하니 용량은 줄어들었습니다만 ..
      이전과 크게 다를바 없는 (vhd 두개 합해서 22mb 차이) 용량이더군요
      어떤 분 말씀대로 NTFS에선 별 차이가 없는 것이 아닌지 ..

      추측일뿐이지만 MS가 OS에 포함한 기능인데 Zero-fill 하지 않으면 용량이 계속해서 늘어나게끔 그렇게 허술하게 만들진 않았을 것 같다는 생각이 듭니당 ..

    • june
      2014.03.14 03:43 신고
      수정 및 삭제

      제가보기엔 부모에다가 하신게 원인인듯;;
      자식만 sdelete 하시면될듯용

  20. 스누피님짱
    2012.04.20 22:51 신고

    스누피님 궁금한게있는데 위에거에서 하나빼먹었거든요. 바로 sel par 1을 입력을 안하고
    바로 sdelete -c T햏는데 별 이상없을까요??
    그리고 제로필인가 ? 그거 계속 1퍼센트에 머물러있길래 스페이스바를 눌렀는데 갑자기 쑥쑥 올라갔어요. 이게뭐죠 ㅜ; 첨에는 스페이스를 눌러야 뭐 화면이 새로고침되면서 원래 퍼센트율을 보여주는건줄알았는데요. 그게 아니라 스페이스를 누르니까 그제서야 시작하는거같아요 .. 알려줘요 ㅜㅜ

  21. jazz
    2012.09.09 19:50 신고

    안녕하세요..스누피님..덕분에, 제 컴이 항상,쾌적한 컨디션을 유지 하게 되었습니다..

    감사 드립니다..

    한가지 질문 있는데요..

    제로필 후,마지막 단계인,압축하는 과정에서,32%(1시간,기다려 본적 도 있습니다)에 머물러있습니다..할수없이 강제 종료헸습니다만,

    과연 성공적으로 이루어진것 같지는 않습니다..드라이브에 가보면, 용량변화가 미미 하군요..

    즉,사용중인 C드라이브 용량과 부모 vhd 파일의 차이가 2.5GB 정도인데..이 변화가 거의 없습니다..원인을 모르겠습니다..

    몇일째 고생중 이네요...몇번을 해봐도 마찬가지 입니다...