가상 디스크 압축하기 - Compact [이동 완료]
이동 완료 2009. 12. 20. 08:01 |이곳은 백업 블로그 입니다. 현재 캐플이 활동 중인 블로그는 CAppleBlog.co.kr 입니다. 최신 정보들은 새로운 블로그에서 확인해 보세요. ^^
- 이곳은 기존 블로그들의 글을 한군데로 모아 놓은 백업 블로그입니다.
- 현재 링크는 대부분 올바르지 않으며 이러한 링크들은 모두 cappleblog.co.kr 로 이동합니다. (※ 링크 주의)
- 블로그와 커뮤니티는 서로 다른 공간입니다.(로그인을 따로 해야합니다.)
- 저는 윈티티(WinTT)이자 신비(ShinB)이며 캐플(CApple)입니다. 편한대로 불러주세요.
[중요] DiskPart 의 모든 작업은 Select 와 List 명령이 기초가 됩니다. 아직 해당 내용에 대한 정확한 지식이 없다면 반드시 해당 내용을 완전히 이해하신 후 이 글로 다시 오시기 바랍니다.
Compact 명령어 정리
글에서 사용되게 될 Compact 명령에 대한 정리입니다. 이 표를 먼저 보시고 따라오시면 글을 이해하시는데 편하실 겁니다. ^^ (중요한 내용만 추린 것이기 때문에 빠진 매개 변수가 있을 수 있습니다.)
Compact Vdisk | Compact Vdisk |
---|---|
가상 디스크 파일을 압축하여(불필요한 공간을 제거하여) 파일의 물리적 크기를 줄입니다. 압축 작업은 분리된 Expandable 가상 디스크 또는 읽기 전용으로 연결된 Expandable 가상 디스크에서만 수행할 수 있습니다. |
가상 디스크 압축하기
한 가지 여기에서 말하는 압축은 여러분이 생각하시는 ZIP 이나 RAR 와 같은 압축이 아닙니다.
동적 확장 가상 디스크의 특성 중 하나는 파일이 기록되어 한 번 늘어난 용량은 해당 파일이 삭제되었다 하더라도 절대 다시 줄어들지 않는다는 것 입니다. 이게 큰 단점이죠. 그래서 가상 디스크를 가장 많이 사용하는 가상 머신 어플리케이션에서는 이러한 동적 확장 가상 디스크에서 실제로 사용 중인 부분을 제외한 나머지 불필요한 공간을 쳐내어 동적 확장 가상 디스크의 크기를 안에 담긴 데이터의 양과 맞게 줄여주는 기능을 제공하고 있습니다.(대표적으로 VMWare Workstation 의 Shrink)
윈도우 7 의 VHD 도 예외는 아닙니다. 동적 확장 가상 디스크에 파일이 기록되었다 삭제 되어도 늘어난 용량은 다시 안 줄어들죠. 그래서 동적 확장 방식의 가상 디스크를 오래 사용하다 보면 이렇게 불필요한 공간이 생각보다 크게 늘어날 수도 있습니다.
즉, 이 말은 가상 디스크에 담긴 실제 데이터는 15 GB 인데 정작 가상 디스크 파일의 크기는 19 GB 가 될 수도 있다는 말이죠. 이 중 4 GB 는 실제론 데이터가 없지만 데이터가 기록되었다 삭제되는 작업이 반복되면서 늘어난 쓰레기 공간이라는 말 입니다. 이 쓰레기 공간을 없애는데 그걸 담당하는 명령이 바로 DiskPart 에선 Compact 입니다.
아래의 F: 드라이브는 D:\Install.vhd 라는 가상 디스크입니다. 현재 약 4.7 GB 정도의 사용을 보이고 있습니다.
이걸 깨끗하게 포맷했습니다. 빠른 포맷 아닙니다. 일반 포맷으로 깨끗하게 포맷한 상태입니다.
이제 해당 가상 디스크를 분리하고 가상 디스크 파일의 크기 변화를 살펴보도록 하겠습니다. 깨끗하게 포맷하였으니 그만큼 가상 디스크 파일의 용량이 줄어들었을까요? 아니죠! 위에서 설명드린 것과 같이 동적 확장 방식의 가상 디스크 파일은 한 번 늘어나면 절대 안 줄어듭니다. 아래와 같이 말이죠.
즉, 위의 Install.vhd 파일은 쓸 때 없는 쓰레기 공간으로 가득차 있는 것 입니다. 이제 이러한 불필요한 공간을 적절히 덜어내야 겠죠? 이럴 때 바로 Compact 명령을 사용합니다. 아래와 같이 말이죠.
select vdisk file="d:\install.vhd"
- D:\Install.vhd 가상 디스크 파일에 포커스를 지정합니다.
compact vdisk
- 가상 디스크를 압축(불필요한 공간을 제거) 합니다.
- D:\Install.vhd 가상 디스크 파일에 포커스를 지정합니다.
compact vdisk
- 가상 디스크를 압축(불필요한 공간을 제거) 합니다.
결과는 아래와 같습니다.
이제 확실히 Compact 명령이 무얼 의미하는지 아시겠죠? 자~ 이 글은 이게 끝이 아닙니다.
Compact 명령의 압축 방식
위의 내용 잘 보셨죠? 확실히 Compact 명령은 동적 확장 가상 디스크의 비어있는 공간을 제거해 줌으로써 가상 디스크 파일의 크기를 줄여주는 기능을 담당합니다. 그리하여 현재 가상 디스크에 실제로 담긴 데이터의 크기 만큼 가상 디스크 파일의 크기가 줄어드는 것이죠.
근데 실제로 사용 중인 가상 디스크 파일에 Compact 를 적용하면 꽤 실망스러운 결과가 나옵니다. 실제로는 가상 디스크 파일의 크기가 눈에 띄게 줄어들지 않는다는 것이죠. 왜 그럴까요? 지금부터 그걸 알려드리도록 하겠습니다. 먼저 Compact 명령의 도움말을 보도록 하겠습니다.
가상 디스크 파일을 압축하여 파일의 물리적 크기를 줄입니다.
압축 작업은 분리된 EXPANDABLE 가상 디스크 또는 읽기 전용으로
연결된 EXPANDABLE 가상 디스크에서만 수행할 수 있습니다.
구문: COMPACT VDISK
이 작업을 수행하려면 가상 디스크를 선택해야 합니다.
예:
COMPACT VDISK
압축 작업은 분리된 EXPANDABLE 가상 디스크 또는 읽기 전용으로
연결된 EXPANDABLE 가상 디스크에서만 수행할 수 있습니다.
구문: COMPACT VDISK
이 작업을 수행하려면 가상 디스크를 선택해야 합니다.
예:
COMPACT VDISK
별로 취할 정보가 없죠. 그래서 슬픕니다... 자 취할 정보가 별로 없으니 다른 정보들을 수집하고 실제로 몸으로 직접 테스트하여 확인할 방법 밖에 없네요. 실험한 내용들을 한 번 보시죠.
먼저 가상 디스크와 관련된 두 가지 명령을 생각해 보도록 하겠습니다.
Compact 명령은 가상 디스크에서 실제로 사용 중인 데이터의 공간 만큼 가상 디스크 파일의 크기를 줄여주는 명령입니다.
Create Vdisk 의 Source 매개 변수는 원본 가상 디스크의 데이터를 새로 생성되는 가상 디스크에 기록하는 명령입니다.
눈치 빠르신 분들은 답 나왔죠? 그냥 쉽게 결론을 말씀드릴께요. 원본이 같다면 Compact 명령을 통해 압축된 파일과 Create Vdisk 에서 Source 를 사용하여 새롭게 생성된 파일의 크기는 같을 수 밖에 없다는 것 입니다. 그래서 제가 복사본 가상 디스크 파일의 생성에서 Create Vdisk Source 를 Compact 와 같은 효과를 내게 응용할 수 있다는 말을 한 것 입니다. 괜히 뻘소리 끄적여 놓은게 아니라... 아참 조건이 같아야 하니 Create Vdisk 파일로 생성된 가상 디스크의 Maximum 크기도 같아야 합니다.
그럼 실제로 테스트 해 보도록 하죠! 아래와 같이 테스트 해 보았습니다.
마이크로소프트사의 DiskPart 도움말의 내용을 토대로 내린 제 예상이 맞다면 위에서 생성한 Create.vhd 파일과 Compact.vhd 파일의 용량은 정확하게 일치해야 합니다.
1 Byte 도 안 틀리고 정확하네요. 이로써 Compact 와 Create Vdisk Source 는 그 결과가 동일한 것으로 판명되었습니다. 근데 원본과 비교해 보면 줄어든 용량의 결과가 굉장히 실망스럽죠? 이제 이걸 이야기 하도록 하겠습니다.
Compact 는 제가 말했다시피 가상 디스크에서 실제로 데이터가 기록되어 사용 중인 공간에 맞춰 파일의 크기를 줄여주는 명령입니다. 그렇다면 깔끔하게 해당 가상 디스크를 포맷한 후 Compact 명령을 내려보도록 하죠. 과연 얼마나 줄어들까요? (DiskPart 를 충실히 따라오신 분들은 따로 설명드리지 않아도 포커스의 이동이라던지 각 명령의 의미를 모두 아실거라 믿고 따로 설명 안 합니다.)
결과는 단 1 Byte 도 줄어들지 않았습니다. 이렇게 포맷한 Compact.vhd 파일을 Source 로 하여 Create Vdisk 로 파일을 생성해도 결과는 똑같습니다.(이건 여러분들이 직접 실험해 보세요. 무료한 일상을 실험과 함께~)
아니 왜? 이런 거지같은 결과가 나오는 걸까요? 자꾸 같은 말을 반복하게 되는데요. 그것은 Compact 는 가상 디스크에 실제로 기록되어 있는 데이터의 공간에 맞춰 파일의 크기를 줄여주기 때문입니다. 아실 분들은 이미 눈치채셨겠지만 전 위에서 빠른 포맷을 진행했습니다. 즉, 디스크에는 실제론 아직 데이터가 그대로 남아 있다는 것이죠. 빠른 포맷과 일반 포맷의 차이는 질리도록 설명했으니 모르시는 분들은 아래의 글을 참고하시구요.
그럼 이번엔 빠른 포맷이 아닌 일반 포맷을 하여 모든 데이터를 정말로 완전히 삭제한 후 Compact 작업을 해 볼까요? (하아... 그냥 VHD 파일 작은거 하나 만들어서 글 쓰는데 쓸 걸...)
딱! 디스크와 NTFS 메타 데이터 만큼의 크기로 파일의 크기가 정확하게 줄어들었네요.
자~ 슬슬 결론입니다. 굉장히 슬프도록 단촐한 Compact 명령의 도움말에서 얻을 수 없었던 정보는 애석하게도 Compact 명령과 동일한 결과를 도출해 내는 Create Vdisk 의 Source 매개 변수에 대한 도움말에 있습니다. 아래와 같이 말이죠.
[SOURCE=<"파일 이름">]
새 가상 디스크 파일을 미리 채우는 데 사용되는
기존 가상 디스크 파일의 경로입니다. SOURCE를
지정하면 입력 가상 디스크 파일의 데이터가 입력
가상 디스크 파일에서 만든 가상 디스크 파일로
블록 단위로 복사됩니다. 하지만 부모-자식
관계는 설정되지 않습니다.
새 가상 디스크 파일을 미리 채우는 데 사용되는
기존 가상 디스크 파일의 경로입니다. SOURCE를
지정하면 입력 가상 디스크 파일의 데이터가 입력
가상 디스크 파일에서 만든 가상 디스크 파일로
블록 단위로 복사됩니다. 하지만 부모-자식
관계는 설정되지 않습니다.
'입력 가상 디스크 파일의 데이터가 입력 가상 디스크 파일에서 만든 가상 디스크 파일로 블록 단위로 복사됩니다.'
이제 결론 나왔네요. Compact 는 가상 디스크 파일을 압축할 때 블록 단위의 데이터를 기준으로 하여 파일을 압축(필요 없는 공간을 제거하여 파일의 크기를 줄임)하는 것 입니다.
그러니 우리가 빠른 포맷을 하거나 파일을 삭제하였다고 하더라도 익히 알다시피 디스크에는 파일이 완전히 제거되는 것이 아니라 파일에 대한 연결만 끊기고 실제로는 디스크에 파일이 남아 있는 상태입니다. DiskPart 의 Compact 는 바로 이러한 데이터까지 모두(어쨌든 블록 단위로 보았을 때 분명 데이터는 있으니) 사용 중인 공간으로 판별하고 그리하여 실제로 우리가 Compact 명령을 실행했을 때 우리가 생각했던 것 만큼 가상 디스크 파일의 용량이 줄어들지 않는 것 입니다.
그래서 DiskPart 에서 동적 확장 방식의 가상 디스크 파일의 불필요한 공간을 제거해 주는 Compact 명령은 우리가 흔히 생각하는 만큼의 결과를 가져다 주진 않습니다. VMware Workstation 의 Shrink 는 그래도 생각한 만큼 결과가 나오던데... 아무튼 마무리로 마이크로소프트의 도움말을 제작한 녀석에게 딱 한 마디만 하고 싶네요.
Compact 라는 명령을 설명하는데 왜 '가상 디스크 파일을 압축하여 파일의 물리적 크기를 줄입니다.' 따위의 헷갈리는 문구를 적용하였냐는 것 입니다.
압축하여 <- 뭐가 생각나십니까? ZIP 이나 RAR 와 같은 압축이 바로 떠오르지 않으신가요? 지금 Compact 명령이 하는 작업이 압축 알고리즘을 적용하여 데이터를 압축하는 그 압축입니까? 아니죠! 파일 내에서 불필요하게 차지하고 있는 공간을 제거하여 파일의 크기를 줄이는 것이죠! Expandable 에서만 적용되고 Fixed 에서는 적용이 안 된다는 사실과 VMware Workstation 의 Shrink 기능과 같은 비슷한 기능들을 토대로 하여 사람들이 "아~ 이 압축이 그 압축이 아니라 필요없는 공간을 쳐내는 거고 그걸 그냥 압축이라고 한 거구나!" 라고 바로 판단이 가능할까요? 가상 머신이 뭔지도 모르는 분들이 수두룩한데? 아니면 ZIP 과 같은 압축을 생각할까요? 전 후자 같은데요. 저도 처음 도움말을 보았을 때 깜빡 속고 이게 뭔 소리일까 잠시 혼동했었습니다. 왜 사람들을 헷갈리게 하나요?
그냥 압축이란 단어를 사용하지 말고 "가상 디스크의 공간을 최적화하여 파일의 물리적 크기를 줄입니다" 정도로 하면 사람들이 그렇게 안 헷갈리잖아!!!!!!!!!!!! 그럼 나도 니들 도움말에 맞춰 정한 포스팅 제목 때문에 괴로워하지 않아도 되잖아!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
여담으로 우리가 흔히 생각하는 만큼의 결과를 얻기 위해선 두 가지 방식을 생각해 볼 수 있는데요. 첫 번째 방법이 실제로 사용 중인 파일을 제외한 나머지 공간의 데이터를 모두 깨끗하게 삭제하는 프로그램이 존재한다면 해당 프로그램을 통해 가상 디스크의 나머지 공간을 정리한 후 Compact 명령을 적용하는 방법이 있겠습니다.
두 번재 방법이 블록 단위가 아닌 파일 단위에서 데이터의 처리가 이루어지는 백업 프로그램을 통해 해당 가상 디스크의 드라이브를 백업하고 새로운 가상 디스크를 생성하여 풀어주는 방식입니다. 시간은 살짝 걸리더라도 VHD 파일을 최적화 하는데에는 좋을 듯 하죠? 우리가 알고 있는 파일 단위로 드라이브의 데이터를 백업할 수 있는 프로그램으로 ImageX 가 있죠.
두 방식 중 ImageX 를 통해서 가상 디스크를 최적화하는 방법을 적용하여 해당 파일을 백업해두거나 부모로써 사용하면 좋을 듯 합니다. 물론 이 내용은 제가 직접 적용하여 사용하고 있구요. ^^;; 글로써는 DiskPart 정리가 끝나면 VHD 의 활용과 관리를 다룰 때 정리하여 다루도록 하겠습니다. 지금은 어쨌든 DiskPart 의 명령들을 정리하는 시간이니까요. ^^ 이 글은 여기까지 입니다. ^ㅡ^*
윈도우 7 의 디스크 관리 - DiskPart
좀 더 강력한 디스크 관리를 위하여 - DiskPart 의 시작기초 관리
목록 출력과 포커스 지정, 속성 표시 - List, Select, Detail
디스크 변환 - Convert
드라이브 문자 및 경로의 관리 - Assign, Remove
파티션(볼륨) 포맷하기 - Filesystems, Format
기본 디스크 관리
파티션 생성하기 - Create Partition
파티션 삭제하기 - Delete Partition
파티션 확장하기 - Extend
파티션 축소하기 - Shrink
파티션 활성화 - Active, Inactive
동적 디스크 관리
단순 볼륨의 생성 - Create Volume Simple
스팬 볼륨의 생성 - Extend
스트라이프 볼륨의 생성 - Create Volume Stripe
미러 볼륨의 생성 - Create Volume Mirro, Add
미러 볼륨의 분리 - Break
미러 볼륨의 복구 - Delete Disk, Add
RAID-5 볼륨의 생성 - Create Volume RAID
RAID-5 볼륨의 복구 - Delete Disk, Repair, Recover
동적 볼륨의 삭제 - Delete Volume
외부 디스크 가져오기 - Import
가상 디스크 관리
가상 디스크의 생성과 관리 - Create Vdisk, Attach, Detach
가상 디스크 확장하기 - Expand
가상 디스크 압축하기 - Compact
자식 디스크(차이점 보관용 디스크) 생성하기 - Create Vdisk Parent
부모 - 자식 디스크의 병합 - Merge
가상 디스크 삭제하기 - Windows Del
기타 관리
디스크 재검색 - Rescan
디스크 초기화 - Clean
디스크 자동 탑재 - Automount
디스크, 볼륨의 특성 조작 - Attributes
DiskPart 의 스크립팅
DiskPart 의 도움말 정리
DiskPart 를 끝내며