Getting More Information About You Cluster LUN’s (Part 2 of 3)


So here’s the scenario you need or want to figure out which LUN is which on your cluster…

Yesterday I posted a script which used Get-ClusterParameter and the Physical Disk Private Properties to gather information on the storage being used by the cluster – as promised here’s a less verbose version of that script…

Script

Import-Module FailoverClusters
$csv1 = Get-ClusterSharedVolume Cluster_CSV1_IBMXIV
$csvParams = Get-ClusterParameter -InputObject $csv1
$DiskUniqueIds = ($csvParams | Where-object -FilterScript {$_.Name -eq DiskUniqueIds}).Value

$CountOfIdentifiers = $DiskUniqueIds[8]

$currentArrayIndex = 12
for($a = 0; $a -lt $CountOfIdentifiers; $a++)
{
   
$CodeSet = $DiskUniqueIds[$currentArrayIndex]
   
$Length = $DiskUniqueIds[$currentArrayIndex+8]
   
$NextOffset = $DiskUniqueIds[$currentArrayIndex+10]
    
   
switch ($DiskUniqueIds[$currentArrayIndex+4])
    {
   
0 {Write-Host StorageIdType: VendorSpecific;break}
   
1 {Write-Host StorageIdType: VendorId;break}
   
2 {Write-Host StorageIdType: EUI64;break}
   
3 {Write-Host StorageIdType: FCPHName;break}
   
4 {Write-Host StorageIdType: PortRelative;break}
   
5 {Write-Host StorageIdType: TargetPortGroup;break}
   
6 {Write-Host StorageIdType: LogicalUnitGroup;break}
   
7 {Write-Host StorageIdType: MD5LogicalUnitIdentifier;break}
   
8 {Write-Host StorageIdType: ScsiNameString;break}
    }
    
   
switch ($DiskUniqueIds[$currentArrayIndex+12])
    {
   
0 {Write-Host StorageIdAssoc: Device;break}
   
1 {Write-Host StorageIdAssoc: Port;break}
   
2 {Write-Host StorageIdAssoc: Target;break}
    }
    
   
$Data = $null
   
switch($CodeSet)
    {
   
2 { #StorageIdCodeSetAscii
$DiskUniqueIds_ptr = [System.Runtime.InteropServices.Marshal]::UnsafeAddrOfPinnedArrayElement($DiskUniqueIds, $currentArrayIndex+16)
       
$Data = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($DiskUniqueIds_ptr, $Length)
       
break
        }
    
   
3 { #StorageIdCodeSetUtf8
$DiskUniqueIds_ptr = [System.Runtime.InteropServices.Marshal]::UnsafeAddrOfPinnedArrayElement($DiskUniqueIds, $currentArrayIndex+16)
       
$Data = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($DiskUniqueIds_ptr, $Length)
       
break
        }
    
   
default { #0=StorageIdCodeSetReserved, 1=StorageIdCodeSetBinary
for($x = ($currentArrayIndex+16); $x -lt ($currentArrayIndex + 16 + $Length); $x++)
        {
           
$Data += , $DiskUniqueIds[$x]
        }
       
break
        }
    }
   
Write-Host Data: $Data
   
$currentArrayIndex+=$NextOffset

    Write-Host
}

Sample Output

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\taylorb>.\GetCSVDevInfo1.ps1

StorageIdType:  EUI64
StorageIdAssoc:  Device
Data:  0 23 56 0 1 19 0 28

StorageIdType:  VendorId
StorageIdAssoc:  Device
Data:  IBM     2810XIV          1300113001C

StorageIdType:  VendorSpecific
StorageIdAssoc:  Device
Data:  vol=CSV_1

StorageIdType:  VendorSpecific
StorageIdAssoc:  Device
Data:  host=37-4611K2713K

StorageIdType:  TargetPortGroup
StorageIdAssoc:  Port
Data:  0 0 0 0

StorageIdType:  PortRelative
StorageIdAssoc:  Port
Data:  0 0 7 1

 

Taylor Brown
Hyper-V Enterprise Deployment Team
taylorb@microsoft.com
http://blogs.msdn.com/taylorb

WS08R2-HyperV_v_rgb


Comments (0)