2021년 4월 7일 수요일

WSL2 VHD 압축

 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/