WSL2 와 Docker Desktop 을 좋다고 쓰고 있었는데 어느날 드라이브가 꽉찬 것을 발견했다.
원인을 조사하다보니 의외로 WSL2 에 설치한 ubuntu 가상 드라이브(VHD)가 상당히 컷다.
검색해보니 WSL2 상의 OS 에서 파일을 삭제해도 VHD 의 크기는 변하지 않는다고 한다.
즉, VHD 는 줄어들거나 재사용 되지 않고 커지기만 한다.
그래서 주기적으로 크기를 줄여줘야 한다.
1. 먼저 대상(ubuntu 20.04 의) VHD 를 찾는다.
탐색기에서 %localappdata%\Packages 에 들어가 *.vhd 로 검색한다
내 경우는 %localappdata%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhd
2. 커맨드 창에서 실행중인 wsl2 인스턴스를 종료한다.
>wsl.exe --list --verbose NAME STATE VERSION * Ubuntu-20.04 Running 2 docker-desktop-data Running 2 docker-desktop Running 2 >wsl.exe --terminate docker-desktop-data >wsl.exe --terminate docker-desktop >wsl.exe --terminate Ubuntu-20.04 >wsl.exe --list --verbose NAME STATE VERSION * Ubuntu-20.04 Stopped 2 docker-desktop-data Stopped 2 docker-desktop Stopped 2
# terminate 하고 실제 Stopped 가 되기까지 시간이 좀 걸렸다.
(안되는줄 알고 커맨드를 여러 번 실행)
# Docker 가 다시 시작할지 물어보는 창이 뜨면 Cancel
2-2. 더 간단한 방법
>wsl.exe --shutdown
3. 커맨드 창에서 diskpart 로 vhd 크기 줄임
>diskpart DISKPART> select vdisk file="1번에서 찾은 vhd 파일의 전체경로" DiskPart가 가상 디스크 파일을 선택했습니다. DISKPART> compact vdisk 100 퍼센트 완료 DiskPart가 가상 디스크 파일을 압축했습니다.
3-1.
4. Docker Desktop 영역 줄이기
2번에서 본 것 같이 Docker Desktop 도 WSL2 를 사용하는 것 같다.
간단히는 다음과 같이 할 수 있는데 하고나니 필요한 이미지도 지워졌다.
Docker Desktop > Troubleshoot (벌레모양) > Clean / Purge data
Delete the following data set(s)
[v] Hyper-V
[v] WSL 2
[v] Windows Containers
참고:
- https://stephenreescarter.net/how-to-shrink-a-wsl2-virtual-disk/
- https://github.com/microsoft/WSL/issues/4699#issuecomment-619394042
아직 테스트 못해본 방법
https://www.altaro.com/hyper-v/compact-vhdx-linux-filesystem/