Start-AzsSupportStorageDiagnostic storage diagnostics reference

August 19, 2026 ยท View on GitHub

Component Storage
Topic Azure Local Support Diagnostic Tool: storage diagnostic cmdlet reference for Start-AzsSupportStorageDiagnostic
Document type Reference
Audience Azure Local operators, Microsoft CSS support engineers, systems integrators, and OEM support engineers who need to capture storage evidence safely.
Severity Informational: this article documents read-only diagnostics. Follow the linked troubleshooting guide for the specific failure that the diagnostic output identifies.
Highest action classification Read-only diagnostic: the examples gather command output and write diagnostic artifacts only.
Workload impact No VM or storage workload disruption is expected from the documented commands. The checks read storage and cluster state and add only light, transient query load, so running VMs are not paused, live migrated, or measurably slowed. The cmdlet may take several minutes and writes a transcript in the tool working directory.

Table of contents

At a glance

Bottom line: Run Start-AzsSupportStorageDiagnostic -Include 'StorageHealth','DiskHealth','VirtualDisks', read the PASS, INFO, WARN, or FAIL result next to each check label, then use the Routing after you have output table to open the correct downstream guide. Do not run any repair command from this reference.

QuestionAnswer
Workload impactNone expected. Every documented command is read-only and does not move, restart, or reconfigure VMs, disks, or the cluster.
OwnerThe operator or the Microsoft CSS engineer runs the capture. Each finding then routes to the owner named in the Routing after you have output table: a downstream storage TSG, the OEM or vendor for firmware and Supported Components findings, or the product group for an all-PASS case that still reproduces.
DurationUsually several minutes for the full run. A single -Include token is faster.
Maintenance windowNot required, because this is read-only evidence capture.

Note

New to Azure Local? Every command in this article only reads status and writes a log file that you can share with support. Running these commands cannot change the cluster, delete data, retire a disk, or restart a node. If a result tells you to run a repair command, stop and open the linked guide for that finding first.

Overview

Start-AzsSupportStorageDiagnostic is part of the Azure Local Support Diagnostic Tool. It runs storage-focused checks for Storage Spaces Direct (S2D), prints check labels with PASS, INFO, WARN, or FAIL, and writes a diagnostic transcript for support evidence.

Use this article as a reference for the cmdlet parameters, supported -Include tokens, source check labels, and safe evidence capture. For details on installing or updating the Support Diagnostic Tool, see Support Tool for Azure Local Hyperconverged Deployments.

Scope and safety boundary

In scope

  • Running Start-AzsSupportStorageDiagnostic with no -Include value, which runs all storage checks.
  • Running targeted checks with the exact source -Include tokens listed in this article.
  • Capturing module version, command output, and the tool transcript path for CSS or product group review.
  • Selecting a virtual disk FriendlyName for -PhysicalExtentCheck when a virtual disk has an unexpected state.

Out of scope

  • Repairing storage health, retiring disks, restarting the Health Service, or changing cluster resource parameters.
  • Deciding whether a CanPool=False disk should be added to the pool. Use the general decision-tree router in Troubleshoot physical disks not claimed after insertion (CanPool=False).
  • Repairing persistent disk verification stuck behind a wedged Health Service. That scenario is delegated to the dedicated AzLocal_Storage_PhysicalDiskVerificationStuck validation spec and its public guidance, not to this reference article.

Important

The commands in this article are diagnostic. If the diagnostic output recommends a state-changing command, do not run that command from this reference alone. Open the specific linked troubleshooting guide for that finding, confirm its safety gates, and capture a fresh backup of the evidence first.

Prerequisites

  • Run PowerShell as Administrator on an Azure Local node, or use a management host that can reach the cluster through PowerShell remoting.
  • Use an account with administrative access to the Azure Local nodes.
  • Install or import the Microsoft.AzLocal.CSSTools module that contains Start-AzsSupportStorageDiagnostic.
  • Confirm PowerShell remoting works to the cluster nodes if you use -ClusterName or -Credential.
  • If you plan to use -PhysicalExtentCheck, identify the virtual disk FriendlyName first with Get-VirtualDisk.
