2015년 7월 8일 수요일

VHD 용량 최적화에 SDelete 를 써보자.

VHD 를 Expandable 로 사용하다 보면 실제 사용 용량보다 파일 크기가 커지게 되는데, 이 때 보통 diskpart 의 compact 명령어를 써서 최적화를 하면 파일 크기가 적당히 줄어 든다.


보통은 이렇게만 해도 되지만, 백업용으로 파일을 보관 할려고 할 때 같은 경우에 좀더 용량을 줄일 수 있는 방법이 있다.

원리는 윈도우 시스템은 파일을 삭제 하더라도 실제로 파일이 삭제 되는게 아니라, 삭제된 파일이라는 표시만 해두고, 나중에 파일이 기록될때 그 부분을 사용하는 방식이라, 삭제 플레그만 표시되어 있는 영역은 최적화 할 때 사용중인 영역으로 인식해 최적화를 하므로, 삭제 플래그만 달린 영역을 완전히 삭제후 최적화 하면 좀더 용량을 줄일 수 있는 것이다.

이 공간을 완전히 빈공간으로 만들어 주는것을 Zero Fill 이라고 한다.
(말그대로 그 영역 전체를 '0' 으로 만들어 줌)

쉽게 말해 그냥 compact 를 하면 삭제된 파일들이 포함되지만, Zero Fill을 하고 compact 를 하면 삭제된 파일들을 제외 하고 최적화를 하게 되므로 조금더 용량을 줄일 수 있다.
(그렇다고 무진장 늘어나는 것은 아니라서 궂이 자주 할 필요는 없다.)

그러므로 Zero Fill 을 할수 있는 프로그램이 필요하다.
Zero Fill 을 할 수 있다면 어떤 프로그램이라도 상관 없지만, 그런 프로그램을 구하기 쉽지 않으니, 가장 쉽게 구할 수 있는 SDelete 를 쓰자.

https://technet.microsoft.com/en-us/sysinternals/bb897443.aspx


여기서 Sdelete 를 다운 받는다.
다운 받은 파일의 압축을 풀어보면 실행파일이 하나 있는데, 그걸 적당한 위치에 둔다.
(나의 경우는 VHD 파일과 동일한 폴더에 둠)


그리고, 작업 할 VHD 파일.
현재 대충 25G 정도... 이미 Compact 를 수행해서 줄여 놓은 상태다.

당연히, 현재 사용중인 VHD 파일로는 작업 할 수 없다.
Sdelete 는 되지만, Compact 를 할 수 없다.

일단... 이걸 시스템에 연결한다.


시스템에 연결하고, 온라인 상태로 만들면...


새로운 디스크로 등록되는데, 나의 경우는 "G:" 로 연결 되었다.
이건 사용자 환경에 따라 다름.
물론 이건 Diskpart 명령어에 자신이 있다면 Diskpart 에서 해도 된다.

이렇게 VHD 를 시스템에 연결후...


sdelete -z g:

... 를 실행하면...


라이센스를 동의 하라는데, 동의 하는 수 밖에 없다.
동의 하면 Zero Fill 을 진행 하는데, 시간이 제법 걸리므로 가능하면 SSD 에서 하는게 좋다.

이렇게 Zero Fill 을 완료하더라도, VHD 용량은 변하지 않는다. (오히려 늘어 날때도 있다.)
당연한 것이 Zero Fill 은 빈공간을 "0" 으로 채웠을 뿐 최적화를 위한 어떠한 작업도 하는게 없으니까...

그러니, 최적화를 할려면 Diskpart 의 Compact 를 해줘야 한다.

일단 VHD 를 시스템에서 분리 한다.


오프라인 한다음에...


VHD 분리...
그리고 관리자 모드로 명령 프롬프트를 실행해서...


Diskpart 의 Compact 를 실행... 그러면...


짜잔... 용량이 줄었다.
대략 2G 조금 안되게 줄어들었지만, 이건 사용자 사용환경에 따라 좀 다를거다.

생각보다 그리 많이 줄어 든건 아니지만, 그래도 이렇게 함으로서 조금이라도 백업 용량을 줄일 수 있다.