В данной статье опишем как можно сжать виртуальный диск WSL2. Так получилось, что в процессе работы с Docker-контейнерами внутри WSL2, виртуальный диск WSL2 сильно раздулся. Если раньше он занимал 20Gb, то теперь стал весить 72Gb. Очевидно, что его нужно сжать. Немного погуглив наткнулся на замечательную статью, в которой описывается как это сделать, и основные положения которой я хочу тут изложить но уже на русском языке.
Прежде чем начинать
Необходимо проверить какие виртуальные машины с линукс у нас запущены. Делается при помощи команды wsl.exe --list --verbose
После выполнения команды вы получите примерно следующее
PS C:\Users\valorin> wsl.exe --list --verbose NAME STATE VERSION * WLinux Running 2 Debian Stopped 2 Ubuntu-18.04 Stopped 2 kali-linux Stopped 2
Далее нужно будет остановить виртуальную машину диск которой вы собираетесь сжимать, в моем случае это WLinux. Запускаете в терминале PowerShell команду:
PS C:\Users\valorin> wsl.exe --terminate WLinux
Можно приступать к сжатию, но перед этим крайне рекомендуется сделать бэкап виртуального диска. Для этого достаточно просто его скопировать куда нибудь.
Использование DISKPART для сжатие VHDX диска WSL2
Можно спокойно использовать утилиту diskpart для сжатия диска, она успешно с этим справляется, без потери данных. В моему случае удалось сжать диск с 72Gb до 23Gb. Итак погнали, запутите diskpart в консоли
PS C:\Users\valorin> diskpart
Далее вам нужно вбить команду
select vdisk file="//filepath"
Где //filepath это путь до файла с расширением .vhdx. У всех путь будет свой, но общий принцип такой. Нужно зайти в папку AppData, далее в папку Local, далее Packages и там найти папку вашей виртуальной машины. В моем случае было не трудно догадаться что это папка CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc так как у меня виртуальная машина WSL Ubuntu.
Итоговая команда имеет вид:
select vdisk file="C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
Дальше запустится процесс сжатия, и спустя некоторое время, в зависимости от объема сжимаемого пространства должно показаться сообщение об окончании процесса. На этом все.