Уменьшить размер диска Hyper V можно через диспетчер виртуальных машин и с помощью Powershell. Оба варианта мы покажем на примерах.
В Hyper V возможно уменьшить тип диска VHDX, относящийся ко второму поколению виртуальных машин (Generation 2). Тип VHD уменьшить нельзя. Если вы не уверены в типе винчестера его можно проверить в свойстве виртуальной машины - этот способ показан на скриншоте ниже. Если вы используете VHD можно либо конвертировать тип в VHDX либо скопировать содержимое при создании нового диска Hyper V.
Разницы в сжатии динамических и фиксированных устройств нет.
Перед уменьшением диска Hyper V нужно зайти в саму виртуальную машину где этот файл подключен и открыть диспетчер управления дисками:
Аналогично увеличению диска Hyper V нужно выбрать тот, размер которого необходимо уменьшить. Если есть не используемые разделы, то можно их удалить - эффект тот же. Если таких разделов нет, то нужно в выплывающем меню выбрать "Сжать том..." (Shrink). После нажатия кнопки пойдет расчет места, которое возможно освободить:
В новом окне нужно выбрать размер, который будет вычтен из выбранного диска. "Доступное для сжатия пространство" - максимальный размер, на который мы можем уменьшить раздел. Изначально я попробовал уменьшить на 1 Гб, но в дальнейшем Hyper V отказался уменьшать диск на такое пространство. С уменьшением на 10 ГБ проблем с Hyper V не было. Под "отказался" я имею виду, что не появлялась возможность уменьшения в диспетчере Hyper V. Какой минимальный размер для сжатия точно сказать не могу, но как я и написал при 10 Гб работает нормально.
После завершения процесса сжатия у нас появится неразмеченная область, выделяющиеся черным цветом - это та часть, которая будет убрана в дальнейшем через диспетчер Hyper V. Выключать виртуальную машину не обязательно, но я бы рекомендовал это сделать что бы избежать возможных проблем.
Теперь нужно зайти в настройки виртуальной машины гипервизора:
В открытом окне выбрать виртуальный жесткий диск который вы сжимали и нажмите кнопку редактирования. Тут же мы можем увидеть тип диска, который вы используете VHD или VHDX.
В первом окне ничего нельзя изменить, так как мы открывали конкретный VHDX файл, а не из диспетчера управления дисками Hyper V. Открываем следующее окно, где увидим возможность Hyper V уменьшения размера диска (Сжатие/Shrink). Выбираем ее:
Уменьшить виртуальный диск Hyper V можно на тот размер, на который мы освободили внутренний раздел машины:
На последнем окне еще раз убеждаемся, что введенные данные верны и подтверждаем их:
Виртуальный диск Hyper V уменьшен.
Уменьшение диска Hyper V в Powershell
Первое что нужно сделать это узнать имя виртуальной машины Hyper V для сжатия диска:
Get-VM
Моя виртуальная машина называется Win10 и на примерах вам нужно изменить ее имя на свое. Нам нужно проверить, что файл виртуального винчестера имеет тип VHDX, возможности уменьшения VHD нет:
Get-VMHardDiskDrive -VMName 'Win10' | select Path
Далее включаем виртуальную машину:
Start-VM -Name 'Win10'
Подключимся к операционной системе виртуальной машины. Если вы подключаетесь с хоста гипервизора проблем быть не должно, но возможно потребуется настроить средства для удаленных команд Powershell.
Enter-PSSession -VMName 'Win10'
Либо можно запустить консоль Powershell с самой виртуальной машины.
Сейчас нам нужно уменьшить раздел внутри виртуальной машины что бы в последующем это место убрать через возможности гипервизора. Уменьшить можно и через diskpart, но описывается вариант с Powershell. Нужно выбрать раздел, с которого будет убираться место:
Get-Partition
Конечно не стоит уменьшать размер загрузочного раздела или системного до минимального размера.
Далее нам нужно узнать насколько возможно уменьшить раздел. В этой команде я передаю только букву раздела:
Get-PartitionSupportedSize -DriveLetter C
Если команда запущена не под администратором, то вы увидите ошибку:
Get-PartitionSupportedSize: клиенту не удалось получить доступ к ресурсу CIM.
Если важно увидеть размер в гигабайтах, то можно сделать так:
Get-PartitionSupportedSize -DriveLetter C | % {$_.SizeMin/1GB;$_.SizeMax/1GB}
Если нужно изменить данные на MB или TB просто замените соответствующие буквы.
В этой команде мы указываем конечный размер раздела, а не сколько хотим от него отнять. В случае работы с интерфейсом возможность уменьшения VHDX в диспетчере гипервизора не была активна при неразмеченном пространстве в 1GB. Эта ситуация исправилась при 10GB.
Можно указывать и другую единицу измерения:
Resize-Partition -DriverLetter C -Size 20GB
Виртуальную машину можно оставить включенной, но я бы рекомендовал выключить:
Stop-VM -VMName 'Win10'
Этой командой мы увидим, на сколько мы можем уменьшить диск Hyper V. Я использую конвейер что бы не прописывать путь к файлу VHDX:
Get-VMHardDiskDrive -VMName 'Win10' | Get-VHD
Команда ниже в Hyper V уменьшает размер диска. Я вставил изначально значение, но можно использовать и варианты с примеров выше:
Get-VMHardDiskDrive -VMName 'Win10' | Resize-VHD -SizeBytes 22119727616
Убедимся что диск виртуальной машины Hyper V уменьшен:
Get-VMHardDiskDrive -VMName 'Win10' | Get-VHD
...
Подписывайтесь на наш Telegram канал
Теги: #powershell #hyper-v