가상 디스크의 축소 작업에 대한 이해
지난 Expand 글에서 가상 디스크의 최대 크기를 확장하는 방법에 대해서 알아보았습니다. 단순하게 생각하면 파티션 때처럼(Extend - Shrink) 확장이 가능하면 축소도 가능하지 않을까 생각할 수 있는데요. 하지만 안타깝게도 VHD 가상 디스크를 자체적으로 축소하는 방법은 없습니다.
그럼에도 불구하고 어쩔 수 없이 가상 디스크의 최대 크기를 축소해야만 하는 상황에 놓일 수 있습니다. 말한 것과 같이 현재 사용 중인 가상 디스크 자체적으로는 해결할 수 없으며, 이럴 때는 새로운 가상 디스크를 생성한 후 XCopy 와 같은 파일 복사 툴, ImageX 와 같은 이미징 툴, Ghost 와 같은 디스크 & 파티션 복제툴을 통해 기존의 가상 디스크에서 새로운 가상 디스크로 모든 데이터를 옮겨오는 방법을 사용해야 합니다.
기존 가상 디스크 ---[데이터 이전]--> 새로운 가상 디스크
즉, 현재 글에서 이야기하려는 가상 디스크의 축소 작업은 엄밀히 말하자면 축소가 아닌 새로운 가상 디스크로의 데이터 이전(복제) 작업인 것입니다.
단순한 데이터 저장용 가상 디스크라면 XCopy 나 윈도우 탐색기의 복사를 통해 작업을 하면 되지만 윈도우가 포함된 가상 디스크라면 이러한 단순 파일 복사로 작업하는 것은 무리이며,(가능은 하지만 권장하진 않습니다.) 주로 ImageX 나 Ghost, True Image 와 같은 디스크 또는 파티션 전체를 이미징(또는 복제)할 수 있는 툴을 사용하여 작업을 진행하게 됩니다.
이러한 가상 디스크의 축소 작업은 윈도우가 포함되어 부팅에 사용 중인 가상 디스크를 대상으로 하는 것이 대부분일 것이기 때문에 작업은 그에 맞춰 진행하는 것으로 설명하도록 하겠습니다.
ImageX 를 통한 가상 디스크의 축소 작업
별다른 상용 툴 없이 작업을 진행하는 가장 간단한 방법은 윈도우 AIK 를 통해 제공되는 기본 이미징 툴인 ImageX.exe 를 통해 작업을 진행하는 것입니다.
현재 VHD 가상 디스크 파일은 윈도우 기준 D:\VHD\Win7.vhd 에 위치해 있으며 이에 맞춰 부팅이 구성되어 있고 해당 가상 디스크의 최대 크기는 30GB 입니다.
이를 20GB 로 축소(20GB 의 새 가상 디스크를 만들고 데이터를 이동)해보도록 하겠습니다. 현재 부팅에 사용 중인 가상 디스크이기 때문에 윈도우를 종료하고 멀티 부팅 중이라면 다른 윈도우로, 단일 부팅이라면 윈도우 PE(윈도우 7 설치 DVD)나 컴퓨터 복구 부팅하여 작업을 진행하면 됩니다.
01. 먼저 작업에 필요한 자신의 윈도우 PE 비트 버전에 맞는 ImageX.exe 파일을 작업을 편하게 하기 위해 VHD 파일과 같은 위치로 복사해둡니다.
02. 이제 준비한 윈도우 PE 또는 윈도우 7 설치 DVD, 또는 컴퓨터 복구로 부팅한 후 명령 프롬프트를 실행합니다.
03. 사용 중이던 가상 디스크가 분리되었고 윈도우 PE 로 부팅하였기 때문에 파티션들의 드라이브 문자가 윈도우에서 사용하던 드라이브 문자와 다를 겁니다. DiskPart 를 실행하여 현재 VHD 파일이 위치한 드라이브의 경로를 다시 정확하게 파악합니다.
04. 준비를 모두 마쳤으면 우리가 해야 할 작업을 요약하면 아래와 같습니다. [이 때 S: 나 T: 와 같은 드라이브 문자는 그냥 예시일 뿐 반드시 동일하게 해야하느 것은 아니며 본인의 취향에 맞춰 적절히 지정하면 됩니다.]
이러한 작업 내용을 토대로 DiskPart 와 ImageX 명령, 기타 필요한 명령들을 내려주면 됩니다. [본인의 상황에 맞게 드라이브 문자나 VHD 파일의 이름, Type 등은 적절히 적용]
05. 시스템을 재시작한 후 윈도우로의 부팅을 확인하고 C: 드라이브의 용량을 확인합니다.
02. 이제 준비한 윈도우 PE 또는 윈도우 7 설치 DVD, 또는 컴퓨터 복구로 부팅한 후 명령 프롬프트를 실행합니다.
03. 사용 중이던 가상 디스크가 분리되었고 윈도우 PE 로 부팅하였기 때문에 파티션들의 드라이브 문자가 윈도우에서 사용하던 드라이브 문자와 다를 겁니다. DiskPart 를 실행하여 현재 VHD 파일이 위치한 드라이브의 경로를 다시 정확하게 파악합니다.
diskpart
list volume
04. 준비를 모두 마쳤으면 우리가 해야 할 작업을 요약하면 아래와 같습니다. [이 때 S: 나 T: 와 같은 드라이브 문자는 그냥 예시일 뿐 반드시 동일하게 해야하느 것은 아니며 본인의 취향에 맞춰 적절히 지정하면 됩니다.]
A. 기존 가상 디스크를 S: 드라이브로 연결.
B. 새 가상 디스크를 T: 드라이브로 연결. (파티셔닝 및 포맷 작업 완료)
C. ImageX 를 통해 기존 가상 디스크의(S: 드라이브) 데이터를 이미징.
D. ImageX 를 통해 새 가상 디스크로(T: 드라이브) 이미징한 데이터를 풀어 줌.
E. 연결된 가상 디스크들을 시스템에서 분리.
F. WIM 이미지 파일과 기존의 VHD 가상 디스크 파일을 삭제.
G. 새로운 VHD 가상 디스크 파일의 이름을 기존의 VHD 가상 디스크 파일 이름으로 변경.
B. 새 가상 디스크를 T: 드라이브로 연결. (파티셔닝 및 포맷 작업 완료)
C. ImageX 를 통해 기존 가상 디스크의(S: 드라이브) 데이터를 이미징.
D. ImageX 를 통해 새 가상 디스크로(T: 드라이브) 이미징한 데이터를 풀어 줌.
E. 연결된 가상 디스크들을 시스템에서 분리.
F. WIM 이미지 파일과 기존의 VHD 가상 디스크 파일을 삭제.
G. 새로운 VHD 가상 디스크 파일의 이름을 기존의 VHD 가상 디스크 파일 이름으로 변경.
이러한 작업 내용을 토대로 DiskPart 와 ImageX 명령, 기타 필요한 명령들을 내려주면 됩니다. [본인의 상황에 맞게 드라이브 문자나 VHD 파일의 이름, Type 등은 적절히 적용]
diskpart
C:\VHD\imagex.exe /capture /compress fast S:\ C:\VHD\Backup.wim "Source"
C:\VHD\imagex.exe /apply C:\VHD\Backup.wim 1 T:\
diskpart
del C:\VHD\Backup.wim /q
del C:\VHD\Win7.vhd /q
ren C:\VHD\New.vhd Win7.vhd
exit
select vdisk file="C:\VHD\Win7.vhd"
attach vdisk
select partition=1
assign letter=S
create vdisk file="C:\VHD\New.vhd" type=expandable maximum=20480
attach vdisk
create partition primary
format fs=ntfs quick
assign letter=T
exit
attach vdisk
select partition=1
assign letter=S
create vdisk file="C:\VHD\New.vhd" type=expandable maximum=20480
attach vdisk
create partition primary
format fs=ntfs quick
assign letter=T
exit
C:\VHD\imagex.exe /capture /compress fast S:\ C:\VHD\Backup.wim "Source"
C:\VHD\imagex.exe /apply C:\VHD\Backup.wim 1 T:\
diskpart
select vdisk file="C:\VHD\Win7.vhd"
detach vdisk
select vdisk file="C:\VHD\New.vhd"
detach vdisk
exit
detach vdisk
select vdisk file="C:\VHD\New.vhd"
detach vdisk
exit
del C:\VHD\Backup.wim /q
del C:\VHD\Win7.vhd /q
ren C:\VHD\New.vhd Win7.vhd
exit
05. 시스템을 재시작한 후 윈도우로의 부팅을 확인하고 C: 드라이브의 용량을 확인합니다.
간단하죠? 사용된 명령은 좀 더 쉽게 이해하실 수 있게 각각의 명령들이 어떠한 작업들에 해당하는지 색깔로 표시를 해드렸습니다. 이를 토대로 하나씩 뜯어 보시면 DiskPart 명령들은 사실 별거 아님을 아실 수 있으실 겁니다.
이렇게 ImageX 를 사용할 경우 한 가지 주의할 점이 있는데, 글에서는 기존 가상 디스크 파일, 새 가상 디스크 파일, 백업 이미징 파일, 이 세 가지 파일을 모두 한 곳에서(글에서 C: 드라이브) 처리를 하였습니다. 하지만 이들은 모두 한 용량하기 때문에 작업을 진행 중인 곳의 용량이 부족할 수도 있다는 것입니다.
그래서 만약 작업하기에 해당 드라이브의 공간이 모자랄 듯 싶다면 백업 이미지 파일과 새 가상 디스크는 용량이 넉넉한 다른 드라이브에 생성하여 작업을 진행하고, 작업을 모두 마친 후 완성된 새로운 가상 디스크를 Copy 나 Move 명령으로 기존 가상 디스크 경로로 옮겨오는 방식을 사용하시면 됩니다.
참고로 VHD 가상 디스크의 디스크 서명을 유지해야 한다면 적절히 원본 가상 디스크의 디스크 서명을 파악하고 UniqueID 명령을 통해 새 가상 디스크의 디스크 서명을 변경하는 작업을 추가하시면 됩니다.
고스트를 통한 가상 디스크의 축소 작업
만약 자신이 고스트를 사용한다면 나머지 부분들은 동일하게 작업하시면 되고, 각각의 가상 디스크의 디스크 번호를 확인하는 과정을 추가하여 디스크 번호를 확인한 후, ImageX 부분을 고스트의 Partition Copy 또는 Disk Copy 명령으로 바꾸어 작업을 해주시면 되겠죠? [이런 경우엔 Disk Copy 작업이 유리]
즉, Disk Copy 작업을 할 것이라면 대충 아래와 비슷하게 작업을 하면 되는 겁니다. [디스크 복제시에는 어차피 대상 디스크의 파티션이 모두 초기화되니 새 가상 디스크에서의 파티션 작업은 불필요, 그 외에도 드라이브 문자를 할당하는 작업도 불필요.]
diskpart
C:\VHD\ghost32.exe -clone,mode=copy,src=3,dst=4,sze1=v -sure -fdsp -fx
diskpart
del C:\VHD\Win7.vhd /q
ren C:\VHD\New.vhd Win7.vhd
exit
select vdisk file="C:\VHD\Win7.vhd"
attach vdisk
create vdisk file="C:\VHD\New.vhd" type=expandable maximum=20480
attach vdisk
list vdisk <- 가상 디스크들의 디스크 번호 확인(기존 가상 디스크 2, 새 가상 디스크 3 이라고 가정)
exit
attach vdisk
create vdisk file="C:\VHD\New.vhd" type=expandable maximum=20480
attach vdisk
list vdisk <- 가상 디스크들의 디스크 번호 확인(기존 가상 디스크 2, 새 가상 디스크 3 이라고 가정)
exit
C:\VHD\ghost32.exe -clone,mode=copy,src=3,dst=4,sze1=v -sure -fdsp -fx
diskpart
select vdisk file="C:\VHD\Win7.vhd"
detach vdisk
select vdisk file="C:\VHD\New.vhd"
detach vdisk
exit
detach vdisk
select vdisk file="C:\VHD\New.vhd"
detach vdisk
exit
del C:\VHD\Win7.vhd /q
ren C:\VHD\New.vhd Win7.vhd
exit
이 때 디스크 번호는 DiskPart 는 0 부터 시작하고 고스트는 1 부터 시작하니 이 부분을 주의해서 src(기존 가상 디스크) 와 dst(새 가상 디스크) 의 디스크 번호를 [DiskPart 에서 파악한 디스크 번호 +1] 하여 잘 지정해주셔야 합니다. 뭐 이런 부분은 고스트 사용자라면 잘 아시겠죠.
다음으로 -clone 스위치에 추가된 sze1=v 는 대상 디스크의 크기에 맞춰 첫 번째 파티션의 크기를 자동으로 조정하는 옵션으로 사실 기본값이기에 sze1=v 는 생략해도 됩니다. 그냥 넣어 봤습니다.
마지막으로 -fdsp 스위치는 대상 디스크의 디스크 서명을 원본 디스크와 동일하게 맞춰주는 옵션으로 만약 디스크 서명을 필요로 하는 프로그램이 설치된 경우가 아니라면 사실 크게 필요하지 않으며 생략해도 상관없습니다. [만약 이것이 로컬 디스크의 복제 작업이라면 디스크 서명이 굉장히 중요하며 부팅에 직접적인 영향을 미치기에 -fdsp 와 같이 디스크 서명을 유지하는 작업이 필수이지만, 지금은 가상 디스크를 복제하는 것이고 Bootmgr 부팅에서 가상 디스크 자체의 디스크 서명은 사용되지 않기 때문에(이 땐 VHD 파일이 위치한 로컬 디스크의 디스크 서명이 중요, 현재 작업들은 해당 로컬 디스크의 서명을 변경하는 어떠한 작업도 포함되어 있지 않죠.) 가상 디스크의 디스크 서명이 변경되더라도 VHD 부팅에는 영향을 미치지 않습니다.]
그리고 명령줄 모드로 직접 명령을 내려 작업하기가 귀찮으시다면 그냥 그래픽 모드를 통해 작업하셔도 뭐 별 상관은 없습니다. 그냥 자기 편한대로 작업하시면 되는 거죠. 이건 고스트 사용자가 알아서 할 문제이구요.
고스트 솔루션 슈트(GSS)에 포함된 고스트를 기준으로 설명을 하고 있지만 트루 이미지 사용자라면 고스트 부분을 트루 이미지로 작업, 윈도우용 고스트 사용자라면 해당 부분을 윈도우용 고스트로 작업하시면 되는 겁니다. 그 외에도 다른 복제 툴을 사용하고 계신다면 해당 툴로 작업하시면 되는 것이구요. 간단하죠?
이번 글은 여기까지 하도록 하겠습니다. 이상입니다. ^^
약간의 꼼수로 VHD Resizer 라는 프로그램을 통해 VHD 파일의 크기를 축소 생성하는 방법을 두 번째 글로 소개하려고 했는데요. VHD Resizer 프로그램을 받기 위해 검색을 하니 첫 검색 결과에 LiveREX 님께서 잘 소개해주신 글을 발견했네요. 100% 동일한 내용이니 두 번째 글은 취소하고 LiveREX 님의 글을 링크로 걸어드리도록 하겠습니다. 참고해보세요. ^^
LiveREX - 윈도우 7 VHD 크기 조절 방법
LiveREX - 윈도우 7 VHD 크기 조절 방법