Уменьшение размера виртуального диска VHD(X)
В процессе работы с Hyper-v может возникнуть необходимость изменения размеров жестких дисков виртуальных машин. К сожалению, стандартные средства Windows 2008 R2 Вы не позволяют производить уменьшение размера жесткого диска - только увеличение диска или преобразование из динамического в фиксированный (и обратно).
Утилита VHD Resizer
Данная утилита позволяет как увеличить, так и уменьшить размер жесткого диска, как статического, так и динамического. К сожалению, официальный сайт программы прекратил свое существование. Однако, скачать утилиту Вы можете в интернете или у нас.
Powershell в Windows 2012
В ранних версиях Hyper-V функционал по уменьшению размена виртуального диска вообще отсутствовал. Начиная с Windows Server 2012 появилась штатная возможность урезания виртуальных дисков, однако воспользоваться ей по прежнему не очень просто. Дело в том, что для уменьшения размера VHD необходимо наличие внутри него свободного неразмеченного пространства. В противном случае опция Урезать (Shrink) недоступна отсутствует в графическом интерфейсе, а PowerShell при попытке урезать диск с помощью Resize-VHD выдаст ошибку.
В качестве примера возьмем виртуальную машину SRV01 с виртуальным диском 40Гб и урежем ее до 30Гб. Для этого сначала поместим ВМ в переменную и выведем свойства ее виртуального диска:
$vm = Get-VM -Name SRV01
Get-VHD -VMId $vm.VMId
В свойствах VHD нас интересуют такие параметры, как:
- FileSize — текущий размер файла VHD. Показывает реальный объем дискового пространства, который занимает виртуальный диск.
- Size — текущий размер виртуального диска. В случае с динамическим VHD показывает максимальный размер, до которого он может вырасти.
- MinimumSize — минимальный размер виртуального диска, или минимально возможный размер, до которого можно урезать VHD.
Как видно из примера, мы имеем динамически расширяемый VHD размером 40Гб, из которых на данный момент занято чуть больше 20Гб. Свободное место имеется, однако текущий и минимальный размеры практически одинаковы, поэтому урезать диск не получится.
Для последующих манипуляций ВМ должна быть выключена, поэтому проверяем ее состояние и, если надо, выключаем:
$vm.State $vm | Stop-VM -Force
Затем подмонтируем VHD к родительской системе и выведем свойства получившегося диска:
Mount-VHD -Path $vm.HardDrives.Path -Passthru | Get-Disk
Берем полученный номер диска и выводим все имеющиеся на нем разделы:
Get-Partition -DiskNumber 3
Если на диске вдруг оказалось несколько мелких непонятных разделов, не стоит их трогать. Они содержат важную информацию, необходимую системе для загрузки и восстановления. Нам нужен раздел, имеющий букву диска. Урежем его до 30Гб и проверим, что получилось:
Resize-Partition -DriveLetter E -Size 30GB
Get-Partition -DriveLetter E
Отмонтируем VHD от родительской системы:
Dismount-VHD -Path $vm.HardDrives.Path
И урезаем его до минимально-возможного значения:
Resize-VHD -Path $vm.HardDrives.Path -ToMinimumSize
Как видите, все получилось, виртуальный диск урезан до 30Гб. Остается только запустить ВМ.
Источниками данной статьи послужили следующие материалы:
Обслуживание VHD файлов (уменьшение, увеличение, конвертация)
Уменьшение размера фиксированного VHD с помощью VHD Resizer
Уменьшение размера виртуального диска в Hyper-V
|