Datastore to LUN Mapping (PowerCLI)

From vwiki
Revision as of 09:51, 12 November 2010 by Sstrutt (talk | contribs) (typo)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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  :