Hızlı VM deployment için Hyper-V differencing disk kullanma


Hyper-V’deki differencing disks teknolojisi oldukça uzun bir süre önce Microsoft tarafından sunuldu (eğer yanılmıyorsam, Windows Server 2008 Hyper-V sürümünde). Differential disks, anlık görüntüler (checkpoints) oluşturmak için kullanılır ve çeşitli VM yedekleme sistemleri tarafından yaygın olarak kullanılır. Bir snapshot oluştururken veya bir yedekleme yaparken, geçerli VM durumu bir VHD dosyasına kaydedilir ve tüm değişiklikler başka bir farklı diske yazılır.

Differencing disk kullandığınız zaman gerekli tüm ayar ve yazılım ile bazı temel işletim sistemi imajlarını (VHD dosyası) oluşturabilirsiniz. Daha sonra bu image’i kullanarak, base image VHD’sini kullanan birden çok sanal makineyi hızla kurabilir ve tüm değişiklikleri kendi sanal disklerine yazabilirsiniz. Böylece disk alanında önemli tasarruflar elde edebilirsiniz. Aşağıdaki örnek, tek bir vhd görüntüsüne dayalı olarak 4 VM için differential disklerin kullanılmasının yalnızca 40 GB disk alanı gerektireceğini ve aynı makineler için geleneksel dağıtım modeliyle 150 GB’ye ihtiyacınız olduğunu göstermektedir. Ortaya çıkan fark özellikle SSD sürücü maliyetleri göz önüne alındığından oldukça önemlidir.

Hyper-V differencing disk, desteklenen sanal disk tiplerinden biridir. Ancak, ortak VHD’den farklı olarak, başka bir parent diske bağlanmıştır. Differential disk bir alt diskidir ve VM diskindeki verilerin tam sürümünü içermez. Sadece VM’nin çalışması sırasında yaptığı değişiklikleri içermektedir.

Parent (template) VHD image dokunulmadan kalır ve tüm child sanal makineler, değişiklikleri kendi farklı disklerine yazar. Differencing diskin boyutu oldukça küçüktür (maksimum boyutu parent diskin boyutunu geçemez).

Reference VHD Image oluşturma

Hyper-V Manager GUI veya PowerShell kullanarak bir reference VHD dosyası oluşturabilirsiniz. PowerShell ile oluşturma çok daha hızlıdır.

Not→ Aşağıdaki cmdlet’leri kullanmak için Windows PowerShell için Hyper-V modülü yüklü olmalıdır.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell

Yeni bir VHDX dosyası oluşturun.

new-vhd -path f:\vms\vhd\WinSrv2016Base.vhdx -SizeBytes 50GB –Dynamic

Yeni bir VM oluşturun.

new-vm -Name TemplateVM –Path f:\vms\vhd\ -VHDPath f:\vms\vhd\WinSrv2016Base.vhdx | `
set-vmmemory -DynamicMemoryEnabled $true -MaximumBytes 2GB -MinimumBytes 512MB -StartupBytes 1GB

ISO dosyasını işletim sistemine mount edin.

add-vmdvddrive -VMName TemplateVM -Path d:\WindowsServer2016DC.ISO

Yeni VM’yi oluşturduktan sonra, üzerine bir işletim sistemi kurmanız gerekir. Bu işletim sistemi uygun şekilde yapılandırılmalıdır (sürücüleri kurun, güncellemeleri yapın ve sistem ayarlarını değiştirin). Daha sonra Sysprep kullanarak daha fazla dağıtım için işletim sistemini genelleştirin.

cd %SystemRoot%\System32\Sysprep
sysprep /generalize /oobe /shutdown

Böylece, bir reference VM image elde ettik.

Artık, VHDX dosyasını kaydettikten sonra VM’nin kendisini kaldırabilirsiniz. Yanlışlıkla bu vhd dosyasını değiştirmekten kaçınmak için, ReadOnly yapın.

Set-ItemProperty f:\vms\vhd\WinSrv2016Base.vhdx -Name IsReadOnly -Value $true

Hyper-V’de Differencing Disks ve VM’ler oluşturma

Artık birkaç VHDx dosyası oluşturabilirsiniz.

New-VHD -ParentPath: f:\vms\vhd\WinSrv2016Base.vhdx  -Path f:\vms\vhd\Win2016-diff1.vhdx -Differencing
New-VHD -ParentPath: f:\vms\vhd\WinSrv2016Base.vhdx -Path f:\vms\vhd\Win2016-diff2.vhdx –Differencing

Hyper-V Manager’ın grafik arayüzünü kullanarak bir differencing disk oluştururken, VHDX -> Disk formatı olarak Differencing’i seçin, adını ve parent diskin yolunu belirtin.

Bu VHDx dosyalarını kullanarak, iki Hyper-V sanal makine oluşturun.

New-VM -Name “Win2016-diff1” -Generation 2 -MemoryStartupBytes 1GB -VHDPath f:\vms\vhd\Win2016-diff1.vhdx -SwitchName “External Network”
New-VM -Name “Win2016-diff2” -Generation 2 -MemoryStartupBytes 1GB -VHDPath f:\vms\vhd\Win2016-diff2.vhdx -SwitchName “External Network”

Sanal makineleri başlatın.

Start-VM Win2016-diff*

Merging Differencing Disks Hyper-V

Windows 2008 R2 Hyper-V sürümünde veya daha yüksek bir sürümde, VM’yi durdurmadan differencing diskleri parent veya başka bir diskle birleştirmek mümkün hale geldi. Bunu yapmak için aşağıdaki cmdlet’i kullanabilirsiniz.

Set-ItemProperty f:\vms\vhd\WinSrv2016Base.vhdx -Name IsReadOnly -Value $false
$Merge = @{
Path = ‘f:\vms\vhd\Win2016-diff2.vhdx’
DestinationPath = ‘f:\vms\vhd\Win2016.vhdx’
}
Merge-VHD @Merge

KAYNAKVİRTUALİZATİON