$ErrorActionPreference = 'Stop'

Get-Module Microsoft.AzLocal.CSSTools -ListAvailable |
    Sort-Object Version -Descending |
    Select-Object Name, Version, Path -First 1

Get-Command Start-AzsSupportStorageDiagnostic |
    Select-Object Name, ModuleName, Version, Source

Parameters

ParameterTypeRequiredPurposeNotes
-ClusterNameStringNoRuns diagnostics against the named cluster.If omitted, the cmdlet attempts to resolve the local cluster name.
-CredentialPSCredentialNoSupplies credentials for remote computers.If omitted, the current user context is used.
-PhysicalExtentCheckStringNoRuns physical extent analysis for one virtual disk FriendlyName.Use the virtual disk FriendlyName from Get-VirtualDisk, not a drive letter and not a physical disk name.
-IncludeString[]NoLimits the run to one or more supported storage diagnostic tokens.If omitted, all storage checks and information reports run.
-ProgressAction and common parametersActionPreference and common parameter typesNoStandard PowerShell common-parameter behavior.-ProgressAction is generated by PowerShell help and is not a diagnostic selector.

Fast path

Use the fast path when you need to unblock a remote support session quickly.

  1. Capture module identity and command source with the prerequisite commands above.
  2. Run the broad storage health slice first.
  3. Add a narrower token only after the broad slice points to that area.
  4. Save the console output and the cmdlet transcript path before starting any remediation guide.
# Run the full storage diagnostic set.
Start-AzsSupportStorageDiagnostic

# Run the common first support slice only.
Start-AzsSupportStorageDiagnostic -Include 'StorageHealth','DiskHealth','VirtualDisks'

# Run against a named cluster with explicit credentials when needed.
Start-AzsSupportStorageDiagnostic -ClusterName '<cluster-name>' -Credential (Get-Credential) -Include 'StorageHealth'

Allowed Include tokens

The source implementation accepts exactly these -Include tokens.

Include tokenRuns
CSVUsageCluster Shared Volume usage report.
DiskHealthPer-disk table plus Storage Spaces partition, disk health, and transient disk checks.
StorageSummaryStorage node, volume, virtual disk, pool, S2D, capacity, cache, and supported-components summary.
StorageComponentsSupported Components Document comparison and missing component checks.
DirtyCountDirty Region Tracking threshold check.
VirtualDisksVirtual disk health check.
MissingDisksPnP disk count compared with disks in Storage Spaces.
SNVStorage Node View difference check.
FirmwareDriftFirmware version drift by physical disk model.
SMPHostStorage Management Provider host process check.
SMPHostIssueDetached virtual disk with online CSV mismatch check.
StorageHealthStorage pool, cluster node, CSV, enclosure, Health Service fault, storage health action, disks-not-in-pool, HealthPIH, and storage job checks.

Diagnostic check labels and result levels

The source behavior is: Prints PASS when a check finds no matching data. When data is detected, the source assigns the result level shown below.

