VHDX 용량이 줄지 않을 때, Optimize-VHD와 디스크 정리 순서를 나누는 법

Windows 가상 디스크 파일을 표현한 검은색 외장 SSD와 서버용 저장 장치가 작업대 위에 놓인 AI 생성 사진풍 이미지

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의 물리 파일 크기를 줄이는 상황을 분리해야 해요.

줄어들지 않을 때 진단 순서

  1. VHDX가 동적 형식인지 확인합니다.
  2. 게스트에서 불필요한 파일을 정리하고 휴지통을 비웁니다.
  3. 게스트가 빈 블록을 알릴 수 있는지 확인합니다.
  4. 가상 머신과 연결 프로그램을 종료하고 VHDX 백업을 만듭니다.
  5. Quick 또는 조건을 갖춘 Full을 실행합니다.
  6. 작업 전후 VHDX 파일 크기와 호스트 남은 공간을 비교합니다.

결과가 그대로여도 명령 실패라고 단정하지 마세요. Microsoft 문서도 최적화할 수 있는 것이 없으면 Compact 작업이 성공해도 파일 크기가 줄지 않을 수 있다고 설명합니다.[1] 이 경우 게스트의 실제 사용량, VHDX의 빈 블록 알림, 다른 대용량 파일을 차례로 확인하는 편이 맞습니다.

되돌리는 방법과 하지 말아야 할 것

최적화 작업은 게스트의 파일을 복원해 주는 백업이 아니에요. 작업 전 VHDX 복사본과 중요한 데이터 백업을 따로 보관하세요. 이미 실행한 뒤 문제가 생기면 같은 파일에 반복 명령을 쌓기보다, 가상 머신 연결 상태와 이벤트 로그를 확인하고 작업 전 복사본으로 복구할지 판단합니다.

  • 실행 중인 VHDX를 강제로 이동하거나 삭제하지 않아요.
  • 복구·EFI 파티션을 빈 공간으로 보고 수정하지 않아요.
  • VHDX가 줄지 않는다고 게스트 파일을 무작정 다시 삭제하지 않아요.
  • 명령 대상이 불명확한 diskpart 작업은 중단해요.

중급자 점검표

  1. VHDX 형식과 동적·고정 할당 여부를 기록해요.
  2. 게스트 정리 전 백업과 복구 경로를 준비해요.
  3. 빈 블록 알림과 저장 장치 조건을 확인해요.
  4. Optimize-VHD의 모드와 읽기 전용 조건을 맞춰요.
  5. 작업 전후 파일 크기와 실제 게스트 사용량을 따로 비교해요.

정리

VHDX 축소는 한 번의 명령으로 끝나는 작업이 아니라 게스트 정리, 빈 블록 전달, 호스트 최적화의 세 단계로 봐야 해요. 파일이 줄지 않는다면 명령을 반복하기보다 어느 단계에서 빈 공간 정보가 끊겼는지부터 확인하세요.

가상 머신 저장 공간이 부족하다면 먼저 VHDX 복사본을 만들고, 게스트 정리 결과와 호스트 파일 크기를 별도로 기록해 보세요.

관련 글

공식 출처

  1. Microsoft Learn: Optimize-VHD [1]
  2. Microsoft Learn: diskpart [2]
  3. Microsoft Learn: Overview of Disk Management [3]

함께 읽을 글