VMware ESXi 6.5 RDM Initialization

1 – Get Required PowerShell Modules

Install VMWare PowerCLI:

This is VMWare’s PowerCLI PowerShell module. Used to interact with vCenter.

Find-Module -Name VMware.PowerCLI
Install-Module -Name VMware.PowerCLI -Scope CurrentUser

 

Install Set-VMWareRDM

This is a custom module to allow us to easily configure RDM devices and other volume settings.

 

Copy Module Files:

Set-VMWareRDM_psm1

Set-VMWareRDM_psd1

Into PowerShell Global Module Folder:

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Set-VMWareRDM\

Rename the files:

Set-VMWareRDM_psm1.txt –> Set-VMWareRDM.psm1

Set-VMWareRDM_psd1.txt –> Set-VMWareRDM.psd1

 

2 – Get RDM List from existing farm

Since the new farm can’t get the listing of RDM’s because all of the RDM’s exist only in the old farm, connected to VM’s running in the old farm; we have to get a list of RDM’s from the old farm, so that we can pre-set their perennial reservations in the new farm, and not have slow boot up times.

Once we have the CSV file, we don’t have to re-run this script.

#Connect to old VCenter:

#Import our custom module
Import-Module Set-VMWareRDM -Force

#Connect to the old vCenter server
Connect-VCenterServer -vCenter vc01.contoso.com

#Get the listing of RDM devices and export out to a CSV file
$RDM = Get-RDMDevice
$RDM | Export-Csv .\RDMList.csv

#Disconnect from the vCenter server
Disconnect-VCenterServer

 

3 – Initialize new ESXi Host

After a fresh ESXi install, we need to run the custom commands to initialize the host. This includes creating ALUA Rules, applying storage rules, and setting perennial reservations.

#Import our custom module
Import-Module Set-VMWareRDM -Force

#Connect to the new VCenter server
Connect-VCenterServer -vCenter vc02.contoso.com

#This is our ESXi Host computer that we are going to operate on. CHANGE to the Right SERVER NAME
$ESXiHost = "ESXi01.contoso.com"

#Rescan all storage so that we have all storage available.
Get-VMHost $ESXiHost | Get-VMHostStorage -RescanAllHba

#Run through our initialization
Initialize-NewHost -ESXiHost $ESXiHost

#Set the RDM's to perennially reserved from the CSV file
$RDM = Import-Csv .\RDMList.csv
$RDM | Initialize-NewRDM -ErrorAction SilentlyContinue

 

4 – Verification

We want to verify that settings were set correctly

# 0. Get Power CLI object
$esxcli = Get-CLI -ESXiHostName $ESXiHost

# 1. Check for ALUA Rule
$Alua = ($esxcli.storage.nmp.satp.rule.list.Invoke() | where {$_.vendor -eq "3PARdata"})
$Alua
if($Alua.count -eq 1)
{
Write-Host "`n`nPASS - ALUA Rule Present`n`n" -ForegroundColor Green
}else
{
Write-Host "`n`nFAIL - ALUA Rule Not Present - Re-run Initialize-NewHost`n`n" -ForegroundColor Red
}

# 2. Check that we see more than 10 SCSI Luns - ensure that we see all the LUN's, and not just the local disk
$VMHost = Get-VMHost $ESXiHost
$AllLUNs = Get-ScsiLun -LunType disk -VmHost $VMhost
$RRLUNs = ($AllLUNs | where { $_.MultipathPolicy -eq "RoundRobin" })
$RRLUNs | ft -AutoSize

if($RRLUNs.count -gt 10)
{
Write-Host "`n`nPASS - More than 10 SCSI LUN's connected`n`n" -ForegroundColor Green
}else
{
Write-Host "`n`nFAIL - Less than 10 SCSI LUN's connected - Re-run RescanAllHba and Initialize-NewHost`n`n" -ForegroundColor Red
}

# 3. Check perennial reservations for a known RDM device
$RDMdevice = $esxcli.storage.core.device.list.Invoke(@{device='naa.40000bb000000000000000b600007847'})
$RDMdevice
if($RDMdevice.IsPerenniallyReserved -eq $true)
{
Write-Host "`n`nPASS - Perennial Reservations set correctly`n`n" -ForegroundColor Green
}else
{
Write-Host "`n`nFAIL - Perennial Reservations Not set correctly Re-run RDM CSV export and import`n`n" -ForegroundColor Red
}

 

5 – Restart

If all verification steps have completed, re-boot host to make settings permanent.

Restart-VMHost $ESXiHost -Force