Source output labelResult when detectedInclude tokenWhat the check looks for
Missing Disks From Storage SpacesINFOMissingDisksDifference between disks visible through Plug and Play and disks in Storage Spaces.
Storage Pool Health CheckFAILStorageHealthNon-primordial storage pool health is not healthy.
Cluster Nodes Health Process RunningFAILStorageHealthHealthPIH.exe is not running on every cluster node.
Storage Job CheckWARNStorageHealthA storage job is not completed, excluding format volume jobs.
Cluster Node CheckFAILStorageHealthOne or more cluster nodes are not Up.
Cluster Shared Volumes CheckFAILStorageHealthOne or more Cluster Shared Volumes are not Online.
Storage Enclosure CheckFAILStorageHealthOne or more storage enclosures are not healthy.
Health Service Fault CheckWARNStorageHealthActive Health Service storage faults are present.
Storage Health Action CheckFAILStorageHealthA storage health action is not in the Succeeded state.
Disks Not In Pool CheckFAILStorageHealthDisks visible to the cluster are not present in the non-primordial pool.
Virtual Disk CheckFAILVirtualDisksA virtual disk health state is not healthy.
Dirty CountFAILDirtyCountDirty Region Tracking count is greater than the threshold.
Support Components ChangeINFOStorageComponentsThe current physical disk and firmware inventory differs from the Supported Components Document and a new supported-components document can be suggested.
Support Components MissingFAILStorageComponentsPhysical disks or firmware versions in Storage Spaces are missing from the Supported Components Document.
Storage Node View DiffersFAILSNVA physical disk health or operational problem is not seen consistently by all nodes.
Firmware DriftINFOFirmwareDriftSame physical disk model has more than one firmware version.
SMPHost CheckFAILSMPHostThe Storage Management Provider host service is not running on all nodes.
SMPHost Issue CheckFAILSMPHostIssueA virtual disk is detached while the related Cluster Shared Volume is still online.
Storage Spaces Partitions CheckFAILDiskHealthStorage Spaces partitions are missing or do not match expected protective partition patterns.
Disk Health CheckFAILDiskHealthA physical disk health status is not healthy.
Transient Disk CheckFAILDiskHealthA physical disk operational status is Transient Error.

Expected console output shape:

Storage Pool Health Check                       [ PASS ]
Storage Job Check                               [ WARN ]
Virtual Disk Check                              [ FAIL ]
Firmware Drift                                  [ INFO ]

The rows above are the source labels and result levels. Your live output may contain a different mix of PASS, INFO, WARN, and FAIL based on the cluster state at the time of the run.

Diagnostic information reports

These -Include tokens produce inventory or capacity information rather than a failure check.

ReportInclude tokenOutput areas
Storage SummaryStorageSummaryStorage Nodes Configuration, Volume Configuration, Virtual Disk Configuration, Pool Configuration, Storage Spaces Direct Configuration, and Capacity Details.
Cluster Shared Volume UsageCSVUsageCluster Shared Volume space consumption view.

Physical extent analysis

Use -PhysicalExtentCheck only when you need to inspect non-active physical extents for a virtual disk with an unexpected state. The value is the virtual disk FriendlyName.

# List candidate virtual disk names first.
Get-VirtualDisk |
    Format-Table FriendlyName, HealthStatus, OperationalStatus

# Replace the placeholder with the virtual disk FriendlyName from Get-VirtualDisk.
$virtualDiskName = 'replace-with-virtual-disk-FriendlyName'
Start-AzsSupportStorageDiagnostic -PhysicalExtentCheck $virtualDiskName

Under the hood, -PhysicalExtentCheck calls Get-AzsSupportStoragePhysicalExtent for the named virtual disk and reports its non-active physical extents. Expect one of three shapes:

  • Non-active extents found: a virtual disk object plus Extents, UniqueDisks, and Disks details.
  • No non-active extents found on a healthy virtual disk: the additional section is empty.
  • No physical disks present to enumerate, for example on a nested or VM-based cluster: the check reports No PNP device with class DiskDrive found on <cluster> and returns no extent details. This is expected on virtualized substrates and does not indicate a virtual disk fault. This exact message was observed on a nested VM cluster during validation.

Where this appears

Start-AzsSupportStorageDiagnostic is an on-device PowerShell diagnostic. Its own output appears in the console and in the tool transcript. Underlying storage problems may also appear in other tools, but this article does not claim that every surface shows the diagnostic output.

