Category Archives: Hyper-V

Automate the installation of Hyper-V VMintegration services with PowerShell

Tired of installing VM integration services manually in your Hyper-V environment? Here´s a script to help you with that!

Tip, this hotfix requires reinstallation of all your VMs integration services: Https://support.microsoft.com/en-us/kb/3063283

This script only works on x64 machines!

vmint

Begin Script
========================================================================================================

<#
Powershell Script for updating of Hyper-V Integration Services
2015-11-23 Harri Förberg, Förbergs IT AB
http://itharri.com
http://www.forbergsit.se
Warning, this script could potentially reboot a lot of VM:s in rapid succession. Use wisely, and with caution.
Prequisites: Mount and copy the contents of C:\Windows\System32\vmguest.iso (found on your Hyper-V host), copy the content to a shared folder on the server that will used to execute the script
C:\Temp\IntegrationSvc is used in the script below
— You might need to have you GPO:s adjusted to allow file copy from the server where you execute this script. —
#>

# Fill the latest Integration Services number here
$ICSVer = ”6.3.9600.17831” # This was the latest version 2015-11-23 (Delivered in a Hotfix – https://support.microsoft.com/en-us/kb/3063283)

#Specify your list of all Hyper-V Hosts
$HPVServer = ”HPV01” , ”HPV02” # <– Change to your servers

# Check all Running VM:s on all HPV hosts for ICS versions lower than our preset in line >> 13
$VMNames = Get-VM -ComputerName $HPVServer | ? {$_.IntegrationServicesVersion -lt $ICSVer -and $_.State -eq ”Running”} # This would be a good place to narrow your search parameters

# Check if any VM:s are in need of updating
if
($VMNames -eq $null) {Write-Host ”No VM:s detected with old versions” -ForegroundColor Red}
else
{
Write-Host ”Found VM:s with old Integration Services, starting upgrade process” -ForegroundColor Green

# Install Integration Services on VMs
foreach ($VirtualMachine in $VMNames)
{
$VMName = $VirtualMachine.VMName

# If copy fails here, check firewall rules on your client server.
write-host ”Copying installation files to $VMName
Copy-Item -Path C:\Scripts\IntegrationSvc -Destination ”\\$VMName\C$\temp\IntegrationSvc” -Recurse -Force
write-host ”Installing integration services…”
$scriptblock = {cmd.exe /C ”C:\Temp\IntegrationSvc\support\amd64\setup.exe /quiet /norestart”} # <– ADD or Remove /norestart if you want or dont want to reboot all VM:s after the installation completes!
Invoke-Command -scriptblock $scriptblock -computername $VMName
# Cleanup of copied installation files
write-host ”Cleanup…”
Remove-Item -Path ”\\$VMName\C$\temp\IntegrationSvc” -Recurse -Force
# Display Status
Write-Host $VMName updated” -ForegroundColor Green
}
}
Write-Host ”All done” -ForegroundColor DarkMagenta

========================================================================================================

End Script

Annonser

Bra artikel om hur du övervakar RAM i VMs med dynamiskt minne

Jag har ofta fått förklara varför och hur det skiljer sig med dynamiskt minne, här är en riktigt bra och lättläst artikel i ämnet.

http://fastvue.co/tmgreporter/blog/understanding-hyper-v-dynamic-memory-dynamic-ram

12

Åtgärda VMQ som har slutat fungera

Upptäckte att SCOM larmade en massa om event id 113 med ett meddelande likt:

Failed to allocate VMQ for NIC EDCED345-4C96-4C75-92A0-0C4FC5688F73–35BEB899-5BE9-4128-900A-6FE0BBFC7B22
(Friendly Name: Network Adapter) on switch DE4F3664-68D9-4781-825B-882A540FAB08 (Friendly Name: VM Switch).
Reason – Maximum number of VMQs supported on the Protocol NIC is exceeded. Status = Insufficient system
resources exist to complete the API.

En koll med PowerShell visar snabbt att VMQ inte fungerar alls se bilden nedan:

vmq_pre

Följande KB artikel beskriver problemet och en hotfix för lösningen: https://support.microsoft.com/en-us/kb/3001783

Ladda ner hotfixen här: https://support.microsoft.com/en-us/kb/3031598

Efter hotfixen syns VMQ som normalt igen!

vmq_after

Viktig update Rollup för Windows/SOFS

För alla er som kör Windows Server 2012 R2 med Hyper-V och SMB3 storage spaces så är denna patch extremt viktig. Den löser bland annat problemen med att CSV diskarna ibland tappas under backup/extrem stress, eller när underhållsjobb på dessa körs under natten.

Många fler uppdateringar finns i denna relativt stora patch (723,9MB)

Mera info här: http://support.microsoft.com/kb/3000850/en

KB3000850

Hyper-V Remote Management Configuration Utility (HVRemote)

HVRemote är ett gratis verktyg som hjälper dig att konfigurera, men även felsöka Hyper-V hostar som du skall fjärrhantera. Perfekt för Core maskiner.

 

 

HP Servrar som tappar vNICs i Hyper-V

Jag med flera har ju ofta tjatat hur synnerligen viktigt det är med senaste firmware & drivrutiner för att få det mesta ur Hyper-V (och i många fall för att överhuvudtaget få det fungera).  Tyvärr så verkar det finnas en del buggar även i den senaste HP drivrutinerna för Emulex baserade LOMs.

HPs Emulex (Flexible Lom) kort har tyvärr fortfarande  problem med VMQ påslaget i Hyper-V. Så rekommendationen där är helt enkelt att slå av den i PowerShell för att få Hyper-V att fungera. Jag har haft samma problem både i HP DL380P & DL360P Gen8

