
Microsoft Windows: официальный пример сведений о хранилище. Свободное место тома Windows сравнивают отдельно с использованием файловой системы Linux внутри WSL2.
© Microsoft. Used with permission from Microsoft. · источник и условия использования · Microsoft screenshot permissions
Вы удалили десятки гигабайт в Ubuntu, df показывает свободное место, но на C почти ничего не прибавилось. Это возможно: Linux видит файловую систему внутри виртуального диска, а Windows хранит сам VHDX. Освободившиеся блоки внутри ext4 не обязаны немедленно уменьшить занимаемый файл на хосте.
Кроме того, виртуальная ёмкость диска — верхний предел роста, а не объём, уже выделенный на SSD. Показываемый Linux размер в сотни гигабайт или терабайт не доказывает такой же расход места Windows. Microsoft отдельно описывает виртуальный диск WSL2 и его отображаемую ёмкость. [1]
Размер файла и «размер на диске» у разреженного файла также могут отличаться.
Схема редакции «Мы из 90х».
Внутри нужного дистрибутива:
Linux · WSL2
df -h /
du -xhd1 "$HOME"df показывает использование файловой системы, du — доступные файлы выбранного каталога. Они не обязаны совпадать: есть другие каталоги, служебные данные и удалённые, но ещё открытые процессом файлы. Ключ -x не переходит на другие файловые системы; так вы не смешиваете домашний Linux-диск и примонтированный диск Windows.
На стороне Windows посмотрите свободное место тома и свойства именно нужного VHDX. У разреженного файла логическая длина может значительно превышать физическое выделение. Поэтому одно свойство Length из PowerShell не является достаточным измерением реально занятого SSD. Зафиксируйте и «Размер», и «На диске» в свойствах файла. [1], [2]
| Показатель | Где посмотреть |
|---|---|
| Использовано внутри Linux | df нужной файловой системы |
| Каталоги с данными | du по выбранным каталогам |
| Размер и выделение VHDX | Свойства точного файла в Windows |
| Свободно на томе хоста | Свойства тома Windows или Get-Volume |
Бланк наблюдений, без вымышленных результатов очистки.
Учебная таблица редакции.
На стороне Windows сведения о томе доступны в Параметры → Система → Память. Они описывают хранилище Windows; соответствующий экран не заменяет df внутри Linux. [10]
Сначала в PowerShell:
PowerShell · заменить имя дистрибутива
wsl --list --verbose
$Distro = 'Ubuntu'
$Entries = @(Get-ChildItem 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss' |
Where-Object { $_.GetValue('DistributionName') -eq $Distro })
if ($Entries.Count -ne 1) {
throw 'Дистрибутив не найден однозначно.'
}
$Entries[0].GetValue('BasePath')Откройте полученный путь и подтвердите файл VHDX этой установки. Базовый способ определения пути опубликован Microsoft; в примере добавлена проверка единственного совпадения. Не используйте первый найденный ext4.vhdx: на компьютере могут быть несколько сред и отдельные данные Docker. [1]
Папка BasePath, профиль пользователя Windows и дистрибутив должны соответствовать друг другу. Консоль под другой записью читает её HKCU. Не редактируйте эти записи реестра ради переноса файла вручную.
Завершите приложения и базы внутри WSL, остановите зависимые программы, сохраните работу во всех дистрибутивах. Выберите другой том с достаточным свободным местом и создайте папку резервной копии. В PowerShell:
PowerShell · заменить имя и путь
wsl --shutdown
wsl --export "Ubuntu" "D:\WSL-Backup\Ubuntu.tar"Экспорт по умолчанию создаёт tar. Дождитесь успешного завершения, проверьте существование и размер файла. Само наличие tar не доказывает полноту восстановления; более сильная проверка — импорт под новым именем и открытие важных данных. Экспортируемые файлы на внешних монтированиях и дисках Windows нужно резервировать отдельно. [3]
Если на C совсем мало места, сначала освободите рабочий запас безопасными способами Windows и выберите подходящий другой том. Не заполняйте исходный диск нулями ради уплотнения: это способно исчерпать место и сорвать работу.
Когда есть место для отдельной среды, создайте новый каталог назначения и импортируйте tar без удаления исходной Ubuntu:
PowerShell · учебные имя и пути
wsl --import "Ubuntu-Rebuilt" "D:\WSL\Ubuntu-Rebuilt" "D:\WSL-Backup\Ubuntu.tar" --version 2
wsl -d "Ubuntu-Rebuilt" -- ls /homeНовые имя и каталог должны быть свободны. Импорт создаёт отдельный виртуальный диск из содержимого архива; это даёт возможность проверить данные и занятый объём на выбранном томе. Если хранилище D — раздел того же SSD, это перенос между томами, а не независимая резервная копия от отказа устройства. [3]
Проверьте файлы, права, рабочие приложения и пользователя входа. Импортированная среда может запускаться от root, если не настроен пользователь по умолчанию; это регулируется поддерживаемыми параметрами WSL и wsl.conf. Не запускайте одновременно обе копии серверной службы с одинаковыми портами и внешними ресурсами.
Исходная среда остаётся на месте и продолжает занимать место C. Освобождение C наступит только после отдельного решения о её удалении или поддерживаемом переносе, когда новая копия проверена. Команда unregister удаляет исходные данные, поэтому здесь она не включена в автоматическую последовательность. [3], [4]
Резервная копия считается практически проверенной, когда новая среда запускается и вы открыли действительно важные файлы, а не только увидели папку /home. Для базы данных проверьте её собственную процедуру резервирования и восстановления: экспорт после корректной остановки приложения полезнее снимка незавершённой записи. Сохраните исходную копию до такого теста.
Другой путь — уплотнить динамически расширяемый виртуальный диск. Microsoft описывает compact vdisk для отключённого диска или диска, подключённого только для чтения. Это общая операция с VHD, а не гарантия, что каждый освобождённый блок любой WSL немедленно вернётся Windows. [5]
Перед ней нужны проверенная копия, точный путь и прекращённые обращения к диску. Если поддерживается, Linux может передать сведения о свободных блоках через fstrim:
Linux · только в нужном дистрибутиве, при поддержке
sudo fstrim -v /Команда не удаляет живые файлы, а передаёт сведения о неиспользуемых блоках. Её вывод не равен гарантированно возвращённому месту SSD; неподдерживаемая операция должна быть зафиксирована как ограничение. Описание fstrim опубликовано в исходном проекте util-linux. [6]
Затем завершите WSL через wsl --shutdown и убедитесь, что Docker или другая программа не запускает её снова. Не подключайте VHDX на запись и не открывайте Linux-среду параллельно уплотнению.
В повышенной командной строке запустите DiskPart. Подставьте подтверждённый путь; приведённый ниже путь учебный:
Повышенная командная строка → DiskPart
diskpart
select vdisk file="C:\Exact\Path\ext4.vhdx"
detail vdiskОстановитесь и прочитайте подробности. Продолжать можно только для нужного поддерживаемого динамического диска, который отключён либо подключён read-only. Если он занят или выбран не тот файл, уплотнение не запускают. При соблюдении условий:
DiskPart · после проверки
compact vdisk
exitЗдесь нет команд select disk, clean, format, convert или подключения на запись: они не относятся к этой задаче. Если DiskPart сообщает ошибку, сохраните её и остановитесь, не меняя атрибуты наугад. Вариант Optimize-VHD требует доступного модуля Hyper-V и также имеет требования к состоянию диска; это не команда, гарантированно присутствующая в любой Windows Home. [5], [7], [8]
После завершения сравните физическое выделение и свободное место Windows, затем запустите исходный дистрибутив и проверьте важные данные. Успешное сообщение об операции не гарантирует заметного уменьшения.
Возможности автоматического освобождения блоков и параметры sparseVhd или wsl --manage менялись между версиями. Сначала смотрят wsl --version, wsl --help и документацию именно установленного выпуска. Разреженный файл и уменьшение его логической длины — разные вещи. [3], [4]
В истории WSL есть версии, предупреждавшие о риске повреждения при переводе существующей среды в sparse и требовавшие отдельного небезопасного флага. Наличие такого сообщения — повод остановиться и выбрать проверяемую копию; обход предупреждения не нужен для этой инструкции. История изменения сообщения сохранена в официальном репозитории проекта. [9]
После любой выбранной процедуры проверьте запуск, чтение рабочих файлов, службы и запас места на хосте. Если диск не уменьшается, а Windows имеет достаточный запас, расширяемый VHDX сам по себе не является повреждением файловой системы.
| Действие | Почему этого недостаточно |
|---|---|
| Уменьшить memory в .wslconfig | Это лимит оперативной памяти |
| Сократить виртуальную ёмкость наугад | Можно затронуть границы данных; задача другая |
| Включить NTFS-сжатие папки | Это другой механизм и возможная несовместимость |
| Удалить зарегистрированный дистрибутив | Удаляются сами данные, а не только свободные блоки |
Учебная таблица редакции.