Текст и данные · Инструкция
Как уменьшить файл ext4.vhdx WSL 2
Уменьшить файл ext4.vhdx WSL 2 имеет смысл, когда внутри Linux данные уже удалены, но VHDX на диске Windows остался.
Короткий ответ
Сначала убедитесь через `df -h`, что место внутри Linux действительно освобождено, сделайте резервную копию важных данных и выполните `wsl --shutdown`. Затем найдите путь к ext4.vhdx по имени дистрибутива, выберите этот VHD в DiskPart и примените `compact vdisk`.
Почему удаление файлов не уменьшает VHDX сразу
WSL 2 хранит файловую систему дистрибутива в виртуальном диске ext4.vhdx. Он может динамически увеличиваться по мере записи, но физический файл на NTFS не обязан автоматически уменьшаться после `rm`, очистки package cache или удаления Docker-образов. Microsoft описывает `compact vdisk` именно как средство уменьшения физического размера динамически расширяемого VHD: такие диски растут, когда в них добавляют данные, но не сокращаются сами только от удаления файлов. Важно различать два показателя. `df -h /` показывает, сколько места занято внутри ext4; свойства ext4.vhdx в Windows показывают физический размер контейнера. Если `df` всё ещё показывает высокий Used, compact не заменяет нормальную очистку Linux.
Совет: Сначала освобождайте данные внутри Linux и только потом обслуживайте контейнер. Иначе вы уменьшаете упаковку, не решая причину роста.
Безопасная последовательность compact vdisk
- Выполните `wsl -l -v` и зафиксируйте точное имя дистрибутива, например Ubuntu. Убедитесь, что он работает как WSL 2.
- Внутри дистрибутива выполните `df -h /`. Удалите ненужные данные штатными Linux-инструментами и убедитесь, что показатель Used реально снизился.
- Закройте терминалы, Docker Desktop и другие процессы, которые используют WSL. В PowerShell выполните `wsl --shutdown` и не запускайте дистрибутив до завершения операции.
- Найдите путь к VHDX официальным запросом Microsoft: `(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq "Ubuntu" }).GetValue("BasePath") + "\ext4.vhdx"`, заменив Ubuntu на своё имя.
- Откройте DiskPart от администратора. Выполните `select vdisk file="C:\..\ext4.vhdx"`, затем `detail vdisk` и ещё раз проверьте, что выбран правильный файл.
- Выполните `compact vdisk`, дождитесь завершения, затем `exit`. Запустите WSL обычным способом и проверьте данные и размер VHDX.
Важно: Перед операцией с виртуальным диском экспортируйте критичный дистрибутив или хотя бы сохраните важные проекты отдельно.
Что проверять
- `df -h /`. Использование ext4. После очистки Used уменьшился
- Размер ext4.vhdx. Физическое место NTFS. После compact может стать меньше
- `wsl --shutdown`. Диск не используется WSL. Выполнено до DiskPart
- `detail vdisk`. Контроль выбранного файла. Путь соответствует нужному дистрибутиву
- Запуск дистрибутива. Финальная проверка. WSL стартует без ошибок
Предупреждение: Не выполняйте compact, пока VHD активно используется. Закройте приложения, которые держат WSL, и только затем работайте с DiskPart.
Как не выбрать не тот ext4.vhdx
На одном компьютере могут быть Ubuntu, Debian, Docker Desktop и другие WSL-дистрибутивы. Поиск всех файлов с именем ext4.vhdx без привязки к DistributionName рискован: можно выбрать диск не той среды. Microsoft публикует PowerShell-запрос к реестру Lxss, который находит BasePath по точному имени дистрибутива. Сначала возьмите имя из `wsl -l -v`, затем выполните запрос и только после этого открывайте DiskPart. Не переносите найденный VHD вручную и не редактируйте его содержимое Windows-редактором: документация WSL прямо предупреждает, что вмешательство в служебные файлы дистрибутива может привести к повреждению.
Когда compact действительно имеет смысл
- Крупные данные уже удалены внутри Linux.
- `df` подтверждает свободное место.
- VHDX заметно больше фактически используемых данных.
- Есть точный путь к диску нужного дистрибутива.
- WSL остановлен и важные данные имеют резервную копию.
Sparse VHD и новые возможности WSL
Современный WSL имеет настройку `sparseVhd` для создания новых sparse-VHD, а новые версии WSL получили дополнительные команды управления виртуальными дисками. Это не повод смешивать методы из разных эпох: обычный динамический VHD, sparse-файл и Optimize-VHD ведут себя по-разному. Если вы ранее включали sparse-режим или переносили дистрибутив нестандартным способом, сначала выясните текущий тип и версию WSL. Для описанной процедуры опирайтесь на условия `compact vdisk`: динамически расширяемый VHD должен быть отсоединён либо подключён только для чтения. Не комбинируйте наугад DiskPart, сторонние скрипты и ручное изменение ext4.
Что делать, если после compact файл уменьшился совсем немного
Небольшое уменьшение после `compact vdisk` не обязательно означает ошибку. Команда может вернуть только то физическое пространство, которое виртуальный диск способен освободить в текущем состоянии; она не обещает, что размер файла станет равен показателю Used из `df`. Сначала сравните цифры до и после и убедитесь, что вы вообще работали с тем VHDX: на системе с несколькими дистрибутивами легко очистить Ubuntu, а выбрать диск другого экземпляра. Если `df -h /` всё ещё показывает большой Used, вернитесь к обычной уборке внутри Linux — compact не удаляет данные за вас. Если Used маленький, но физический файл изменился мало, не запускайте подряд десяток разных форумных рецептов с изменением разделов, случайными attach/detach и сторонними VHD-утилитами. Проверьте версию WSL и официальные возможности управления диском для неё, а также сохраните резервную копию до следующего вмешательства. Современные настройки sparse VHD и старый динамический VHD — не одно и то же, поэтому инструкции для одного режима нельзя механически применять к другому. После каждой операции запускайте дистрибутив и проверяйте важные каталоги, а не откладывайте проверку до конца серии экспериментов. Цель обслуживания — освободить место Windows без риска данным; если выигрыш невелик, сохранность проекта важнее ещё нескольких гигабайт потенциального уменьшения.
Что делать, если compact почти не изменил размер файла
Небольшой эффект после `compact vdisk` не всегда означает ошибку. Команда может вернуть Windows только те области динамического диска, которые действительно доступны для уплотнения; если большая часть VHDX всё ещё занята реальными данными, заметного сокращения не будет. Поэтому сравнивайте цифры в правильном порядке: сначала использование внутри Linux, затем физический размер VHDX до операции и после неё. Если `df -h` показывает, что место почти полностью занято, ищите крупные каталоги, образы контейнеров, package cache и удалённые, но всё ещё открытые процессами файлы. Если внутри места много, но VHDX остаётся большим, не повторяйте DiskPart циклически без понимания результата. Проверьте, что выбран именно динамически расширяемый диск нужного дистрибутива и что WSL действительно остановлен. Для новых возможностей WSL также учитывайте версию подсистемы: Microsoft постепенно добавляет управление размером и sparse VHD, поэтому старый форумный рецепт может не соответствовать текущей конфигурации. Резервная копия перед операциями с виртуальным диском остаётся более полезной мерой, чем попытка выиграть ещё несколько гигабайт любой ценой.
Практическая проверка результата
После успешного уменьшения зафиксируйте исходный и конечный размер, чтобы понимать реальный эффект операции. Если экономия оказалась небольшой, это полезная информация: возможно, основной объём действительно занят данными, а не только ранее освобождёнными блоками. Не превращайте compact в регулярную процедуру после каждой очистки кэша. Гораздо полезнее периодически контролировать крупные каталоги внутри Linux и выполнять обслуживание VHD только тогда, когда разница между логическим использованием и физическим размером стала существенной.
Что учитывать
WSL 2 хранит файловую систему дистрибутива в виртуальном диске ext4.vhdx. Он может динамически увеличиваться по мере записи, но физический файл на NTFS не обязан автоматически уменьшаться после `rm`, очистки package cache или удаления Docker-образов. Microsoft описывает `compact vdisk` именно как средство уменьшения физического размера динамически расширяемого VHD: такие диски растут, когда в них добавляют данные, но не сокращаются сами только от удаления файлов. Важно различать два показателя…
Источники и проверка
Фактическая часть сверена по первичным источникам (в т.ч. How to manage WSL disk space). Пример и формулировки — редакция N1RO на 2026-09-20.