TL;DR
- WSL2에서 파일을 삭제해도 Windows의 C: 드라이브 공간은 자동으로 늘어나지 않으며, 배포판을 종료한 뒤 가상 디스크 파일을 수동으로 압축해야 함.
- 각 WSL2 배포판은 동적으로 확장되는 VHDX 가상 디스크에 저장되며, Linux 내부에서 확보한 공간은 압축 전까지 Windows에 반환되지 않음.
- 압축 전
wsl --shutdown으로 WSL을 종료하고wsl -l -v에서 모든 배포판이 중지 상태인지 확인해야 함. - Windows 10/11 Pro·Enterprise에서는
Optimize-VHD, Home에서는diskpart를 사용해 디스크를 압축할 수 있음. - 디스크 압축은 Linux가 이미 여유 공간으로 표시한 부분만 회수하므로, 패키지·로그·Docker 레이어를 먼저 정리해야 큰 용량을 되찾을 수 있음.
WSL2 디스크가 계속 커지는 이유
- 각 WSL2 배포판은 보통 다음 위치에 있는 자체 가상 디스크 파일(
.vhdx)에 저장됨. C:\Users\YOURNAME\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\ext4.vhdx- 디스크는 배포판에서 공간을 사용할수록 자동으로 커지는 동적 확장 방식이며, Linux 내부에서 파일을 삭제해도 Windows가 자동으로 크기를 줄이지 않음.
- 삭제로 확보한 공간은 배포판에서 다시 사용할 수 있지만, 파일을 수동으로 압축하기 전까지 Windows의 C: 드라이브로 반환되지 않음.
1단계: WSL 완전히 종료
- 명령 프롬프트(Command Prompt) 또는 PowerShell에서
wsl --shutdown을 실행함. wsl -l -v를 실행해 실제 종료 여부를 확인하고, 목록의 모든 배포판이Stopped로 표시되는지 확인함.
2단계: 배포판의 VHDX 파일 찾기
- 정확한 경로는 실행 중인 배포판에 따라 다르며, Microsoft Store에서 설치한 대부분의 Linux 배포판은 다음 위치에 있음.
%LOCALAPPDATA%\Packages\<DistroFolderName>\LocalState\ext4.vhdx- Linux 배포판이 아닌 Docker Desktop의 디스크 파일을 찾는 경우에는 파일 위치가 다른 별도의 Docker Desktop 디스크 공간 안내를 참고해야 하며, 절차는 거의 동일함.
3단계: 디스크 압축
- Windows 10/11 Pro 또는 Enterprise에서는 관리자 권한으로 PowerShell을 열고
Optimize-VHD -Path "C:\path\to\ext4.vhdx" -Mode Full을 실행함. - Windows 10/11 Home에서는 Hyper-V 모듈을 기본 제공하지 않으므로
diskpart를 사용함. diskpart를 실행한 뒤select vdisk file="C:\path\to\ext4.vhdx"로 디스크 파일을 선택함.attach vdisk readonly로 읽기 전용 연결하고,compact vdisk로 압축함.detach vdisk로 연결을 해제한 뒤exit로 종료함.- 디스크 압축은 Linux가 이미 여유 공간으로 표시한 공간만 반환함. 사용하지 않는 패키지, 로그 또는 오래된 Docker 레이어가 디스크를 채우고 있다면 WSL 내부에서 먼저 정리한 다음 종료하고 압축해야 함.
- 이미 사용 공간으로 가득 찬 디스크는 압축만으로 크게 줄어들지 않음.
4단계: WSL 다시 시작
- 배포판 터미널을 다시 열거나 Docker Desktop을 시작하면 됨.
- 처음 사용할 때 WSL이 자동으로 다시 시작됨.
디스크가 무제한으로 커지지 않게 하기
%USERPROFILE%\.wslconfig를 편집해 WSL의 메모리와 프로세서 사용량을 제한할 수 있음.- 설정 예시는 메모리
6GB, 프로세서4개, 스왑0임. - 이 설정은 디스크 크기를 직접 제한하지 않고 메모리와 CPU 사용량을 제한함.
- WSL의 리소스 사용량을 관리하면 디스크가 차는 속도를 늦추는 데 도움이 됨. 디스크 증가의 대부분은 시간이 지나면서 쌓이는 Docker 레이어와 패키지 캐시에서 발생함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요