Две архитектуры — две модели хранения
В WSL1 ядра Linux нет вовсе: система транслирует системные вызовы Linux в вызовы Windows на лету, а файлы лежат в обычной папке — исторически %LOCALAPPDATA%\Packages\<Distro>\LocalState\rootfs — полностью видимой средствам Windows. Поэтому она лёгкая на диске и быстрая, когда скрипты ходят по /mnt/c, но трансляция неполная: Docker, systemd и всё, что требует экзотических вызовов, не работает. WSL2 крутит настоящее ядро Linux в лёгкой служебной виртуалке, что чинит совместимость, но вся файловая система дистрибутива теперь живёт внутри ext4.vhdx — виртуального образа диска, который Windows подключает, но не понимает.
Vhdx лежит в %LOCALAPPDATA%\Packages для дистрибутивов из Store и в %LOCALAPPDATA%\wsl для более новых установок, и у него одна скверная черта: он растёт по требованию и сам никогда не уменьшается. Удаление файлов внутри дистрибутива освобождает место в виртуальном диске, но файл .vhdx держит свою максимальную отметку, пока вы не сожмёте его вручную. Посмотреть размер файла в «Проводнике» сразу после большой чистки внутри дистрибутива — классическое разочарование: цифра не сдвинулась.
Где каждый из них прячет гигабайты
Ни одна версия за собой не убирает, и место утекает в удивительно немногие места:
- ext4.vhdx у WSL2 — у каждого дистрибутива свой; сетап с Docker спокойно доводит его за 30 ГБ
- Собственный диск данных Docker Desktop (docker_data.vhdx) с тем же правилом «только расти»
- Папка rootfs у WSL1 — скромная на фоне, но брошенные старые дистрибутивы держат полную установку
- Кэши пакетов и сборок внутри дистрибутива — apt-кэши, node_modules, каталоги target/ и build/, раздувающие vhdx насовсем
- Бэкапы wsl --export и скачанные образы дистрибутивов, забытые в «Загрузках»
Возвращаем место, не сломав дистрибутив
Сначала приберитесь внутри: apt autoremove и apt clean, docker system prune в Docker Desktop, чистка кэшей npm и pip — всё, что опустошает виртуальный диск до сжатия его контейнера. Затем выполните wsl --shutdown: работающий дистрибутив блокирует свой vhdx. Дальше сжимайте образ: Optimize-VHD с параметром -Mode Full, если стоит инструментарий Hyper-V, или diskpart с командами select vdisk file="<путь>", attach vdisk, compact vdisk, detach vdisk на любой Windows. Свежие версии WSL умеют wsl --manage <Distro> --set-sparse true: vhdx начинает отдавать место автоматически, и в долгую это честно лучший режим.
Два крайних средства заслуживают своих имён. Команда wsl --export упаковывает дистрибутив в .tar, который можно развернуть на другом диске через wsl --import — это чистый способ увести установку WSL2 с переполненного C:. А wsl --unregister <Distro> удаляет дистрибутив вместе с его vhdx целиком, отката у команды нет, так что относитесь к ней как к ядерной. Заодно ограничьте аппетит виртуалки файлом .wslconfig с лимитами памяти и процессоров: иначе простаивающая WSL2 держит гигабайты оперативки просто так.
Вопросы и ответы
Как уменьшить файл ext4.vhdx в WSL2?
Сначала почистите внутри дистрибутива, выполните wsl --shutdown, затем сожмите vhdx через diskpart (select vdisk file, attach vdisk, compact vdisk, detach vdisk) или Optimize-VHD. На свежем WSL команда wsl --manage <Distro> --set-sparse true включает авточистку места.
Что выбрать: WSL1 или WSL2?
WSL2 — вариант по умолчанию и единственный для Docker, systemd и всего, чему нужно настоящее ядро. WSL1 остаётся лучшим для лёгкой работы в консоли с файлами на виндовых дисках: без виртуалки, без vhdx и без аппетита к памяти.
Понятно до покупки: что входит в лицензию
Разовый 30-минутный триал даёт доступ к базовым инструментам. Возможности с меткой PRO остаются закрыты до активации платной лицензии.
Читайте также
Написать нам: [email protected]