Posted in : Azure, Hyper-V, Windows Server By Simon Gottschlag Translate with Google ⟶

4 years ago

Det finns många sätt att flytta Hyper-V VM till Azure, i detta fallet beskriver jag hur det kan göras till ett befintligt virtual network (classic / Azure Service Management – ASM).
Kortfattat är det följande som behöver hanteras: (denna guide utgår från att VM:et kört sysprep innan det importeras)

# Lagringen i Azure
$storage = "myazurestorage"
# Blob containerns namn
$storagecontainer = "vhds"
# Var VHD-filerna ligger
$sourcedir = "D:\VMs\VM\Virtual Hard Drives"
# Namnet på vad VHD-filerna, utan .vhd
$DiskC = "VM_C_DRIVE"
$DiskD = "VM_D_DRIVE"
# Source och destination för VHD-filerna
$AzureCvhd = "https://$($storage).blob.core.windows.net/$($storagecontainer)/$($DiskC).vhd"
$AzureDvhd = "https://$($storage).blob.core.windows.net/$($storagecontainer)/$($DiskD).vhd"
$LocalCvhd = "$($sourcedir)\$($DiskC).vhd"
$LocalDvhd = "$($sourcedir)\$($DiskD).vhd"
# Namnet på VM och service  i Azure, behöver inte vara samma som hostnamnet i Windows
$vmname = "MIGRATED-VM"
$service = "SVC-${vmname}"
# Befintlig availability group, virtual network, subnet och size
$AG = "AG-MyAvailabilityGroup"
$vnet = "VN-MyVirtualNetwork"
$subnet = "SN-MySubnet"
$size = "Medium"
# Statisk IP-adress VM:et skall få i Azure (om inte, ta bort "Set-AzureStaticVNetIP" för $VM nedan)
$IPAddress = "10.0.0.100"
# Kopiera VHD till Azure
# Detta kommer också konvertera från dynamic vhd till static vhd om det behövs
# VHDX är inte supporterat än
Add-AzureVhd -Destination $AzureCvhd -LocalFilePath $LocalCvhd -NumberOfUploaderThreads 32
Add-AzureVhd -Destination $AzureDvhd -LocalFilePath $LocalDvhd -NumberOfUploaderThreads 32
# Gör VHD-filerna tillgängliga att läggas på VM
Add-AzureDisk -DiskName $DiskC -MediaLocation $AzureCvhd -Label $DiskC -OS Windows
Add-AzureDisk -DiskName $DiskD -MediaLocation $AzureDvhd -Label $DiskD -OS Windows
# Skapa konfiguration för det nya VM:et i Azure
$VM = New-AzureVMConfig -name $vmname -InstanceSize $size -DiskName $DiskC |
    Add-AzureDataDisk -Import $DiskD -LUN 0 |
    Set-AzureSubnet -SubnetNames $subnet |
    Set-AzureStaticVNetIP -IPAddress $IPAddress
# Skapa VM:et utifrån konfigurationen
New-AzureVM -ServiceName $service -AffinityGroup $AG -VMs $VM -VNetName $vnet

Innan ett VM flyttas från Hyper-V till Azure behöver det bekräftas att Remote Desktop är aktiverat samt att det är tillåtet i brandväggen för Domain, Public och Private networks.
Mer info om hur powershell för Azure installeras och används finn här: How to install and configure Azure PowerShell
Kortfattat, vad som behöver göras för att koppla upp sig innan ovan kan utföras:

# Användarnamn och lösenord som är admin för din Azure-subscription
$cred = Get-Credential
Add-AzureAccount -Credential $cred
# Ta hem certifikatet som används för att autentisera mot Azure Service Management
# Kommer öppna Internet Explorer för att ladda ner certifikatet
Get-AzurePublishSettingsFile
# Använd certifikatet
Import-AzurePublishSettingsFile "<PATH>\<SUBSCRIPTION>-credentials.publishsettings"
# Lista de subscriptions du har åtkomst till
Get-AzureSubscription
# Välj din subscription
Select-AzureSubscription -SubscriptionName "<Subscription Name>"
# Välj subscription och vilket storage account som skall användas
Set-AzureSubscription -SubscriptionName "<subscription>" -CurrentStorageAccount "<storage account>"

När väl den virtuella maskinen är igång finns det några saker som är rekommenderade att utföra (enligt Windows IT Pro: Use a Non-SYSPREP VHD in Azure):

# Ändra så att D: kan användas
Disk Management > Byt label pa "Temporary Storage" fran D: till Z:
# Flytta paging filen
Inaktivera paging-fil pa C:
Aktivera "system managed" paging-fil pa Z:
# Byt till KMS Client Key (från CMD som admin)
cscript \windows\system32\slmgr.vbs /ipk <KMS Client Key>
cscript \windows\system32\slmgr.vbs /skms kms.core.windows.net
cscript \windows\system32\slmgr.vbs /ato
# Aktivera att diskar skall kopplas på per automatik (från CMD som admin)
diskpart
SAN POLICY=OnlineAll
exit
# Ändra RDP-inställningar (från CMD som admin)
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /t REG_DWORD /v KeepAliveEnable /d 1
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /t REG_DWORD /v KeepAliveInterval /d 1

KMS Client Keys finns här: Technet – Appendix A: KMS Client Setup Keys
Jag valde även att installera Azure Windows VM agent, vilket även kräver .NET 4.5 om det inte redan är installerat. Mer information om detta finns här: About the virtual machine agent and extensions
Jag valde även att ta bort så kallade ”Ghost NICs” från den virtuella maskinen, då jag sett att det ibland kan ställa till problem:

# Från CMD som admin
set devmgr_show_nonpresent_devices=1
start devmgmt.msc
View > Show hidden devices
Avinstallera network adapters som är "hidden"

Har du något mer du gör när du flyttar VM till Azure? Lämna gärna en kommentar!

Tags : Azure, Hyper-V, PowerShell, Windows Server

Personlig rådgivning

Vi erbjuder personlig rådgivning med författaren för 1400 SEK per timme. Anmäl ditt intresse i här så återkommer vi så snart vi kan.

Add comment

Your comment will be revised by the site if needed.