※ Windows Server 2008 R2 한글판에서 작업했습니다.
일시 정지된 가상 컴퓨터, 원인은?
VM이 일시 정지했다. VHD가 엄청나게 커졌다는 사실을 몰랐을 때에는 가상 컴퓨터가 일시 정지된 이유를 찾기 위해 헤매고 있었다. 이벤트 로그를 살펴보니 디스크 공간이 부족하다는 빨간 메시지가 마구 떠 있었다. 디스크 파티션의 용량을 가득 채우는 VHD가 생긴 것이다.
▲ VHD 파일 크기가 259GB정도로 커졌다. 이 VHD가 위치한 있는 디스크는 옹량이 거의 남아있지 않은 상태.
동적 확장 디스크(Expandable VHD)는 일단 한번 덩치가 커지면 안에 들어있는 파일을 삭제해도 VHD 파일 자체의 크기가 줄지는 않는다. Expandable VHD가 위치한 디스크의 여유 공간이 남아있지 않아서, 가동 중이던 가상 컴퓨터가 자동으로 일시 정지 되어 있었던 것. 부리나케 VHD 파일 줄이는 방법에 대해 찾아봤다. 방법은 아래와 같다.
1. VHD 마운트
아 참, VHD를 마운트(Attach)하기 전 가상 컴퓨터를 끄고 진행해야 한다. 나의 경우 일시 정지가 되었기 때문에 더 이상 VM을 사용할 수도 없었다.
▲ 명령 프롬프트를 열어 diskpart로 vhd 파일을 마운트한다.
diskpart
select vdisk file=파일경로
attach vdisk
▲ 내가 작업한 VHD 파일은 위와 같이 4개의 파티션으로 나뉘어져 있고, 삭제해도 무방한 파일들은 J 드라이브에 위치하고 있다.
2. 필요 없는 파일 제거
시스템에 필수적인 파일을 제외하고, 내가 판단했을 때 지워도 된다고 생각한 여러 파일을 선택해 삭제했다. 임시 파일 같은 것들을 쭉 선택하니 총 220GB가 넘었다.
▲ 너무 많은 파일이 쓸데 없이 공간을 차지하고 있었다.
3. SDELETE로 빈 공간 정리
Sysinternals에서 다운로드 할 수 있는 SDELETE.EXE를 사용해 VHD를 최적화할 수 있다. live.sysinternals.com에서 다운로드 가능하다.
▲ SDELETE를 다운로드한다. 현재 버전은 v1.61이다.
SDelete – Secure Delete v1.61
Copyright (C) 1999-2012 Mark Russinovich
Sysinternals – www.sysinternals.comusage: sdelete [-p passes] [-s] [-q] <file or directory> …
sdelete [-p passes] [-z|-c] [drive letter] …
-a Remove Read-Only attribute
-c Clean free space
-p passes Specifies number of overwrite passes (default is 1)
-q Don’t print errors (Quiet)
-s or -r Recurse subdirectories
-z Zero free space (good for virtual disk optimization)
▲ SDELETE 도움말에 나오는 -z 옵션으로 빈 공간을 정리할 예정이다. 가상 디스크 최적화에 좋다고 한다. 과연 그 성능은 어떨까?
▲ sdelete -z 드라이브명: 을 입력한다. 서버의 성능이 그리 좋지 않아서인지, 8시간 정도 걸렸던 것 같다.
▲ 작업이 끝나면 위와 같은 메시지가 나타난다.
※ SDELETE를 동작시키는 동안 VHD 내에 임시 파일이 생기기 때문에, 작업을 하는 동안 디스크의 추가 공간이 필요했다. 내 경우 디스크가 꽉 차 버려서 VHD를 SDELETE를 할 수 없었기 때문에 빈 공간이 많은 서버에 VHD 파일을 복사하여 그곳에서 작업을 진행했다.
4. VHD 압축! 결과는?
▲ SDELETE를 하는 것 만으로는 VHD 파일 자체의 공간이 줄어들지 않는다. diskpart에서 마지막 작업을 해줘야 한다.
select vdisk file=파일경로
detach vdisk
compact vdisk
짜잔!~!
259GB에서 54.6GB로 VHD 파일이 줄어들었다. 만세!!
→
▲ 크기 조절 전 & 후
SDELETE.EXE가 참으로 멋진 도구라는 것을 깨달았다. 하나의 VHD 파일 내에 여러 파티션이 있는 경우에도, 잘 동작하는 모습을 보니 뿌듯하다.
덧붙여서…
다른 컴퓨터에서 작업 후, 원래 컴퓨터에 덮어 쓰기 해서 VM을 되살리는 방법을 택했다. 그런데, VM을 시작하려고 하니 일반 액세스 거부 오류 (0x80070005)가 떴다. 파일의 권한이 잘못된 경우라고 하는데, 탐색기로 VHD 파일의 속성을 열어서 ‘Users’의 편집을 누른 후 Full Control을 체크하니 VM이 정상적으로 켜졌다.
도움을 받은 링크:
- Expandable VHD 용량 최적화 하기 – snoopybox
- [DiskPart] VHD 가상 디스크의 용량 최적화하기 – Compact – 캐플의 꿈꾸는 블로그
- Sdelete로 VHD 파일 용량 줄이기 – Hona’s box
Hyper-V 관련 글:
댓글 하나
핑백: Hyper-V: SDELETE -z 작업으로 VHDX 파일 크기 줄이기 – 아크몬드넷