VHDX 용량이 줄지 않을 때, Optimize-VHD와 디스크 정리 순서를 나누는 법
AI를 활용하여 생성한 이미지입니다.
VHDX 파일은 게스트 운영체제에서 파일을 지웠다고 바로 작아지지 않아요. 게스트 안에서 빈 공간을 만들고, 그 빈 블록을 호스트가 알아볼 수 있게 정리한 뒤, 호스트에서 최적화 작업을 실행해야 합니다. 이 순서를 건너뛰면 Optimize-VHD가 성공해도 파일 크기가 그대로일 수 있어요.
먼저 동적 디스크인지 확인해요
Optimize-VHD는 고정 크기 가상 하드 디스크에는 적용되지 않고, 동적으로 할당되는 VHD·VHDX의 미사용 블록을 정리하는 도구예요.[1] 파일 탐색기에서 보이는 최대 용량과 실제 VHDX 파일 크기를 혼동하면 안 됩니다. 전자는 게스트가 사용할 수 있는 상한이고, 후자는 호스트 저장 장치에서 현재 차지하는 공간이에요.
| 보이는 상태 | 먼저 확인할 것 | 다음 판단 |
|---|---|---|
| 게스트 파일을 지웠지만 VHDX는 그대로 | 게스트 빈 공간과 TRIM·제로화 여부 | 호스트 최적화 전처리 필요 |
| Optimize-VHD가 성공했지만 크기 변화 없음 | 동적 디스크인지, 읽기 전용 연결인지 | 회수 가능한 블록이 없는지 재확인 |
| 호스트 디스크가 부족함 | VHDX 외의 큰 파일과 복구 파티션 | 가상 디스크만 지우지 말고 범위를 분리 |
| 가상 머신이 실행 중 | 백업·종료 가능 여부 | 모드에 맞게 종료 또는 읽기 전용 연결 |
디스크 관리에서는 EFI 시스템 파티션과 복구 파티션이 비어 보이더라도 부팅에 필요한 파일을 담고 있을 수 있어요. Microsoft는 이런 파티션을 수정하지 않는 것을 권장합니다.[3]
1단계: 게스트 안에서 불필요한 공간을 정리해요
가상 머신을 실행한 상태에서 먼저 게스트 운영체제의 휴지통, 임시 파일, 오래된 설치 파일을 정리합니다. 중요한 파일을 지웠다면 복구가 필요한지 확인한 뒤 진행하세요. 호스트에서 VHDX만 줄이는 작업은 게스트 파일을 대신 삭제해 주지 않아요.
파일을 지운 뒤에도 빈 공간이 그대로 데이터처럼 보이면 호스트는 어떤 블록을 회수해도 되는지 알기 어렵습니다. SSD와 파일시스템, 게스트 도구가 TRIM이나 빈 공간 알림을 지원하는지 확인하고, 지원 여부를 모를 때는 먼저 작은 복사본으로 시험하세요. 이 글에서는 확인하지 않은 특정 게스트 명령을 만능 해법처럼 쓰지 않아요.
2단계: VHDX 연결 상태를 바꿔요
Microsoft 문서상 Optimize-VHD의 Full 모드는 제로 블록을 찾아 회수할 수 있지만, 가상 디스크가 읽기 전용으로 연결된 경우에만 허용됩니다. VHDX에서는 기본 모드가 Quick이고, Quick은 제로 블록을 새로 검색하지 않고 이미 표시된 미사용 블록을 회수해요.[1]
따라서 일반적인 순서는 가상 머신을 정상 종료하고, 해당 VHDX가 다른 가상 머신이나 백업 프로그램에 붙어 있지 않은지 확인하는 것입니다. 파일을 다른 프로그램이 잡고 있으면 최적화가 실패하거나, 더 나쁘게는 백업 시점과 현재 상태가 달라질 수 있어요. 작업 전 VHDX 파일을 별도 저장 장치에 복사해 되돌릴 수 있게 해 두세요.
Optimize-VHD 모드 선택
| 모드 | 하는 일 | 쓸 만한 조건 |
|---|---|---|
| Quick | 표시된 미사용 블록을 회수 | VHDX가 읽기 전용으로 연결된 경우 |
| Full | 제로 블록을 스캔하고 회수 | 가상 디스크를 읽기 전용으로 연결할 수 있을 때 |
| Pretrimmed | Quick처럼 처리하되 읽기 전용 조건이 다름 | 스토리지와 연결 상태를 이해하는 관리자 |
| Retrim | 재트림만 전달 | 블록 회수보다 저장 장치 알림을 다시 보낼 때 |
PowerShell 명령은 경로를 정확히 확인한 뒤 실행해야 합니다. 예를 들면 Optimize-VHD -Path "D:\VM\data.vhdx" -Mode Quick처럼 대상 파일을 명시합니다. -Mode Full을 무조건 더 좋은 선택으로 보면 안 돼요. 읽기 전용 조건을 맞추지 못하면 사용할 수 없고, 스캔 시간이 늘어날 수 있습니다.[1]
diskpart는 다른 도구예요
diskpart는 디스크·파티션·볼륨·가상 하드 디스크를 관리하는 명령 인터프리터입니다. Microsoft는 먼저 대상을 나열하고 선택해 포커스를 준 뒤 명령이 그 대상에 적용된다고 설명해요.[2] 이 특성 때문에 VHDX 용량을 줄이는 작업에서 diskpart를 먼저 실행하는 습관은 위험합니다.
명령을 입력하기 전에 list disk, list volume, select 대상이 실제로 무엇을 가리키는지 확인하세요. 파티션을 줄이거나 지우는 명령은 Optimize-VHD의 블록 회수와 목적이 다릅니다. 게스트 볼륨의 파일시스템 크기를 조정해야 하는 상황과, 호스트 VHDX의 물리 파일 크기를 줄이는 상황을 분리해야 해요.
줄어들지 않을 때 진단 순서
- VHDX가 동적 형식인지 확인합니다.
- 게스트에서 불필요한 파일을 정리하고 휴지통을 비웁니다.
- 게스트가 빈 블록을 알릴 수 있는지 확인합니다.
- 가상 머신과 연결 프로그램을 종료하고 VHDX 백업을 만듭니다.
- Quick 또는 조건을 갖춘 Full을 실행합니다.
- 작업 전후 VHDX 파일 크기와 호스트 남은 공간을 비교합니다.
결과가 그대로여도 명령 실패라고 단정하지 마세요. Microsoft 문서도 최적화할 수 있는 것이 없으면 Compact 작업이 성공해도 파일 크기가 줄지 않을 수 있다고 설명합니다.[1] 이 경우 게스트의 실제 사용량, VHDX의 빈 블록 알림, 다른 대용량 파일을 차례로 확인하는 편이 맞습니다.
되돌리는 방법과 하지 말아야 할 것
최적화 작업은 게스트의 파일을 복원해 주는 백업이 아니에요. 작업 전 VHDX 복사본과 중요한 데이터 백업을 따로 보관하세요. 이미 실행한 뒤 문제가 생기면 같은 파일에 반복 명령을 쌓기보다, 가상 머신 연결 상태와 이벤트 로그를 확인하고 작업 전 복사본으로 복구할지 판단합니다.
- 실행 중인 VHDX를 강제로 이동하거나 삭제하지 않아요.
- 복구·EFI 파티션을 빈 공간으로 보고 수정하지 않아요.
- VHDX가 줄지 않는다고 게스트 파일을 무작정 다시 삭제하지 않아요.
- 명령 대상이 불명확한 diskpart 작업은 중단해요.
중급자 점검표
- VHDX 형식과 동적·고정 할당 여부를 기록해요.
- 게스트 정리 전 백업과 복구 경로를 준비해요.
- 빈 블록 알림과 저장 장치 조건을 확인해요.
- Optimize-VHD의 모드와 읽기 전용 조건을 맞춰요.
- 작업 전후 파일 크기와 실제 게스트 사용량을 따로 비교해요.
정리
VHDX 축소는 한 번의 명령으로 끝나는 작업이 아니라 게스트 정리, 빈 블록 전달, 호스트 최적화의 세 단계로 봐야 해요. 파일이 줄지 않는다면 명령을 반복하기보다 어느 단계에서 빈 공간 정보가 끊겼는지부터 확인하세요.
가상 머신 저장 공간이 부족하다면 먼저 VHDX 복사본을 만들고, 게스트 정리 결과와 호스트 파일 크기를 별도로 기록해 보세요.