PowerShell script to debug vSAN (VMware Virtual SAN) issues and identify the failed components

# Import VMware PowerCLI module
Import-Module VMware.VimAutomation.Core

# Connect to vCenter
$vCenter = Read-Host "Enter vCenter Server"
$Username = Read-Host "Enter vCenter Username"
$Password = Read-Host -AsSecureString "Enter vCenter Password"
Connect-VIServer -Server $vCenter -User $Username -Password $Password

# Function to retrieve failed vSAN components
function Get-FailedVSANComponents {
    # Get all vSAN clusters
    $clusters = Get-Cluster | Where-Object { $_.VsanEnabled -eq $true }

    foreach ($cluster in $clusters) {
        Write-Output "Checking vSAN Cluster: $($cluster.Name)"

        # Retrieve vSAN disk groups
        $vsanDiskGroups = Get-VsanDiskGroup -Cluster $cluster

        foreach ($diskGroup in $vsanDiskGroups) {
            Write-Output "Disk Group on Host: $($diskGroup.VMHost)"

            # Retrieve disks in the disk group
            $disks = $diskGroup.Disk

            foreach ($disk in $disks) {
                # Check if the disk is in a failed state
                if ($disk.State -eq "Failed" -or $disk.Health -eq "Failed") {
                    Write-Output "  Failed Disk Found: $($disk.Name)"
                    Write-Output "  Capacity Tier Disk? $($disk.IsCapacity)"
                    Write-Output "  Disk UUID: $($disk.VsanDiskId)"
                    Write-Output "  Disk Group UUID: $($diskGroup.VsanDiskGroupId)"

                    # Check which vSAN component(s) this disk was part of
                    $vsanComponents = Get-VsanObject -Cluster $cluster | Where-Object {
                        $_.PhysicalDisk.Uuid -eq $disk.VsanDiskId
                    }

                    foreach ($component in $vsanComponents) {
                        Write-Output "    vSAN Component: $($component.Uuid)"
                        Write-Output "    Associated VM: $($component.VMName)"
                        Write-Output "    Object State: $($component.State)"
                    }
                }
            }
        }
    }
}

# Run the function
Get-FailedVSANComponents

# Disconnect from vCenter
Disconnect-VIServer -Confirm:$false

Output Example

Checking vSAN Cluster: Cluster01
Disk Group on Host: esxi-host01
  Failed Disk Found: naa.6000c2929b23abcd0000000000001234
  Capacity Tier Disk? True
  Disk UUID: 52d5c239-1aa5-4a3b-9271-d1234567abcd
  Disk Group UUID: 6e1f9a8b-fc8c-4bdf-81c1-dcb7f678abcd
    vSAN Component: 8e7c492b-7a67-403d-bc1c-5ad4f6789abc
    Associated VM: VM-Database01
    Object State: Degraded

Customization

  • Modify $disk.State or $disk.Health conditions to filter specific states.
  • Extend the script to automate remediation steps (e.g., removing/replacing failed disks).

Leave a comment