Технология разностных (дифференциальных) дисков Hyper-V присутствует в гипервизоре Microsoft уже довольно давно (если не ошибаюсь, с версии Hyper-V в Windows Server 2008). Как правило, большинству администраторов она знакома применительно к технологиям создания снапшотов (чекпоинтов) и широко используется различными системами резервного копирования ВМ. При создании снапшота или выполнении бэкапа текущее состояние ВМ фиксируется в одном vhd файле, а все изменения пишутся уже в другой, дифференциальный (или разностный) диск.
Дифференциальные диски Hyper-V
Еще одной интересной возможностью дифференциальных дисков является возможность создания некого базового образа ОС (в виде vhd файла) со всеми необходимыми настройками и ПО. Затем на базе этого образа можно развернуть множество типовых виртуальны машин, которые используют vhd диск базового образа, а все изменения пишут уже в собственные виртуальные диски. Тем самым достигается существенная экономия дискового пространства. Например, на примере ниже видно, что при использовании дифференциальных дисков для 4 ВМ на основе одного образа понадобится всего 40 Гб, а при классической модели развертывания для этих же машин нужно 150 Гб. Разница существенная, особенно для быстрых и дорогих SSD дисков!
Дифференциальный (разностный) диск Hyper-V является одним из поддерживаемых типов виртуальных дисков (vhd). Однако, в отличии от обычного vhd диска, он жестко привязан к другому родительскому диску. Дифференциальный диск выступает в роли дочернего диска и содержит не полную версию данных на диске ВМ, а лишь изменения, которые были внесены в процессе ее работы, т.е. это данные, отличающие его от родительского.
Родительский (шаблонный) vhd образ остается неизменным, а все дочерние виртуальные машины, созданные на его основе, пишут изменения в собственные разностные диски. Размер такого дифференциального диска как правило довольно небольшой (его максимальный размер не может превысить размеров родителя).
Создаем эталонный VHD образ системы
Создать эталонный VHD файл можно с помощью графического интерфейса Hyper-V Manager или с помощью PowerShell. В PowerShell намного быстрее.
Совет. Для работы следующих командлетов должен быть установлен модуль Hyper-V для Windows PowerShell :
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell
Создадим новый vhdx файл.
new-vhd -path e:\data\vhd\Win2016.vhdx -SizeBytes 50GB –Dynamic
На его базе создадим новую ВМ:
new-vm -Name TemplateVM –Path e:\data\vhd\ -VHDPath e:\data\vhd\Win2016.vhdx | `
set-vmmemory -DynamicMemoryEnabled $true -MaximumBytes 2GB -MinimumBytes 512MB -StartupBytes 1GB
Смонтируем установочный ISO образ с образом нужной ОС:
add-vmdvddrive -VMName TemplateVM -Path d:\WinSrv2016.ISO
После того, как вы создали новую ВМ, нужно установить на нее ОС, которая будет использоваться в качестве базового образа. Данную ОС нужно настроить соответствующим образом (установить драйвера, обновления, поменять настройки системы). Затем с помощью Sysprep выполняем обезличивание ОС для последующего развертывания.
cd %SystemRoot%\System32\Sysprep
sysprep /generalize /oobe /shutdown
Таким образом, у нас получается эталонный образ ВМ.
Саму ВМ теперь можно удалить (сохранив ее vhd файл!!!). Чтобы избежать случайного изменения этого vhd файла, которое может в обрушить все дочерние ВМ, переведем его в режим ReadOnly:
Set-ItemProperty e:\data\vhd\Win2016.vhdx -Name IsReadOnly -Value $true
Создаем разностные диски и ВМ на их основе
Теперь можно создать несколько зависимых (дочерних) vhd файлов:
New-VHD -ParentPath: e:\data\vhd\Win2016.vhdx -Path e:\data\vhd\Win2016-diff1.vhdx -Differencing
New-VHD -ParentPath: e:\data\vhd\Win2016.vhdx -Path e:\data\vhd\Win2016-diff2.vhdx –Differencing
При создании разностного диска через графический интерфейс Hyper-V Manager в качестве формата диска нужно выбрать VHDX-> Differencing, указать его имя и путь к родительскому диску.
Теперь на основе этих vhd файлов создадим 2 виртуальные машины Hyper-V:
New-VM -Name "Win2016-diff1" -Generation 2 -MemoryStartupBytes 1GB -VHDPath e:\data\vhd\Win2016-diff1.vhdx -SwitchName "External Network"
New-VM -Name "Win2016-diff2" -Generation 2 -MemoryStartupBytes 1GB -VHDPath e:\data\vhd\Win2016-diff2.vhdx -SwitchName "External Network"
Запустите их:
Start-VM Win2016-diff*
Объединение (Merge) дифференциальных дисков в Hyper-V
В Hyper-V версии Windows 2008 R2 и выше появилась возможность объединения дифференциальных дисков с родительским (или же другим диском) без приостановки ВМ. Для этого имеется специальный командлет Merge-VHD либо специальная опция в меню редактирования vhd диска в консоли Hyper-V Manager.
Set-ItemProperty e:\data\vhd\Win2016.vhdx -Name IsReadOnly -Value $false
$Merge = @{
Path = ‘e:\data\vhd\Win2016-diff2.vhdx'
DestinationPath = 'e:\data\vhd\Win2016.vhdx'
}
Merge-VHD @Merge
Заключение
Для уменьшения нагрузки дисковой подсистемы при множественном обращении к одному родительскому vhd файлу со стороны всех ВМ, его рекомендуется размещать на быстрых дисках. Чтобы этот файл не стал единой точкой отказа, нужно предусмотреть стратегии его резервного копирования.