Динамическое изменение размеров дисков виртуальных машин доступно, начиная с версии Hyper-V в Windows Server 2012 R2. Функция Online VHDX Resize позволяет вам увеличить или уменьшить размер vhdx диска виртуальной машины онлайн (без остановки ВМ). В этой статье мы рассмотрим, как увеличить или уменьшить (сжать) размер диска виртуальной машины в Hyper-V, запущенном в Windows 10 или Windows Server 2016 (инструкции применима для всех поддерживаемых версий Hyper-V, в том числе бесплатного Hyper-V Server).
Основные возможности и ограничений Online VHDX Resize в Hyper-V:
- Вы можете изменить размер виртуального диска Hyper-V любого типа: фиксированного, динамического, и дифференциального.
- Вы можете изменить размер VHDX диска (в том числе системного диска гостевой ОС) на-лету. Останавливать виртуальную машину не нужно;Нельзя динамически изменить размер VHD диско. Его сначала придется переконвертировать в формат VHDX.
- VHDX диск должен быть подключен к ВМ через виртуальный SCSI контролер (не поддерживается онлайн расширение дисков на IDE контроллере, такую ВМ придется выключить для изменения размера диска);
- Online VHDX Resize работает как на первом, так и втором поколении виртуальных машин Hyper-V;
- В качестве гостевой ОС может выступать, как Windows, так и Linux;
- Поддерживается как расширение виртуальных дисков (extend), так и их сжатие (shrink);
- Вы можете изменить размер vhdx диска из графической консоли Hyper-V, PowerShell или Windows Admin Center;
- Не поддерживается изменение размера общих VHDX файлов или VHD Set (VHDS/AVHDX) дисков, используемых в гостевых кластерах;
- Нельзя изменить размер виртуального диска, для которого создан снапшот (например при резервном копировании).
Увеличиваем размер виртуальный VHDX диска в Hyper-V
Рассмотрим, как увеличить размер виртуального VHDX диска с помощью консоли Hyper-V Manager.
- В менеджере виртуальных машин Hyper-V выберите виртуальную машину, перейдите в ее настройки (Settings) -> SCSI Controller;
- Выберите нужный виртуальный диск и нажмите кнопку Edit;Если кнопка Edit неактивна, и внизу указано Edit is not available because checkpoint exist for this virtual machine, нужно удалить снапшоты. Возможно необходимо отключить Production Checkpoint в свойствах ВМ.
- В запустившемся мастере выберите пункт Expand;
- Укажите новый размер виртуального жесткого диска (в нашем примере мы расширим диск до 170 Гб);
- Теперь нужно подключится к гостевой ОС, диск которой был расширен. Рассмотрим, как увеличить диск в гостевой ОС Windows. Откройте консоль диспетчера управления дисками Disk Manager. На диске должна появиться дополнительная неразмеченная область 43 Гб (Unallocated);
- Щелкните по разделу, который нужно растянуть и выберите Extend Volume (можно расширить только раздел, находящийся слева от неразмеченной области). Укажите на сколько нужно расширить этот раздел за счет неразмеченного места (подробнее процедура расширения описана здесь);
- После выполнения процедуры Extend, размер диска будет увеличен.В гостевой Linux можно расширить диск с помощью утилиты Parted.
Как сжать виртуальный VHDX диск в Hyper-V?
Рассмотрим теперь как уменьшить размер виртуального vhdx диска на Hyper-V.
- Перед тем как сжать виртуального диска из консоли Hyper-V, необходимо внутри гостевой ОС уменьшить размер логического раздела на диске, освободить часть места, преобразовав его в неразмеченную область. Для этого внутри гостевой ОС откройте диспетчер управления дисков, выберите нужный раздел и выберите пункт Shrink Volume (Сжать том);Примечание. Пункт Shrink Volume будет доступен только в том случае, если на диске есть свободное место.
- Укажите на сколько нужно уменьшить размер раздела (в нашем примере, мы указали 50 Гб);
- После уменьшения размера раздела в гостевой ОС, нужно открыть консоль Hyper-V и перейти в настройки виртуального диска. Нажмите кнопку Edit;
- В мастере Edit Virtual Hard Disk выберите пункт Shrink, затем укажите новый размер vhdx файла. Обратите внимание, что вы не можете сделать размер диска меньше, чем размер данных на нем. В нашем случае можно уменьшить диск с 40 до 31 Гб. Прежде чем уменьшать размер VHDX файла, попробуйте дефрагментировать его с помощью оптимизации Hyper-V. Выберите пункт Compact в предыдущей форме. Либо для оптимизации и дефрагментации динамического диска Hyper-V можно использовать команду PowerShell:
Optimize-VHD -Path 'D:\Hyper-V\fs01.vhdx'
- Готово
Изменить размер виртуального диска Hyper-V с помощью PowerShell
Можно изменить размер VHDX диска с помощью PowerShell. Для этого используется командлет Resize-VHD (не путать с
Resize-VirtualDisk
, который относится к командлетам модуля управления дисками Storage).
Сначала нужно получить полный путь к VHDX диску виртуальной машины:
Get-VM -VMName fs01 | Select-Object VMId | Get-VHD
Здесь же можно увидеть реальный размер VHDX файла на диске (FileSize) и максимальный размер, который он может занять (Size).
MinimumSize – это минимальный размер VHDX диска, до которого можно уменьшить файл виртуального диска.
Чтобы увеличить размер VHDX диска нужно указать его новый размер:
Resize-VHD -Path 'C:\VM\fs01\Virtual Hard Disks\fs01.vhdx' -SizeBytes 50Gb
Resize-VHD : Failed to resize the virtual disk
.Вам осталось расширить диск в гостевой ОС.
Можно сделать это удаленно через PowerShell Remoting. Подключитесь к виртуальной машины с помощью Invoke-Command или Enter-PSSession (по сети или через PowerShell Direct)
Enter-PSSession -ComputerName fs01
Получим информацию о том, на сколько можно расширить раздел и расширим его до максимального размера:
$MaxSize = (Get-PartitionSupportedSize -DriveLetter C).SizeMax
Resize-Partition -DriveLetter L -Size $MaxSize
Если нужно уменьшить размер виртуального диска до минимально-возможного, выполните:
Resize-VHD -Path 'C:\VM\fs01\Virtual Hard Disks\fs01.vhdx' -ToMinimumSize
Данная команда уменьшила максимальный размер VHDX файла на 6 Гб.
Командлет Resize-VirtualDisk используется для изменения размеров виртуального диска (но не VHDX!) и относится к командлетам раздела Storage Cmdlets in Windows PowerShell.
Таким образом с помощью графического интерфейса можно изменить размер виртуального диска Hyper-V, а альтернативы на powershell пока нет.
http://redmondmag.com/articles/2014/01/24/virtual-disks-through-powershell.aspx
Сколько же я долбился с Resize-VirtualDisk и vhdx, из-за того что комментарий не увидел. Спасибо Игорян.
Приветствую, порой еще хорошо помогает
move-vmstorage
если файловая система не только ntfs.Чем конкретно помогает? При миграции стораджа перечитываются блоки и в целом порой можно получить результат некой «дефрагментации» и при этом «пустые» (более не заблокированные от удаления) блоки в «новый» файл vh{d..dx} не перемещаются и игнорируются.
Итого профит (уменьшение) размера порой может до 10-20% быть. Плюшки аптайма на месте. Только x2 примерно надо по ресурсам диска.
Начальный размер был 500Гб. Диск в виртуалке раздулся до предела, файл VHDX стал 500. Данные в ВМ были почищены, проведено сжатие по инструкции до 300Гб. Как теперь уменьшить сам размер VHDX-файла (он как был 500, так и остался)?
Посмотрите до скольки можно уменьшить диск с помощью команды:
Get-VM -VMName fs01 | Select-Object VMId | Get-VHD
MinimumSize – это минимальный размер VHDX диска, до которого можно уменьшить файл виртуального диска.
Чтобы уменьшить VHDx, выполните:
Resize-VHD -Path ‘C:\VM\fs01\Virtual Hard Disks\fs01.vhdx’ -ToMinimumSize
Спасибо огромное за отзыв.
FileSize : 482886025216
Size : 325300797952
MinimumSize : 325300797952
Но сразу не зашёл такой вариант к сожалению. Возможно из-за того, что машинка запущена, перепроверю в ночное время, сейчас нет возможности остановить. Хотя судя по информации из источников в сети, с HV-2016 должно всё работать вроде бы в горячем режиме.
Вот что выдал PS в ответ на Resize-VHD -ToMinimumSize:
«Не удалось выполнить
запрошенную операцию, так как невозможно безопасно уменьшить размер виртуального диска. (0xC03A0027).»
Правда, правка диска может быть недоступна из-за наличия снапшотов, что означает дополнительный гемор со слиянием avhd+avhd+vhd.. особенно когда дискового пространства на хосте не хватает
Есть проблема когда размер не меняется- статья у Стеркина.
У меня так с несистемным vhdx как освободить место не выключая хост машину?