Разработчики и системные администраторы на Windows 11 регулярно сталкиваются с проблемой неконтролируемого разрастания подсистемы WSL2 и Docker Desktop: виртуальный диск ext4.vhdx занимает десятки и сотни гигабайт на системном накопителе C:, а системный процесс vmmem забирает до 80–90% всей доступной оперативной памяти. Рассказываем, как правильно настроить лимиты ресурсов, включить автоматическое освобождение памяти и сжать виртуальный диск без потери данных.
Архитектура WSL2 использует динамически расширяемый виртуальный жесткий диск VHDX. Когда контейнеры Docker или пакеты Linux записывают данные, файл диска увеличивается в размере. Однако при последующем удалении файлов внутри дистрибутива Linux физический размер файла ext4.vhdx на хост-системе Windows автоматически не уменьшается. Чтобы вернуть свободное пространство и стабилизировать работу ПК, необходимо выполнить комплексную оптимизацию.
Шаг 1. Ограничение потребления ОЗУ и процессора через .wslconfig
Глобальная конфигурация WSL2 задается в пользовательском профиле Windows. Создайте или откройте конфигурационный файл по пути %UserProfile%.wslconfig (например, C:UsersИмяПользователя.wslconfig) и добавьте параметры:
[wsl2]
# Лимит оперативной памяти для виртуальной машины WSL (например, 6GB или 8GB)
memory=6GB
# Количество выделенных логических ядер процессора
processors=4
# Автоматический сброс неиспользуемого кэша страниц Linux в память Windows
autoMemoryReclaim=dropcache
# Включение разреженного (sparse) режима для автоматического уменьшения диска
sparseVhd=true
Параметр autoMemoryReclaim=dropcache поддерживается в актуальных версиях WSL2 и предотвращает раздувание кэша дисковых операций в процессе vmmem.
Шаг 2. Очистка кэша сборщика и неиспользуемых слоев Docker
Перед физическим сжатием виртуального диска необходимо удалить неиспользуемые образы, завершенные контейнеры и кэш BuildKit внутри Docker Desktop. Откройте терминал PowerShell и выполните команду:
docker system prune -a --volumes -f
Эта команда безопасно удалит остановленные контейнеры, неиспользуемые сети, анонимные тома и образы, освободив место внутри файловой системы Linux.
Шаг 3. Завершение работы подсистемы WSL
Перед операциями сжатия файла виртуального диска необходимо полностью остановить все дистрибутивы WSL и закрыть Docker Desktop:
wsl --shutdown
Убедитесь в Диспетчере задач Windows, что процесс vmmem или vmmemWSL полностью завершился.
Шаг 4. Сжатие виртуального диска ext4.vhdx
Файлы виртуальных дисков дистрибутивов и данных Docker хранятся в каталогах:
- Ubuntu/Debian:
%LocalAppData%Packages...LocalStateext4.vhdx - Docker Data:
%LocalAppData%Dockerwsldataext4.vhdx
Для пользователей Windows 11 с установленным обновлением WSL доступна встроенная быстрая команда сжатия дистрибутива:
wsl --manage Ubuntu --compact
Если требуется сжать диск Docker вручную, воспользуйтесь стандартной утилитой diskpart:
- Запустите PowerShell от имени администратора и введите команду
diskpart; - Укажите путь к файлу диска:
select vdisk file="C:UsersИмяПользователяAppDataLocalDockerwsldataext4.vhdx"; - Переведите диск в режим только для чтения:
attach vdisk readonly; - Выполните команду сжатия:
compact vdisk; - Отключите диск:
detach vdiskи закройте утилиту командойexit.
После завершения сжатия размер файла ext4.vhdx на диске C: уменьшится до фактического объема хранящихся данных, вернув десятки гигабайт свободного места.
Источники
- Microsoft Learn Documentation, 2026-08-20
- Docker Official Documentation, 2026-08-20
