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
<source lang="powershell">
- 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 :