Datastore to LUN Mapping (PowerCLI)
Jump to navigation
Jump to search
During the running of the script below you come across a number of objects that all have potentially useful information, therefore to make adapting the script easier at a later date I've displayed example object displays.
Its also worth checking out the original VMware forum post for further info - http://communities.vmware.com/thread/240466#240466
# Thieved and adapted from the good work by catman...
# http://communities.vmware.com/thread/240466#240466
$objESX = Get-VMHost "My_ESX*"
# Get .NET views for host and storage system
$objViewESX = Get-View -id $objESX.id
$objViewESXstorageSys = Get-View -id $objViewESX.ConfigManager.StorageSystem
# Get FC HBAs
$HBAs = $objViewESXstorageSys.StorageDeviceInfo.HostBusAdapter | Where-Object {$_.Key -like "*FibreChannelHba*"}
#$HBAs
foreach ($hba in $HBAs) {
# Enumerate LUNs
$LUNcount = $objViewESXstorageSys.StorageDeviceInfo.MultiPathInfo.Lun.Length
#Write-Host ("Enumerating $LUNcount LUNs on " + $hba.Device)
for ($LUNidx = 0; $LUNidx -lt $LUNcount; $LUNidx++ ) {
$objScsiLUN = $objViewESXstorageSys.StorageDeviceInfo.MultiPathInfo.Lun[$LUNidx]
#$objScsiLUN
# Enumerate paths on LUN
$PathCount = $objScsiLUN.Path.Length
#Write-Host ("Enumerating $PathCount paths on " + $objScsiLUN.Id)
for ($PathIdx = 0; $PathIdx -lt $PathCount; $PathIdx++) {
$objSCSIpath = $objViewESXstorageSys.StorageDeviceInfo.MultiPathInfo.Lun[$LUNidx].Path[$PathIdx]
#Write-Host ($objSCSIpath.Name + " - " + $objSCSIpath.PathState)
# Only care about one path, active on current HBA
if (($objSCSIpath.PathState -eq "active") -and ($objSCSIpath.Adapter -eq $hba.Key)) {
# Now get the disk that we want
$objSCSIdisk = $objViewESXstorageSys.StorageDeviceInfo.ScsiLun | Where-Object{ ($_.CanonicalName -eq $objScsiLUN.Id) -and ($_.DeviceType -eq "disk") }
#$objSCSIdisk
# Now get the datastore info for disk
$MountCount = $objViewESXstorageSys.FileSystemVolumeInfo.MountInfo.Length
#Write-Host ("Enumerating $MountCount mounts on " + $objSCSIdisk.CanonicalName)
for ($MountIdx = 0; $MountIdx -lt $MountCount; $MountIdx++ ) {
if ($objViewESXstorageSys.FileSystemVolumeInfo.MountInfo[$MountIdx].Volume.Type -eq "VMFS" ) {
$objVolume = $objViewESXstorageSys.FileSystemVolumeInfo.MountInfo[$MountIdx].Volume
#$objVolume
$ExtentCount = $objVolume.Extent.Length
#Write-Host ("Enumerating $ExtentCount mounts on " + $objVolume.Name)
for ($ExtentIdx = 0; $ExtentIdx -lt $ExtentCount; $ExtentIdx++ ) {
$objExtent = $objVolume.Extent[$ExtentIdx]
# Match extent name to disk name
if ($objExtent.DiskName -eq $objSCSIdisk.CanonicalName) {
Write-Host($objSCSIdisk.Vendor + " " + $objSCSIdisk.Model + " " + $objSCSIdisk.CanonicalName + "`t" + $objVolume.Name)
}
}
}
}
}
}
}
}
$objScsiLUN
Key : key-vim.host.MultipathInfo.LogicalUnit-vmhba3:0:13 Id : vmhba3:0:13 Lun : key-vim.host.ScsiDisk-vmhba3:0:13 Path : {vmhba3:0:13, vmhba3:1:13, vmhba4:0:13, vmhba4:1:13} Policy : VMware.Vim.HostMultipathInfoFixedLogicalUnitPolicy StorageArrayTypePolicy : DynamicType : DynamicProperty :
$objSCSIdisk
Capacity : VMware.Vim.HostDiskDimensionsLba DevicePath : /vmfs/devices/disks/vml.02000d0000600508b40006b8e40000d00001280000485356323030 Key : key-vim.host.ScsiDisk-vmhba3:0:13 Uuid : 02000d0000600508b40006b8e40000d00001280000485356323030 Descriptor : CanonicalName : vmhba3:0:13 DisplayName : LunType : disk Vendor : HP Model : HSV200 Revision : 6110 ScsiLevel : 6 SerialNumber : unavailable DurableName : VMware.Vim.ScsiLunDurableName AlternateName : {4, 3, 5, 5} StandardInquiry : {0, 0, 5, 18...} QueueDepth : OperationalState : {ok} Capabilities : VStorageSupport : DeviceName : /vmfs/devices/disks/vml.02000d0000600508b40006b8e40000d00001280000485356323030 DeviceType : disk DynamicType : DynamicProperty :
$objVolume
BlockSizeMb : 1 MaxBlocks : 262144 MajorVersion : 3 Version : 3.31 Uuid : 48944e24-b5e93716-aa5c-001cc4466ba8 Extent : {vmhba3:0:8} VmfsUpgradable : False ForceMountedInfo : Type : VMFS Name : VMFSVol8 Capacity : 536602476544 DynamicType : DynamicProperty :