Admin surfaceHow this diagnostic appearsOperator note
PowerShell on an Azure Local nodeShown by Start-AzsSupportStorageDiagnostic console output.Primary surface for this reference. Capture the exact command, module version, and output.
Azure portalDoes not appear in Azure portal as this tool's output.The portal may show the underlying storage alert, but it does not show this cmdlet's check table.
Windows event logsDoes not appear in Windows event logs as this tool's output.Investigate event logs from the specific downstream TSG only after a check points there.
Cluster logs (Get-ClusterLog)Does not appear in Get-ClusterLog as this tool's output.Cluster logs can help with the underlying storage condition, not with the Support Diagnostic Tool run itself.
Windows Failover Cluster ManagerDoes not appear in Failover Cluster Manager as this tool's output.Use Failover Cluster Manager only to inspect an underlying cluster role, CSV, or node state that a check identifies.
Windows Admin Center on a standalone hostDoes not appear in Windows Admin Center as this tool's output.WAC may show the underlying storage health, not the cmdlet output.
Windows Admin Center in the Azure portalDoes not appear in Windows Admin Center in the Azure portal as this tool's output.Use the PowerShell output and transcript as the evidence package.
Component / tool log files (on disk)Shown in the Support Diagnostic Tool transcript file named Start-AzsSupportStorageDiagnostic_TraceOutput_<yyyyMMdd>.csv in the tool working directory.Preserve this transcript with the console output.

Verify and capture the diagnostic run

The goal is to prove the command ran, preserve its output, and keep the run reproducible. The following example writes a local evidence folder on the node or management host. It does not change cluster configuration.

$ErrorActionPreference = 'Stop'
$stamp = Get-Date -Format 'yyyyMMdd_HHmmss'
$outDir = Join-Path $env:USERPROFILE "AzLocalStorageDiagnostic_$stamp"
New-Item -ItemType Directory -Path $outDir -Force | Out-Null

$module = Get-Module Microsoft.AzLocal.CSSTools -ListAvailable |
    Sort-Object Version -Descending |
    Select-Object Name, Version, Path -First 1

[pscustomobject]@{
    TimeUtc = (Get-Date).ToUniversalTime().ToString('o')
    ModuleName = $module.Name
    ModuleVersion = $($module.Version.ToString())
    ModulePath = $module.Path
    Command = "Start-AzsSupportStorageDiagnostic -Include 'StorageHealth','DiskHealth','VirtualDisks'"
} | ConvertTo-Json | Out-File -FilePath (Join-Path $outDir 'run-metadata.json') -Encoding utf8

Start-AzsSupportStorageDiagnostic -Include 'StorageHealth','DiskHealth','VirtualDisks' *>&1 |
    Tee-Object -FilePath (Join-Path $outDir 'storage-diagnostic-output.txt')

# The tool transcript name carries the date only, so copy it out under a time-stamped
# name before any second run today, otherwise the next same-day run overwrites it.
$workingDir = Get-AzsSupportWorkingDirectory
$transcript = Get-ChildItem -Path $workingDir -Filter 'Start-AzsSupportStorageDiagnostic_TraceOutput_*.csv' |
    Sort-Object LastWriteTime -Descending |
    Select-Object -First 1
if ($transcript) {
    Copy-Item -Path $transcript.FullName -Destination (Join-Path $outDir "StorageDiagnostic_TraceOutput_$stamp.csv")
}

Get-ChildItem -Path $outDir

Verify the diagnostic run before you interpret it:

  • The command completed without a PowerShell error.
  • storage-diagnostic-output.txt contains the source output labels from this article.
  • run-metadata.json contains the module version, module path, timestamp, and exact command.
  • The Support Diagnostic Tool transcript is named Start-AzsSupportStorageDiagnostic_TraceOutput_<yyyyMMdd>.csv, which carries a date-only stamp, and is written to the tool working directory. Locate that directory with the module cmdlet Get-AzsSupportWorkingDirectory, then list the transcript with Get-ChildItem -Path (Get-AzsSupportWorkingDirectory) -Filter 'Start-AzsSupportStorageDiagnostic_TraceOutput_*.csv'. Because the name carries the date only, a second run on the same day overwrites it, so copy each run's transcript out immediately under a name that includes a time stamp such as HHmmss before you start the next run, exactly as the capture example above does.
  • Every INFO, WARN, or FAIL row is routed to a specific troubleshooting guide before any state-changing action is attempted.

