= SRM Script: SRM And RDMs = **Summary**: How to configure RDMs to smoothly work with VMware Site Recovery Manager 5.1. \\ **Date**: 22 March 2013 \\ **Refactor**: 29 April 2025: Checked links and formatting. \\ {{tag>vmware srm powershell}} While Site Recovery Manager 5.l fully supports the usage of RDMs and this also works just fine there are a few things that will work against you that need to be solved in case you ever have to do a failover recovery. And even while doing a failover test, considering these issues will help you to make your tests faster and more reliable. The two issues in case: * [[http://kb.vmware.com/kb/1016106 |ESX(i) hosts with RDM LUNs accessed by MSCS boots slow or has slow LUN rescan]] \\ * [[http://kb.vmware.com/kb/1011340 |Multipathing policies in ESXi 5.x and ESXi/ESX 4.x - Round Robin is not currently supported for Logical Units that are part of a Microsoft Cluster Service (MSCS) virtual machine]] \\ These issues will mean that after recovering VMs with RDMs you'll have to set the path policy to MRU (preferred because it supports [[alua]]) and the IsPerenniallyReserved setting to true for each RDM. Luckily I wrote a script. = The Script = This script can be run directly from the recovery plan as described [[srmpowershell|here]]. Note that this is a rewrite of the original script [[rdmsettings]]. # Script Details # Author: Sjoerd Hooft # Creation Date: 2013-03-22 # Variables # Setting scriptname if (!$args[0]){ Write-Host "First parameter (scriptname) is not provided" $scriptname = $myinvocation.mycommand.name} else{ $scriptname = $args[0]} Write-Host "Scriptname = $scriptname" # Setting scriptlocation if (!$args[1]){ Write-Host "Second parameter (scriptlocation) is not provided" $scriptlocation = Split-Path $myinvocation.mycommand.path} else{ $scriptlocation = $args[1]} Write-Host "Scriptlocation = $scriptlocation" # Setting vCenter if (!$args[2]){ Write-Host "Third parameter (vCenter) is not provided" $vcenter = "vcenter.getshifting.com"} else{ $vcenter = $args[2]} Write-Host "vCenter = $vcenter" # Setting Recovery Mode if (!$args[3]){ Write-Host "Fourth parameter (recoverymode) is not provided" $recoverymode = "unknown"} else{ $recoverymode = $args[3]} Write-Host "Recovery Mode = $recoverymode" # Setting Recovery Plan if (!$args[4]){ Write-Host "Fifth parameter (recoveryplan) is not provided" $recoveryplan = "unknown"} else{ $recoveryplan = $args[4]} Write-Host "Recovery Plan = $recoveryplan" $MailServer = "10.10.10.25" $toemail = "ids@getshifting.com" $fromemail = "vcenter@getshifting.com" $timestamp = Get-Date -format "yyyyMMdd-HH.mm" $csvfile = "$scriptlocation\$scriptname-$timestamp.csv" $cluster = "HQ SRM" # Add VMware snapin if(-not (Get-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue)){ Add-PSSnapin VMware.VimAutomation.Core} # Email functions Function Send-Email ($subject, $info){ Send-MailMessage -To $toemail -From $fromemail -SmtpServer $mailserver -Subject $subject -Body $info -Attachments "$csvfile"} # Connect to vCenter Connect-VIServer $vcenter # Define csv table $myTable = @() # Search for RDM files and define required information foreach ($vm in (Get-Cluster $cluster | Get-VM | Get-HardDisk -DiskType "RawPhysical","RawVirtual")){ $RDMInfo = "" |select-Object VMName,DiskType,ScsiCanonicalName $RDMInfo.VMName = $vm.Parent $RDMInfo.DiskType = $vm.DiskType $RDMInfo.ScsiCanonicalName = $vm.ScsiCanonicalName $myTable += $RDMInfo } $myTable |Export-csv -NoTypeInformation $csvfile # Finished creating csv file. Now filtering out RDMs that are not part of MSCS by removing RDMs that do not have duplicates. $duprdms = Import-Csv $csvfile | Group-Object ScsiCanonicalName -noElement | where {$_.count -gt 1} # Now setting MPP and the Perennially Reserved option on RDMs where this has not been done yet. # This is an extra check because this script is run multiple times during a disaster recovery test. ForEach ($esxihost in (Get-Cluster $cluster | Get-VMHost)){ $myesxcli = get-esxcli -VMHost $esxihost ForEach ($rdm in $duprdms){ $rdmdisk = $rdm.Name $scsilun = Get-ScsiLun -CanonicalName $rdmdisk -VMHost $esxihost Write-Host "Evaluating $rdmdisk on $esxihost" $mpp = $scsilun.multipathpolicy Write-Host "MPP is $mpp" if ("$mpp" -ne "MostRecentlyUsed"){ # Set Perennially Reserved flag to true $myesxcli.storage.core.device.setconfig($false, "$rdmdisk", $true) # Set multipathpolicy to MRU $scsilun | Set-ScsiLun -multipathpolicy "MostRecentlyUsed" } } } # Disconnect from vCenter Disconnect-VIServer * -Confirm:$false # Send last 10 errors to logfile $allerrors = $error[0..9] # Preparing info for email $subject = "Result: $scriptname : Recoveryplan: $recoveryplan in $recoverymode mode" $info = "These are the last 10 errors: $allerrors" Send-Email $subject $info # Remove logfile after it has been sent by email Remove-Item $csvfile