Как сжать виртуальный диск Hyper-V (VHDX): инструкция Compact Disk
Почему динамический диск VHDX раздувается и не уменьшается?
В среде виртуализации Hyper-V администраторы чаще всего используют динамически расширяемые виртуальные диски (.vhdx). При записи данных внутрь гостевой виртуальной машины файл .vhdx на физическом хосте автоматически растет. Однако когда пользователь удаляет внутри ВМ 100 ГБ файлов, размер файла VHDX на хосте сам по себе не уменьшается. Файловая система оставляет эти блоки помеченными, но не отдает пространство хосту.
| Размер внутри ВМ | Размер VHDX на хосте Hyper-V | Результат |
|---|---|---|
| Занято: 40 ГБ (свободно 160 ГБ) | Размер файла: 200 ГБ | 160 ГБ дискового пространства хоста расходуются впустую. |
Пошаговый процесс сжатия диска VHDX
Шаг 1. Зануление пустого места внутри гостевой ВМ (Важно!)
Чтобы гипервизор понял, какие блоки действительно пусты, запустите PowerShell внутри самой гостевой машины Windows:
# Выполняем дефрагментацию и TRIM для освобождения блоков:
Optimize-Volume -DriveLetter C -ReTrim -Defrag -VerboseШаг 2. Сжатие VHDX на хост-сервере Hyper-V
Выключите виртуальную машину (или переведите диск в режим обслуживания):
- Откройте «Диспетчер Hyper-V».
- В правом меню действий нажмите «Изменить диск...» (Edit Disk).
- Укажите путь к вашему файлу
.vhdxна диске хоста. - Выберите действие «Сжать» (Compact) и нажмите «Готово». Процесс займет от нескольких минут до часа в зависимости от объема.
Сжатие диска одной командой PowerShell на хосте Hyper-V:
# 1. Монтируем VHDX диск только для чтения:
Mount-VHD -Path "D:\Hyper-V\Virtual Hard Disks\ServerVM.vhdx" -ReadOnly
# 2. Запускаем глубокую оптимизацию и сжатие:
Optimize-VHD -Path "D:\Hyper-V\Virtual Hard Disks\ServerVM.vhdx" -Mode Full
# 3. Размонтируем диск обратно:
Dismount-VHD -Path "D:\Hyper-V\Virtual Hard Disks\ServerVM.vhdx" Частые вопросы (FAQ)
Можно ли сжимать диск VHDX «на лету» без выключения виртуальной машины?
Да, если гостевая ОС поддерживает SCSI TRIM (Windows Server 2012 R2 и новее), можно выполнить Optimize-VHD -Mode Quick без выключения ВМ, но максимальный процент сжатия достигается только в выключенном состоянии в режиме Full.
Работает ли сжатие для дисков фиксированного размера (Fixed Size)?
Нет. Сжимать можно только динамические диски (Dynamically Expanding). Фиксированный диск сначала потребуется преобразовать (Convert) в динамический через мастер Hyper-V.
Что делать, если у виртуальной машины есть контрольные точки (снапшоты)?
Сжатие родительского VHDX невозможно при наличии активных файлов разностных дисков .avhdx. Сначала удалите все чекпоинты через Диспетчер Hyper-V и дождитесь завершения слияния (Merge).
Безопасна ли эта процедура для хранящихся баз данных внутри ВМ?
Да, процедура полностью безопасна. Hyper-V удаляет только неиспользуемые пустые секторы с нулями.