레이블이 VHD인 게시물을 표시합니다. 모든 게시물 표시
레이블이 VHD인 게시물을 표시합니다. 모든 게시물 표시

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 조금 안되게 줄어들었지만, 이건 사용자 사용환경에 따라 좀 다를거다.

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



2014년 12월 6일 토요일

VHD 용량 확장하기.

처음에  VHD 파일을 쓰기 시작할 때만 해도 20기가면 충분했다.
근데, 점점 사용량이 늘어가더니... 이젠 50기가도 부족하다...

다른 잡다한 VHD 파일은 그냥 클린 버젼에 새로운 자식노드를 붙여서 초기화 시켜서 쓰니 괜찮은데, 주 개발용으로 쓰는 VHD 는 함부로 초기화 하기도 곤란하다 보니, 자꾸만 사용 공간이 늘어난다.

좀 답답하지만, 어쩔수 없으니 사용공간을 늘려서 쓰자.

주의 할 점 1 : 자식 VHD 는 사용공간 확장이 안된다.
주의 할 점 2 : 부모 VHD 의 사용공간을 확장 시킬 경우 기존의 자식 VHD 는 사용할 수 없다. (자식이 부모노드를 인식 못함.)



일단 확장할려는 VHD 파일이 아닌 다른 파일로 부팅.
현재 사용중인 VHD 파일은 변경 할 수 없다.
그리고, 관리자 모드로 코멘트창 열기.



sel vdisk file="확장할 VHD 파일 경로"
expand vdisk maximum=확장할 용량

으로 지정하면 된다.

주의할점은, "추가할 용량을 지정" 하는 것이 아니라 "최대 사용량을 변경" 하는 것이므로, 사용하고 싶은 용량을 지정해야 한다. 즉, "30기가에서 100기가로 변경" 하고 싶으면 "70기가 추가" 가 아닌 "100기가로 변경" 해야한다.

이때 지정 용량은 "1기가 = 1024" 이므로, 100기가로 사용공간을 확장하고 싶으면...

100 * 1024 = 102400

102400 으로 지정해 주어야 한다.
즉, 캡춰한 이미지는 100기가를 사용공간으로 확장하는 명령어다.

일단 이렇게 하면 파일 확장은 끝난셈이고, 이제 확장한 VHD 파일로 부팅을 한다.



그런다음, 디스크관리자로 가보면...


확장된 공간만큼 "확장되지 않음" 으로 나타나 있을 것이다.
이걸 "볼륨 확장" 을 선택하면...


얼마만큼 확장 할것인가를 물어 보는데, 전부 다 쓸거면 그냥 "다음" 버튼을 클릭하면 된다.


그럼 이렇게 자연스럽게 확장이 된다.



아... 오랜만에 이렇게 여유있는 사용가능 공간을 보니 마음이 안정된다.








VHD 병합(merge) 기능 사용.

워낙에 개발환경이 다양하다보니, VHD 를 이용해서 OS 를 여러개 설치해 놓고 그때 그때 필요에 따라 사용한다.

원래는 부모 노드를 만들어 놓고 자식 노드를 만들어 교체해가며 쓸려고 했지만...
쓰다보니... 별로 그럴일은 없다...

그냥 자식 노드를 만들지 않고 그냥 쓰는게 편하더라...
부모노드를 쓰면 이도할때도 부모 노드까지 다 복사해야 하고...
그렇다고 용량에 그닥 이익이 있는 것도 아니고...

그렇다 보니 요즘은 자식노드를 부모 노드와 합쳐서 통채고 백업하고, 이동하고... 그런다.


저기 "msiUTLRoot.vhd" 를 "msiUTLCH01.vhd" 와 합칠건데, 보다 시피 부모노드의 크기가 11기가 쯤된다.

사실, 저렇게 쓰면 부모노드의 11기가 정도가 낭비되고 있는 셈.
이론상은 자식노드가 부모노드의 변경점만 가지고 있다고 하는데, 실제로는 그렇지 않은듯... 디스크가 50기가로 지정되어 있는데도 불구하고, 둘이 합쳐보면 60기가가 넘는다.

암든 합칠려면...


일단 코멘드 창을 관리자 권한으로 열어야 한다.
그런다음...


sel vdisk file="자식VHD파일 경로"
merge depth=1

이렇게 하면 된다.
주의 할점은 부모노드가 아닌 "자식 VHD 파일" 을 지정해야 한다는점.

이렇게 하면 병합할 양에 따라 어느정도 병합시간이 지난후...

파일을 보면...


부노 노드의 용량이 자식노드 수준으로 커진것을 볼 수 있다.
만약 용량이 변화가 없다면, 제대로 안된것이므로 다시 한번 시도를...
참고로, 부모노드 파일이 "읽기전용" 이면 작업이 안된다.

하여튼, 이후로는 부모노드를 부팅 디스크로 지정하고 부팅하면, 병합당시 자식노드의 환경과 동일한 상태로 부팅이 된다.