I mitt fall verkade allting fungera, men när jag skulle sätta ihop klustret så fick jag varningsmeddelande från Clustervalideringen att vNics tappade paket. En snabb koll och mycket riktigt var det så.  (LiveMigration & Cluster Heartbeat i mitt fall). Lösningen hittade jag här: http://www.hyper-v.nu/archives/tag/emulex/

För att slå av VMQ:s på alla nätverkskorten i PowerShell

Get-NetAdapter | Set-NetAdapterVMQ -enabled $False

Du kan specifiera ”Get” kommandot med bara dom korten du vill stänga av.

Värt att notera att RSS fungera utmärkt, och då vi hade separata 10GbE kort för SMB3 så har vi full sprätta på dessa.

Men har du möjligheten att välja innan du köper kort just nu, så kör med Intels kort, dessa är stabila & riktigt snabba i Hyper-V, samt att de har dubbelt så många VMQ:s som Emulex korten.

Mina favoriter är Intels X540-T2 (Rj45) samt X520-T2 (Gbic) för Converged Networking.

Virtual Machine Converter 2 är ute

Klarar nu av att genomföra det som man förväntar sig, till exempel avinstallera VMware tools, och flytta över ip adresserna till rätt NIC:s i Hyper-V.  Den finns i två versioner, enklare MVMC samt MAT+MVMC som är tänkt för lite större migreringar.

VM prestanda i Hyper-V

Jag felsöker alltid då och då prestanda flaskhalsar i Hyper-V och tänkte dela med mig av ett skript som enkelt låter en kontrollera hur prestandan ser ut i er egen miljö.

Som exempel ska jag beskriva ett fel som jag hade i min egen labmiljö:

Min labbrigg består av server med Intels X79 Chipset. Jag hade fenomenal prestanda i Windows Server 2012 R2 Storage Spaces på disken, hastigheter på över 1GB/sec… tills jag startade ett par VM:s. Då gick disken upp i 100% Active Time, och hastigheterna kröp ner till kb/sec hastighet. Så fort jag stannat alla VM:s gick Active Time ner till 0%. Det roliga var att samma inträffade när jag körde VM:s över SMB mot en annan maskin också. Lösningen på det hela var att uppgradera Bios och installera Intels Chipset Driver till senaste versionen.

Innan uppgradering av Bios & Drivrutiner hade jag ”AggregatedAverageLatency” på mellan 100.000-2.000.000 på vissa VM:s.

Mätningarna skrev över en 20 sekunders intervall, och över Normalized IOPS av 8k storlek. Nedan ett exempel när allting ser normalt ut.

measure-vm

# Kör detta direkt på din Hyper-V host som du vill mäta aktiviteten på

# Slå på & av mätarna
get-vm * | Enable-VMResourceMetering
get-vm * | Disable-VMResourceMetering

# Se vilka som är aktiverade
get-vm * | Format-List Name,ResourceMeteringEnabled

# Se CPU & minnes & nätverksnyttjande
get-vm | Measure-VM | FT

# Se Disk prestanda & IOPS
get-vm | Measure-VM | FT VMName, Aggr* -AutoSize

Vmware eller Hyper-V?

Jag får ofta frågan om vilken virtualiseringsplattform som gäller idag?

Jag skulle säga att det beror på dina förutsättningar, och hur din miljö ser ut idag. Men helt klart är att bland mina kunder så är trenden väldigt tydlig, det är System Center & Hyper-V dom flesta av mina kunder migrerar till idag.

Microsoft har släppt en whitepaper på hur dom anser att Hyper-V står sig mot VMware idag.

Competitive Advantages of Windows Server … – Download Center

Mer läsning hittar ni även här: http://blogs.technet.com/b/keithmayer/archive/2013/09/24/vmware-or-microsoft-comparing-vsphere-5-5-and-windows-server-2012-r2-at-a-glance.aspx#.UwsfQHkheMh

Powershell Pingverktyg

Jag brukar använda ett skript som är enkelt anpassningsbart för att snabbt pinga många maskiner, användbart när man vill testa att alla maskinerna svarar på Ping efter en live migration från en host till en annan.

Du har två lägen som du kan köra:

Ett: Pinga alla maskiner som är startade (hittar automatiskt alla VM:s som du har)

Två: Pinga alla maskiner utifrån en textfil (Givetvis finns en oneliner för att automatiskt fylla listan åt dig!)

Jag brukar skapa en CMD fil i skriptkatalogen som startar PowerShell Skriptet, sedan brukar jag skapa en länk till skrivbordet, sätta lämpligt namn & en snygg ikon på den. Då har du den alltid lätt tillgänglig.

Skript 1, Pinga alla VM:s som är startade

#### Ping all computers
#
# Load Virtual Machine Manager Commandlets
ipmo
virtualmachinemanager

# Ping all Running VM:s
Write-Host
”Pinging all Running VM:s”
$VM
= ((Get-SCVirtualMachine | ? Status -EQ ”Running”).Name)

foreach ($name in $VM)
{
if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue ) {
Write-Host $name is up” -ForegroundColor Green
}
else {
Write-Host $name is down” -ForegroundColor Red
}
}

Skript 2, Pinga efter en textfil:

#### Ping all computers in textfile
#
# First get a list of all your computers to the textfile (remove # first, the edit the list to your liking)
# (Get-SCVirtualMachine | where {$_.VirtualizationPlatform -eq ”HyperV”}).ComputerName > C:\script\computers.txt

### or this if you only have one Hyper-V host (w/o SCVMM)
# (get-vm).Name > C:\script\computers.txt

### Then ping all computers in this list

$names = Get-Content ”C:\script\computers.txt”

foreach ($name in $names) {
if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue ) {
Write-Host $name is up” -ForegroundColor Green
}
else {
Write-Host $name is down” -ForegroundColor Red
}
}