Вопрос или проблема
К сожалению, файлы .vhdx всегда увеличиваются. Ранее я использовал следующие команды для сжатия файлов vhdx:
wsl --manage docker-desktop-data --set-sparse false
optimize-vhd -Path C:\Users\<user>\AppData\Local\Docker\wsl\data\ext4.vhdx -Mode full
После последних обновлений Docker этот файл переместился в C:\Users\<user>\AppData\Local\Docker\wsl\disk\docker_data.vhdx
. И дистрибутив с именем docker-desktop-data
больше не существует.
Следующие команды не работают:
wsl --manage docker-desktop --set-sparse false
optimize-vhd -Path C:\Users\<user>\AppData\Local\Docker\wsl\disk\docker_data.vhdx -Mode full
Возвращает следующую ошибку:
optimize-vhd : Не удалось сжать виртуальный диск.
Не удалось открыть вложение
'C:\Users\<user>\AppData\Local\Docker\wsl\disk\docker_data.vhdx'.
Ошибка: 'Запрошенная операция не может быть выполнена из-за ограничения системы виртуального диска.
Файлы виртуального жесткого диска должны быть не сжатыми и
не зашифрованными, и не должны быть разреженными.'.
At line:1 char:1
+ optimize-vhd -Path C:\Users\<user>\AppData\Local\Docker\wsl\disk\dock ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Optimize-VHD], VirtualizationException
+ FullyQualifiedErrorId : OperationFailed,Microsoft.Vhd.PowerShell.Cmdlets.OptimizeVhd
Как сохранить пространство без потери данных тома?
.
Ответ или решение
Оптимизация файлов VHDX для WSL2 актуальна для пользователей Docker Desktop, поскольку эти файлы занимаются расширяющимся пространством на диске. Ваша задача — сжать файл docker_data.vhdx
, связанный с Docker Desktop v4.37.x на Windows 10.
Теория:
Файлы VHDX, используемые WSL2 и Docker Desktop, имеют тенденцию к постоянному увеличению, поскольку данные добавляются, но редко освобождают освободившееся пространство. Инструменты типа optimize-vhd
позволяют сжимать эти файлы для высвобождения лишнего дискового пространства. Однако, для этого файл VHDX должен быть "несжатым" и "не зашифрованным".
Пример:
В вашем случае, после последних обновлений Docker, путь расположения файла изменился на C:\Users\<user>\AppData\Local\Docker\wsl\disk\docker_data.vhdx
, и команды, которые вы использовали раньше, больше не работают, как и у всех пользователей, столкнувшихся с этой проблемой. Попытка его оптимизации возвращает ошибку о невозможности сжатия из-за системных ограничений виртуального диска.
Применение:
Чтобы решить эту проблему и сжать VHDX без потери данных, следуйте следующим шагам:
-
Проверьте свойства файла:
- Перейдите к файлу
docker_data.vhdx
в Windows Explorer. - Щелкните правой кнопкой мыши и выберите "Свойства".
- Убедитесь, что атрибуты "Сжатый" и "Шифрованный" не установлены. Если они установлены, снимите соответствующие флажки и примените изменения.
- Перейдите к файлу
-
Отключите WSL и Docker Desktop:
- Завершите все процессы Docker Desktop.
- В командной строке выполните команду
wsl --shutdown
, чтобы остановить все распределения WSL.
-
Сожмите через PowerShell:
- Откройте PowerShell с правами администратора.
- Выполните команду
optimize-vhd -Path C:\Users\<user>\AppData\Local\Docker\wsl\disk\docker_data.vhdx -Mode full
.
Если команда продолжает возвращать ошибку, проверьте настройки антивируса или брандмауэра, так как они могут блокировать операции с файлами VHDX. Также убедитесь, что у вас установлены все необходимые обновления Windows и версия PowerShell совместима с используемыми вами командами и функциями.
Следуя этим шагам, вы получите более компактный VHDX-файл для Docker Desktop, что позволит лучше управлять доступным пространством на вашем устройстве.