Как освободить место на диске WSL2

С полным переходом на удаленку в начале пандемии оборудовал постоянное рабочее место со столом регулируемой высоты и креслом Herman Miller. Основным компьютером на тот момент выступал 15’ Macbook Pro late 2018. Так как рабочее время теперь провожу за этим место и занимаюсь задачами связанными с машинным обучением и обработкой данных, решил собрать производительный компьютер на базе 12-ядерного процессора AMD и NVIDIA GeForce RTX 3080. В качестве операционной системы попробовал Ubuntu, Linux Mint, но в итоге разочаровался работой Zoom и других нужных приложений. В итоге установил Windows 10 и собрал окружение на базе Docker и WSL2. Это позволило решить проблемы с качеством десктопного софта и работать с привычным Unix.

Нареканий к такой конфигурации софта нет — даже работают перенесенные с macOS дот-файлы. Единственное, за чем периодически приходится следить, — место на диске. WSL2 создает виртуальный диск в формате .vhdx, который и хранит файлы гостевой операционной системы. Это включает в себя в том числе Docker-образы, скачиваемые для запуска контейнеров. С течением времени размер диска сильно растет и начинает отъедать полезное место на диске C:\.

WSL2 не поддерживает высвобождение места на виртуальном диске, поэтому делать это нужно вручную.

Для начала рекомендую удалить неиспользуемые Docker-образы:

$ docker system prune --all

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: postgres:13.4-alpine3.14

...
Total reclaimed space: 76.84GB

А также выполнить удаление неиспользуемых системных пакетов:

sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove

76.84GB высвободилось на виртуальном диске. На диске C:\ 76.84GB все еще недоступны для пользования.

Ситуацию исправляется следующим образом. Открываем PowerShell с правами администратора и выполняем:

> wsl.exe --list --verbose  # получаем список виртуальных машин

> wsl.exe --terminate Ubuntu-20.04  # останавливаем нужную

> diskpart  # запускаем дисковую утилиту

DISKPART> select vdisk file=C:\Users\devel\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx  # указываем путь к файлу диска

DiskPart successfully selected the virtual disk file.

DISKPART> compact vdisk

100 percent completed

DiskPart successfully compacted the virtual disk file.

То же самое проделываем для диска Docker:

DISKPART> select vdisk file=C:\Users\devel\AppData\Local\Docker\wsl\data\ext4.vhdx

DiskPart successfully selected the virtual disk file.

DISKPART> compact vdisk

100 percent completed

DiskPart successfully compacted the virtual disk file.

Ура, на диске C:\ появились 76.84GB и даже больше.