WSL 리눅스 내부에서 파일을 삭제해도 윈도우 호스트의 .vhdx 파일 크기는 줄어들지 않습니다. 가상 디스크가 한번 점유한 공간을 운영체제에 자동으로 반환하지 않는 것이 기본 설정이기 때문입니다.
현재 사용 중인 디스크의 용량을 줄이는 방법과 향후 자동화를 위한 팁을 소개합니다.
사전 지식
WSL2의 스토리지는 VHDX라는 파일로 윈도우에 존재합니다. 경로는 이렇습니다.
%userProfile%\AppData\Local\Packages\<배포판-이름>\LocalState\ext4.vhdx
제 경우는 이랬습니다.
C:\Users\mytory\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
diskpart를 이용한 수동 압축
VHDX 파일을 정리하는 안전한 방법입니다. 이 작업은 관리자 권한으로 실행된 명령 프롬프트(CMD) 또는 PowerShell에서 진행해야 합니다.
작업 순서 (100GB 기준 약 5~15분 소요)
- WSL 전체 종료
먼저 실행 중인 모든 WSL을 종료합니다.wsl --shutdown - 관리자 권한으로 터미널 실행
시작메뉴에서CMD또는PowerShell을 검색한 뒤, [관리자 권한으로 실행]을 선택합니다. - diskpart 실행 및 작업
터미널에 다음 명령어를 순서대로 입력합니다. (file=뒤의 경로는 본인의 실제 VHDX 경로로 수정하세요.)
diskpart
# 이하는 diskpart 프로그램 내에서 내리는 명령
# 가상 디스크 파일 선택
select vdisk file="C:\Users\<사용자계정>\AppData\Local\Packages\...\ext4.vhdx"
# 안정적인 압축을 위해 읽기 전용으로 연결
attach vdisk readonly
# 용량 최적화(압축) 실행
compact vdisk
# 연결 해제 및 종료
detach vdisk
exit
작업 시 주의사항 및 성능
- 저장 장치 속도: NVMe SSD 환경에서는 100GB 정도의 파일도 10분 내외로 작업이 완료되지만, HDD 환경에서는 상당히 오래 걸릴 수 있습니다.
- 진행 상황:
compact vdisk단계에서 퍼센트(%) 게이지가 보이지 않더라도 정상 작동 중입니다. 커서가 깜빡이는 동안 기다리면 완료 메시지가 출력됩니다. - 파일 경로 확인: 본인의 가상 디스크 경로를 정확히 파악해야 합니다. WizTree 같은 폴더별 용량을 보여 주는 프로그램으로 확인하면 빠르게 파악할 수 있습니다. 용량이 엄청 큰 단일 파일이 보일 테니까요.
팁
Tip 1. 동적으로 줄어들게 설정하기 (실험적 기능)
WSL2의 실험적 기능으로 Sparse 모드라는 것이 있습니다. 동적으로 사용하지 않는 공간만큼 크기를 줄여 주는 기능입니다. 매번 diskpart를 실행하지 않아도 되는 것이죠.
이 옵션은 기본적으로는 꺼져 있으므로 이미 만든 디스크에 대해서는 따로 켜 줘야 합니다.
단, 실험적 기능이라 그런지, 옵션을 켜는 과저에서 데이터가 망가질 수도 있다고 합니다. 그래서 실행전 백업을 하는 것을 권장합니다.
# 관리자 권한 터미널에서 실행
wsl --manage <배포판이름> --set-sparse true --allow-unsafe
--allow-unsafe 옵션을 보면 아직 실험적 기능이라는 것을 알 수 있죠.
배포판 이름을 확인하려면 wsl --list라고 치면 됩니다.
Tip 2. 신규 생성될 디스크를 위한 선제적 설정
아래 설정은 이미 사용 중인 스토리지에는 영향을 주지 않지만, 앞으로 새롭게 설치할 WSL 배포판에는 자동으로 적용됩니다. %USERPROFILE%\.wslconfig 파일을 생성하거나 편집하여 다음 내용을 추가해 두면 향후 생성할 VHD에 대해서 Sparse 모드를 켜게 됩니다.
[wsl2]
# 신규 생성되는 VHD를 자동으로 Sparse 모드로 설정 (용량 자동 반환)
sparseVhd=true










댓글 남기기