Add Storage TSGs: physical disk add (HowTo) + CanPool=False (Troubleshoot)#284
Add Storage TSGs: physical disk add (HowTo) + CanPool=False (Troubleshoot)#284AlBurns-MSFT wants to merge 4 commits into
Conversation
…hoot) Adds two new Storage TSGs derived from a customer disk-add engagement: - HowTo-Storage-AddPhysicalDisksToS2DPool.md End-to-end safe procedure for online capacity expansion: pre-checks, symmetric insertion, automatic vs manual pool claim, monitoring storage jobs, capacity confirmation, and final validation. - Troubleshoot-Storage-PhysicalDiskCanPoolFalse.md Resolution paths for every common CannotPoolReason value (In a Pool, Verification in progress / failed, Hardware/Firmware not compliant, Offline, Stale metadata), plus data-collection checklist for support. Both TSGs follow the HowTo-Template and Troubleshoot-Template and reference the existing Troubleshooting-Storage-With-Support-Diagnostics-Tool TSG. Internal tracking: msazure/One #37486687. Drafts were reviewed for public safety (no telemetry, KQL, customer names, or ARM URIs). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…arify version applicability - Both files: replace manual Add-PhysicalDisk snippet with a defensive variant that validates exactly one non-primordial pool and requires the operator to enumerate intended new disks by serial number, so Add-PhysicalDisk cannot accidentally claim unintended CanPool=True disks. - Troubleshoot file: clarify Affected Versions from 'All versions' to 'All Azure Local releases (Storage Spaces Direct)' to convey scope rather than appearing version-agnostic. Addresses Copilot review threads on PR Azure#281. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adds two new Storage troubleshooting guides (TSGs) to the Azure Local Supportability repo: one “HowTo” for safely adding physical disks to an existing S2D pool, and one “Troubleshoot” guide for resolving CanPool=False scenarios using CannotPoolReason. Updates the Storage component index to link to the new guides.
Changes:
- Added a HowTo guide for end-to-end, safety-gated disk add + post-add monitoring/verification in S2D.
- Added a Troubleshoot guide mapping common
CannotPoolReasonvalues to targeted remediation steps (including guarded destructive actions). - Updated
TSG/Storage/README.mdto include links to both new documents.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
TSG/Storage/HowTo-Storage-AddPhysicalDisksToS2DPool.md |
New HowTo TSG covering safe disk-add sequence, monitoring, and verification for S2D pools. |
TSG/Storage/Troubleshoot-Storage-PhysicalDiskCanPoolFalse.md |
New Troubleshoot TSG providing reason-by-reason remediation for CanPool=False disks. |
TSG/Storage/README.md |
Adds index entries linking to the two new Storage TSGs. |
| if ($disksToAdd.Count -ne $intendedSerials.Count) { | ||
| throw "Disk count mismatch: $($disksToAdd.Count) eligible disks matched " + |
There was a problem hiding this comment.
Good catch. Fixed in cb4d1aa — wrapped the assignment in @() and added an inline comment so future readers understand why:
$disksToAdd = @(Get-PhysicalDisk -CanPool $true |
Where-Object SerialNumber -in $intendedSerials)The single-pool guard a few lines above already uses the same @($pool).Count pattern, so this brings the two checks into line.
| if ($disksToAdd.Count -ne $intendedSerials.Count) { | ||
| throw "Disk count mismatch: $($disksToAdd.Count) eligible disks matched " + |
There was a problem hiding this comment.
Same fix as the HowTo. Wrapped in @() in cb4d1aa.
| | `Offline` | The disk is offline | Bring only the intended disk online | | ||
| | `Insufficient Capacity` | The disk is too small | Replace with a supported disk | | ||
| | `Removable media not supported` | The disk is removable or presented as removable | Replace with supported internal storage | | ||
| | Stale metadata suspected | The disk has previous data or pool metadata | Reset only after confirming the disk is safe to wipe | |
There was a problem hiding this comment.
Verified against MSFT_PhysicalDisk.CannotPoolReason on Microsoft Learn — the canonical Windows enum is Unknown / Other / In a Pool / Not Healthy / Removable Media / In Use by Cluster / Offline / Insufficient Capacity / Spare Disk / Reserved by subsystem / Starting, plus the S2D Health Service extensions (Verification in progress, Hardware not compliant, etc.). 'Stale metadata suspected' isn't in either set; the real-world signature is CannotPoolReason = 'In a Pool' with Get-StoragePool | Get-PhysicalDisk finding no matching pool.
Fixed in cb4d1aa:
- Dropped the 'Stale metadata suspected' row from the table.
- Added a note above the table explaining stale-metadata is a sub-case of
In a Poolhandled separately in Step 2g. - Updated the
In a Poolrow's Action to: 'Confirm pool membership via Step 2a. IfGet-StoragePool | Get-PhysicalDiskfinds no match for the disk, treat it as stale metadata (Step 2g).'
Step 2g (Reset-PhysicalDisk) was already correctly written, so no change there.
…fety refinements - HowTo + Troubleshoot: wrap $disksToAdd assignment in @() so .Count is reliable when 0 or 1 disk matches (Copilot review). - Troubleshoot CannotPoolReason table: drop 'Stale metadata suspected' row (not a real enum value). Add explanatory note that stale-metadata is a sub-case of 'In a Pool' handled in Step 2g, and link to it from the 'In a Pool' row. - Troubleshoot Step 2e: clarify that firmware-not-compliant is usually fixed by updating firmware via OEM tooling, not vendor contact. - Troubleshoot Step 2f: add [!CAUTION] block warning operators to check active storage jobs before bringing a disk online with Set-Disk. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Two additional refinements applied in cb4d1aa beyond the Copilot review:
|
|
Please add note that Dell OMIMSWAC |
Address @Karl-WE comment on PR Azure#284: flag that Dell OMIMSWAC (and similar OEM WAC extensions) offer a guided disk-add alternative to the manual PowerShell sequence. Vendor-neutral framing with Dell as the named example since Microsoft Learn already references Dell OpenManage Integration by name. Includes the WAC-in-Azure-portal caveat (OEM extensions not supported in embedded WAC) so the note doesn't mislead operators using the Azure portal management surface. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
That's true. I wonder who is working with Azure WAC extension. It doesn't work most of the time anyway and I gave up reporting it. |
Re-opens PR #281, which was inadvertently closed when the fork was deleted. Same two commits, recovered from
refs/pull/281/head— no content change.Original PR added two Storage TSGs from a customer disk-add engagement:
Copilot review threads from PR #281 (addressed in commit 267151c) do NOT migrate to the new PR. Reviewers can reference the original PR for context.