For a single run the cmdlet already queries every node in the cluster, so cross-node checks such as Storage Node View Differs, SMPHost Check, and Firmware Drift compare all nodes in one pass. For repeat deployments across sites, run the same -Include slice on each cluster and keep a per-site run-metadata.json. After a downstream guide remediates a finding, re-run the same -Include token and confirm the check returns PASS to close the loop.

Glossary

TermMeaning
S2DStorage Spaces Direct, the clustered storage technology used by Azure Local.
CSVCluster Shared Volume, a cluster volume path such as C:\ClusterStorage\... that can host workloads.
DRTDirty Region Tracking, metadata that tracks regions that need repair or synchronization.
SNVStorage Node View, the view of physical disks from each cluster node. Differences can point to visibility or fabric issues.
SMPHostStorage Management Provider host service. The diagnostic source label is SMPHost Check.
Supported Components DocumentVendor support data used to decide whether disk model and firmware combinations are supported.
Physical extentA physical allocation backing a virtual disk. In this cmdlet, -PhysicalExtentCheck starts from a virtual disk FriendlyName.
Primordial poolThe built-in pool that lists disks which are available but not yet added to Storage Spaces Direct. The non-primordial pool is the actual S2D pool that backs your volumes, so a healthy cluster serves storage from the non-primordial pool.
Protective partitionA reserved partition pattern that Storage Spaces places on a pooled disk. A missing or unexpected pattern can mean a disk is not correctly claimed by the pool.
Detached virtual diskA virtual disk that is no longer attached to the storage stack, so its Cluster Shared Volume cannot be served even when the pool itself is present.
PnPPlug and Play, the Windows device layer that enumerates physical disks. A difference between the PnP disk count and the disks in Storage Spaces points to a disk that hardware can see but the pool cannot.
Health ServiceThe Azure Local cluster service that reports storage faults and runs storage health actions.
HealthPIH.exeThe per-node Health Service process. The Cluster Nodes Health Process Running check confirms it is running on every cluster node.

Routing after you have output

Use the diagnostic result to route the next action. Do not treat this reference as a repair procedure.

Diagnostic evidenceRoute
CanPool=False or a CannotPoolReason valueStart with Troubleshoot physical disks not claimed after insertion (CanPool=False). That guide remains the general decision-tree router.
Persistent Verification in progress or Verification failed that does not clear, especially with Health Service provider evidenceUse the dedicated PhysicalDiskVerificationStuck guidance tracked by spec AzLocal_Storage_PhysicalDiskVerificationStuck. This reference intentionally does not repair Health Service provider configuration.
FirmwareDrift, Support Components Change, or Support Components MissingCapture disk model, firmware, serial number, and the Supported Components output. The Supported Components output names the expected supported model and firmware set, so use it as the comparison baseline, then hand off to the OEM or vendor support path and confirm the target firmware version against the OEM qualified-firmware list.
Storage Node View Differs or Storage Enclosure Check FAILA physical disk or enclosure is seen inconsistently across nodes. This can be a storage fabric, cabling, SAS or enclosure, or node network visibility problem, so capture the check output and involve the fabric, network, or hardware owner alongside the downstream storage TSG.
Storage Job Check, Virtual Disk Check, Dirty Count, or Disk Health CheckPreserve output and transcript, then select the downstream storage TSG for that exact check and confirm its safety gates before any state-changing action.
Only PASS rows and the issue is still presentCapture the evidence package and escalate through your support path to the product group, because this cmdlet did not detect the reported condition. A Microsoft CSS engineer escalates to the product group with the symptom timeline; a customer or partner opens or updates a support request.