Open main menu

Datastore to LUN Mapping (PowerCLI)

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  :