WSL2 실제 가상하드디스크 위치는 어디일까?
아래의 명령어를 통해서 WSL2 디스트로 이름을 찾습니다.
wsl --list --verbose
NAME STATE VERSION
* Ubuntu Stopped 2
docker-desktop Stopped 2
이렇게 나오면 Ubuntu
를 사용하시면 됩니다.
아래의 명령어를 통해서 파일 경로를 추출합니다. 디스트로
부분을 내가 원하는 (혹은 위에서 찾은) 디스트로
로 바꿔주시면 됩니다.
[PowerShell에서]
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss |
Where-Object { $_.GetValue("DistributionName") -eq "디스트로" } |
ForEach-Object { $_.GetValue("BasePath") }) + "\ext4.vhdx"
디스트로의 이름이 Ubuntu
라면 아래와 같은 명령어를 사용하시면 됩니다.
[PowerShell에서]
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss |
Where-Object { $_.GetValue("DistributionName") -eq "Ubuntu" } |
ForEach-Object { $_.GetValue("BasePath") }) + "\ext4.vhdx"
C:\Users\navystack\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
늘어날 때는 자동이지만 반환은 아니란다 (vhdx, Optimize-VHD)
WSL2에서는 용량은 제한선 안에서 자동으로 늘어나지만, WSL2에서 용량을 비워도, 가상하드디스크 파일은 줄어들지 않습니다.
따라서 수동으로 줄여주어야 합니다.
백업 권장: 작업 전 중요한 데이터는 백업하세요. 비정상 종료나 손상 가능성을 대비해야 합니다.
디스크 축소 조건: WSL2 내에서 가상 디스크를 축소하려면 사용하지 않는 공간이 실제로 존재해야 합니다. 필요 시 WSL2 내에서 다음 명령어로 사용하지 않는 공간을 미리 정리해야합니다.
[WSL2에서]: 시간이 조금 걸립니다. 인내심을 갖고 기다려주세요.
sudo dd if=/dev/zero of=/zero bs=1M
sudo rm /zero
그 다음, 아래의 명령어를 통해서 WSL2를 종료합니다.
[PowerShell에서]
wsl --shutdown
PowerShell에서 다음 명령어를 실행하여 가상 디스크 파일 크기를 축소합니다.
Optimize-VHD -Path "C:\Users\<YourUserName>\AppData\Local\Packages\<배포판 패키지 이름>\LocalState\ext4.vhdx" -Mode Full
제 환경의 위치는 아래와 같았으므로,
C:\Users\navystack\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
Optimize-VHD -Path "C:\Users\navystack\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx" -Mode Full
위와 같이 되겠네요.
실행하시면 사용하지 않는 공간을 반환해서 다시 널널해 집니다.