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

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

On Tuesday I published part 1 where I utilized Get-ClusterParameter and the DiskUniqueIds property to enumerate LUN information for cluster storage, in part 2 I simplified that same approach.   In today’s post I am going to continue utilizing the Get-ClusterParameter again looking at the Physical Disk Private Properties however in this post I’ll be looking at the DiskIdGuid property.  This property contains the GUID for a physical disk formatted with as GPT.  Using this GUID we can match it with VDS and get all of the good information that VDS has about disks.

Method 1

This method is fully supported by Microsoft and is relatively strait forward.

Step 1: Import the FailoverClusters module into your PowerShell Window  
              Import-Module FailoverClusters
Step 2: Get the CSV object your interested in using the Get-ClusterSharedVolume cmdlet
              $csv = Get-ClusterSharedVolume –Name “MyCSV”
Step 3: Get the Cluster Parameters for the CSV object using Get-ClusterParameter
              $CSVParams = Get-ClusterParameter -InputObject $csv
Step 4: Filter to get just the DiskIdGuid 
              ($CSVParams | Where-object -FilterScript {$_.Name -eq "DiskIdGuid"}).Value

Ok now you’ve got the GUID for the LUN it will be something like {32443078-9afc-4c0a-b142-466f582a4051}.

Step 5: Start diskpart.exe
Step 6: Start iterating over disks using select disk <number> and then uniqueid disk until you match the GUID’s. It will look like this:

C:\Users\taylorb>diskpart.exe Microsoft DiskPart version 6.1.7601 Copyright (C) 1999-2008 Microsoft Corporation. On computer: 37-4611K2713G

DISKPART> select disk 1 Disk 1 is now the selected disk.

DISKPART> uniqueid disk Disk ID: {F1B5319E-FF92-40BB-9BC9-D5FFAD0AD66B}

DISKPART> select disk 2 Disk 2 is now the selected disk.

DISKPART> uniqueid disk Disk ID: {32443078-9AFC-4C0A-B142-466F582A4051}

Step 7: Once you find the disk you want you can use the detail disk command to get more information.  It will look like this:

DISKPART> detail disk

IBM 2810XIV Multi-Path Disk Device Disk ID: {32443078-9AFC-4C0A-B142-466F582A4051} Type : FIBRE Status : Reserved Path : 0 Target : 1 LUN ID : 2 Location Path : UNAVAILABLE Current Read-only State : No Read-only : No Boot Disk : No Pagefile Disk : No Hibernation File Disk : No Crashdump Disk : No Clustered Disk : Yes

There are no volumes.

Method 2

This method utilizes an undocumented and unsupported class I first posted about previously in Using The Virtual Disk Service (VDS) From Powershell to Mount and Use VHD's as well as in Virtual Disk Service (VDS) Powershell Script Version 2 - Previously Created Volume Support + Mount Points + Bug Fixes.  Again I must reiterate this is not an officially supported API it has no warrantee – it may break at any time and Microsoft Support can not and will not help you with it.  Now that the disclaimer is over – in this example I am using the VDS api’s to do the mapping for me.

Script

#Load the Microsoft Storage VDS Library #This is an undocumented, unsupported library, there is no warrantee nor gaurantees. [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Storage.Vds") | Out-Null $VdsServiceLoader = New-Object Microsoft.Storage.Vds.ServiceLoader $VdsService = $VdsServiceLoader.LoadService($null) $VdsService.WaitForServiceReady() $VdsService.Reenumerate() #Build up a collection of all disks presented to the os $Disks = ($VdsService.Providers |% {$_.Packs}) |% {$_.Disks} #Import the FailoverClusters module Import-Module FailoverClusters #Retreve all of the CSV Lun's $AllCSVs = Get-ClusterSharedVolume foreach ($Csv in $AllCSVs) {     $CSVParams = Get-ClusterParameter -InputObject $Csv     #Retreve the DiskIDGuid Object from the Cluster Parameters $DiskGUIDString = ($CSVParams | Where-object -FilterScript {$_.Name -eq "DiskIdGuid"}).Value     #Match up the DiskID's $Disk = ($Disks | Where-Object -FilterScript {$_.DiskGuid -eq $DiskGUIDString})         Write-Host "CSV ClusterResourceName: " $Csv.Name         Write-Host "DiskID: " $DiskGUIDString         Write-Host "DiskFriendlyName: " $Disk.FriendlyName         Write-Host "DiskName: " $Disk.Name         Write-Host "DiskAddress: " $Disk.DiskAddress         Write-Host }

Sample Output

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

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

CSV ClusterResourceName: Cluster_CSV1_IBMXIV DiskID: {32443078-9afc-4c0a-b142-466f582a4051} DiskFriendlyName: IBM 2810XIV Multi-Path Disk Device DiskName: \\?\PhysicalDrive2 DiskAddress: Port1Path0Target1Lun2

CSV ClusterResourceName: Cluster_CSV2_IBMXIV DiskID: {ee36e403-75cb-4e23-87b4-e82af7949f4e} DiskFriendlyName: IBM 2810XIV Multi-Path Disk Device DiskName: \\?\PhysicalDrive3 DiskAddress: Port1Path0Target1Lun3

CSV ClusterResourceName: Cluster_CSV3_IBMXIV DiskID: {5db28bcb-6ed3-4b80-b363-861a25cc10e4} DiskFriendlyName: IBM 2810XIV Multi-Path Disk Device DiskName: \\?\PhysicalDrive4 DiskAddress: Port1Path0Target1Lun4

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

WS08R2-HyperV_v_rgb

Comments

  • Anonymous
    May 08, 2013
    Anyway to get drive letter?

  • Anonymous
    September 22, 2014
    Hello, i'm looking for your arcticle  Using The Virtual Disk Service (VDS) From Powershell to Mount and Use VHD's as well as in Virtual Disk Service (VDS) Powershell Script Version 2 - Previously Created Volume Support + Mount Points + Bug Fixes. There is a way to get it please ? I need to see how you did the trick.

  • Anonymous
    July 28, 2015
    Can also match up on DiskSignature for MBR disks $DiskSig = ($CSVParams | Where-object -FilterScript {$.Name -eq "DiskSignature"}).Value    #Match up the DiskID's $Disk = ($Disks | Where-Object -FilterScript {$.Signature -eq $DiskSig}) ... but note this will give some bogus info for a guid disk with a traditional signature of 0