We already wrote about a standalone Storage Spaces pool and Delete Pool. That page says it is not Storage Spaces Direct. We also wrote about a hardware RAID card's Force Online after the battery dies, and about rebuild versus recovery. This page is the clustered pool. Several NVMe SSDs show Lost Communication, IO Error, or a missing node, and the pool will not take writes. The screens share words with those other failures. The stack does not.
Read-only means Windows stopped changing the pool
Microsoft documents the health and operational states for Storage Spaces and Storage Spaces Direct on one page: Storage Spaces and Storage Spaces Direct health and operational states. A pool has a health status — Healthy, Warning, or Unknown / Unhealthy — and an operational status. The command they give is Get-StoragePool -IsPrimordial $False | Select-Object HealthStatus, OperationalStatus, ReadOnlyReason. Their example of a bad cluster is a pool named like "S2D on StorageSpacesDirect1" with OperationalStatus Read-only, HealthStatus Unknown, and IsReadOnly True. That name is their sample output, not a cluster we have in the lab.
Their table for Unknown or Unhealthy says the pool is read-only and cannot be modified until it is back out of that health state. The read-only reason Incomplete is the quorum row. Microsoft's wording: this can occur if the storage pool loses its quorum, which means that most drives in the pool have failed or are offline for some reason. When a pool loses its quorum, Storage Spaces automatically sets the pool configuration to read-only until enough drives become available again. Their quorum page is more specific about the count. Surviving drives that host metadata have to be a majority of the pool or they go offline. They describe that majority as 50% + 1. The cluster database can be the extra vote when the cluster itself still has quorum. The pool does not have dynamic quorum. "Most drives" on the states page and "50% + 1" on the quorum page are both Microsoft's. The screen in front of you is the result: writes to the pool configuration are refused.
That refusal is the protection. Pool metadata is written to each drive in the pool, which is Microsoft's own description of the layout. Stopping configuration changes keeps the remaining copies from being edited while the cluster cannot see a majority. It does not erase the slabs already on the members. Drives that only lost communication still hold what they held. Drives that truly failed media are a different row, and the pool banner does not grade the NAND for you.
Two other read-only reasons sit on the same table, and they are not this failure. Policy means an administrator set the pool read-only. For that reason, Microsoft's clustered action is Failover Cluster Manager, Pools, right-click the pool, Bring Online. Starting means Storage Spaces is starting or waiting for drives, and it is supposed to be temporary. If you did not set the pool read-only on purpose, and nodes or NVMes are still down, do not use the Policy button to clear an Incomplete pool. If the state sits on Starting, Microsoft's action is to make sure every drive is connected. Same first step. The read-write cmdlet is not the test that tells you which reason you have.
The virtual disk and the NVMe have their own lines
The pool flag and the volume are not the same object. Get-VirtualDisk reports HealthStatus, OperationalStatus, and DetachedReason. Microsoft's sample of a bad virtual disk shows Warning with operational status Degraded and Incomplete together. On that Warning / Incomplete row, their text says resilience is reduced because one or more drives failed or are missing, and the missing drives contain up-to-date copies of your data. The action is reconnect missing drives, replace failed drives, and if this is Storage Spaces Direct, bring offline servers online. Storage Spaces Direct then starts a repair on its own if it needs one. A non-S2D pool is told to run Repair-VirtualDisk only after that reconnect.
Detached with detached reason Incomplete is harsher. Microsoft says not enough drives are present to read the virtual disk. The first action is the same: reconnect missing drives and bring offline servers online. After the drives and servers are back, replace failed drives. They also write the case you do not want to discover by experimenting: if more disks failed than you have copies of your data, and the virtual disk was not repaired between failures, all data on that virtual disk is permanently lost. Their last resort in that sentence is delete the virtual disk, create a new one, and restore from backup. That sentence assumes you already know the copies are gone and that a backup exists. Deleting the virtual disk to find out is a write. Unhealthy and No Redundancy is the row that already says the virtual disk has lost data because too many drives failed, and the stated action is restore from backup.
A physical disk at Lost Communication is Microsoft's "the drive is missing" state. On Storage Spaces Direct they say that can be because a server is down. The action is bring all servers back online. If that does not fix it, reconnect or replace the drive. It is not a lab report that the NAND is blank. IO Error and Transient Error are different rows, and this is where the documented cmdlets get dangerous. If the drive does not return to OK, Microsoft's table says you can try Reset-PhysicalDisk to wipe the drive, then Repair-VirtualDisk. Split, stale metadata, and unrecognized metadata say the same class of thing: reset the drive, which erases it. Do not apply the wipe row to a set of NVMes that dropped together, and do not apply it to the ones that are still healthy so the pool "looks even."
Resiliency decides how many of those drops the virtual disk can absorb, and the pool screen does not print it unless you look. Microsoft's quorum page recommends three-way mirror or dual parity so a cluster can tolerate two node failures, and says that if more than two nodes are down — or two nodes and a disk on another node — volumes may not have access to all three copies and can go offline. A two-way mirror has a smaller budget. Mirror-accelerated parity is another layout people build. Read ResiliencySettingName if it is on screen. Do not assume "S2D" means a spare copy is still online.
The picture we are describing is several NVMe SSDs, often the same model because Microsoft tells you to build symmetrical nodes, showing Lost Communication or IO Error across nodes. That is a pattern the status names allow. It is not a case we are assigning to a firmware revision. A single disk going red in Control Panel on a desktop is the other Storage Spaces page.
Get the set evaluated before anyone clears the read-only flag. We image each NVMe write-blocked and read the pool from the copies. Free evaluation, no data, no fee.
What not to run while members are still missing
Set-StoragePool -IsReadOnly $false. The full command on Microsoft's states page is Get-StoragePool -IsPrimordial $False | Set-StoragePool -IsReadOnly $false. It is step 2, after the missing drives are reconnected and, on Storage Spaces Direct, after the servers are online. Running it while ReadOnlyReason is still Incomplete turns configuration writes back on. The pool did not go read-only because the flag was stuck. It went read-only because it could not see a quorum.
Bring Online, and "force online." In Failover Cluster Manager, Bring Online on the pool is Microsoft's documented click when the read-only reason is Policy. Bring Online on a virtual disk under Storage, Pools, Virtual Disks is their click when the detached reason is By Policy — an administrator took it offline, or manual attach is set. Neither click is the Incomplete action. Start-ClusterResource is the PowerShell form of bringing a clustered disk online. Leave both alone while NVMes or nodes are still missing.
DiskRecoveryAction. Microsoft's troubleshooting page logs this when an online attempt fails because the virtual disk is in No Redundancy: set the private property DiskRecoveryAction to 1 if you want to try to bring the disk online anyway. They then describe the property as an override that attaches the volume read-write without any checks, so you can diagnose why it did not come online or copy data off. Their own sentence says the volume or the CSV may still be unavailable. That section starts from nodes that restarted after a crash or a power loss, including a reboot during node maintenance. It is a different fault from a pool whose read-only reason is Incomplete because drives are gone. Do not paste that runbook onto this screen. Setting the value back to 0 later does not undo writes the volume made once it attached.
Set-Disk -IsReadOnly $false and Set-Disk -IsOffline $false. Those are a different object — the disk Windows mounted for the virtual disk, not the storage pool. They show up in Microsoft's Detached section, next to a full dirty-region-tracking log, and in the "drive is offline" scripts under reasons a drive cannot be pooled. Clearing them mounts the volume read-write. Do not run them to see if the CSV comes back.
Repair. Repair-VirtualDisk reconstructs from remaining copies. Microsoft says Storage Spaces Direct starts that repair on its own after you reconnect or replace a drive. Repair-ClusterStorageSpacesDirect repairs disks in the cluster; its -RecoverUnboundDrives switch is documented for disks in Lost Communication and attempts to rebind them. Optimize-StoragePool moves data. All of those write. They belong to a pool whose remaining members are known healthy and whose missing member is already identified. On a Read-only Incomplete pool you do not have that confirmation. A repair that guesses which slab is current writes the guess onto the survivors. That is the same overwrite in RAID rebuild vs. data recovery.
Delete the pool, delete the virtual disk, reset a disk. Remove-StoragePool and Delete Storage Pool tear the pool down. Microsoft's "delete the virtual disk and restore from backup" line is the permanent-loss sentence above, not a diagnostic. Reset-PhysicalDisk wipes Spaces metadata on that NVMe so Windows can treat it as an empty drive. Remove Disk retires a member and writes pool metadata. Clear-Disk deletes volumes. Disk Management offering Initialize Disk on a member it no longer understands writes a new partition table. People do these in one sitting: reset the red NVMe, initialize it, create a new pool so the cluster has a volume again.
A filesystem check on the CSV. Storage Spaces Direct volumes are often ReFS. chkdsk, Repair-Volume, and Error checking still write. ReFS integrity streams can say a copy does not match. They do not put back pool metadata, and they do not undo a repair. If the volume is already offline or raw, that is the ReFS shows RAW page. Do not run a check so the disk will leave read-only.
Pulling NVMes to test in another machine. Member identity and pool metadata live on the drives, and on Storage Spaces Direct the drive is tied to the node that owned it. Moving an NVMe to a workstation, a different node, or a different bay lets Windows offer Initialize, reset, or a new pool. Label the node and the bay before anything comes out. A drive goes back only to the slot it left.
Set-StoragePool -IsReadOnly $false, Bring Online, or DiskRecoveryAction 1 while NVMe drives or Storage Spaces Direct nodes are still missing. Do not delete the pool, reset a physical disk, start a repair, initialize a member, or flash the remaining NVMes. Those writes land on the originals. A lab cannot put back pool metadata or a slab Windows already changed.Do not flash the NVMes that are still online
Microsoft's Storage Spaces Direct troubleshooting page has a section titled for slow performance or Lost Communication, IO Error, Detached, or No Redundancy on deployments that use Intel P3x00 NVMe devices. They write that they have identified a critical issue affecting some Storage Spaces Direct users with hardware based on that family and firmware versions before "Maintenance Release 8." A note says individual OEMs may use their own firmware version strings, and to contact the OEM for the latest version. If the deployment uses that hardware, they recommend immediately applying the latest firmware, at least Maintenance Release 8.
That paragraph is Microsoft's vendor guidance. It is not a Desert Data Recovery diagnosis. We are not confirming an Intel P3x00, a firmware string, or a date on your cluster. Matching the symptom names — Lost Communication, several NVMes, a pool that will not stay up — is how people talk themselves into a firmware update. The names are shared by a dead node, a backplane, a cable, a drive that actually failed, and a firmware note Microsoft published. The states page cannot tell those apart, and neither can a screenshot.
Do not flash the remaining healthy NVMes "so they match." A firmware update writes the drive. Microsoft's drive-state table lists Updating firmware as a short state during which the other drives in the pool handle reads and writes. That sentence assumes the other drives are still in the pool and online. On a Read-only Incomplete pool they are not. In maintenance mode is the state they say is usually used before a firmware update, and it halts reads and writes to that drive. Putting the survivors into maintenance mode, or flashing them while nodes are down, takes out the copies that are still answering. If a vendor later confirms a firmware issue, that work happens on images or on replacement media, not on the only members the pool can still see.
What to do right now
Leave the read-only flag. Do not Bring Online. Do not start a repair, a reset, a firmware update, or a new pool. If a node is boot-looping or an NVMe is dropping off the bus, stop power-cycling the cluster to "let quorum form." Each boot is another partial attach.
- Save the read-only output. From an elevated PowerShell session, the states-page commands are reads:
Get-StoragePool -IsPrimordial $Falsewith HealthStatus, OperationalStatus, ReadOnlyReason, and IsReadOnly;Get-VirtualDiskwith HealthStatus, OperationalStatus, DetachedReason, and ResiliencySettingName;Get-PhysicalDiskwith HealthStatus, OperationalStatus, and the serial if it is shown. Add which cluster nodes are up. Screenshot Failover Cluster Manager for the pool and the CSVs. Copy the exact text. Do not follow it with aSet-cmdlet. - Count members against the cluster you built. Lost Communication and an offline server mean Microsoft's step 1 is not done. ReadOnlyReason still Incomplete means Windows still does not see a quorum. A drive that returned with IO Error is not a healthy member.
- Label every NVMe with node and bay before it is removed. Keep drives marked Lost Communication, Failed, Retired, or already replaced. The one the UI dropped may still hold a current copy. Microsoft's Warning / Incomplete row says the missing drives contain up-to-date copies.
- Write down the layout if you know it: two-way mirror, three-way mirror, dual parity, or mirror-accelerated parity; ReFS or NTFS; whether the volume is a CSV. If the volume was BitLocker-encrypted, bring the recovery key. We cannot brute-force BitLocker. See Windows Device Encryption / BitLocker.
If an NVMe has to be shipped, pack it like any other failed drive and keep the label with the node and bay. If the only record of which drive lived in which slot is the chassis, send the nodes. Do not open a drive. Do not leave a repair running so the cluster "finishes overnight."
How a lab handles it
We do not clear IsReadOnly on your pool. We do not Bring Online, set DiskRecoveryAction, run Repair-VirtualDisk or Repair-ClusterStorageSpacesDirect, reset a physical disk, or flash firmware on the patient NVMes.
Each member is imaged write-blocked, including an NVMe that only reads in pieces and an NVMe the pool already marked Lost Communication or Failed. Pool metadata and the virtual-disk layout are read from those images. The NTFS or ReFS volume is taken off the copy. A wrong guess about which node owned which slab costs a clone, not the original. Imaging uses the lab tools already named on this site, including the ACE Lab PC-3000 and DeepSpar Disk Imager. Those tools image the drives. They are not a second cluster.
The public case log does not have a Storage Spaces Direct job. We will not invent one. The published NVMe case is a two-bay USB RAID 0, DDR-2026-0014, not a failover cluster. The closest server case is 21607, an HPE SmartArray where nothing was rebuilt on the controller. A Synology RAID 5 (DDR-2026-0003) is a different stack again. We don't advertise a success rate. The free evaluation is how you find out which row of Microsoft's table you are actually on.
If the pool is a single PC or a non-clustered server, start with don't delete the pool. If the prompt is Force Online on a RAID card after a power cut, start with don't force the array online. If someone already wants to repair from the survivors, start with RAID rebuild vs. data recovery. For the work itself, see RAID data recovery.
Storage Spaces Direct read-only pool FAQ
The pool says Read-only and Incomplete. Does that mean the files were erased?
Microsoft's page says to run Set-StoragePool -IsReadOnly $false. Why leave it alone?
Get-StoragePool -IsPrimordial $False | Set-StoragePool -IsReadOnly $false is the second step, after enough drives are back. Running it while nodes or NVMes are still missing re-opens writes on a pool that still cannot see a quorum. The cmdlet does not create the missing members. If ReadOnlyReason is still Incomplete, step 1 is not finished.The cluster log says to set DiskRecoveryAction to 1 and bring the disk online. Is that the fix?
DiskRecoveryAction as an override that attaches the volume read-write without checks. Their log text says the volume or CSV may still be unavailable even if the online succeeds. Do not set that property, and do not Start-ClusterResource or Bring Online, while drives or nodes are still missing. The same page's Detached runbook assumes the physical disks are Healthy and the dirty-region log is full. That is not several NVMes in Lost Communication.Should I flash the remaining healthy NVMes so the firmware matches, including Intel P3x00 Maintenance Release 8?
Is this the same problem as a Storage Spaces pool on a desktop or a single server?
Set-StoragePool -IsReadOnly $false, DiskRecoveryAction, and Repair-ClusterStorageSpacesDirect. A shared-JBOD clustered pool that is not Storage Spaces Direct uses the same health table. A Windows PC that only shows Storage Spaces in Control Panel is the other page.Is this the same failure as a RAID controller Force Online after the battery dies?
DiskRecoveryAction are the cluster prompts. They are not the controller button. Repair versus recovery is the general argument: a repair writes reconstructed data. On Storage Spaces Direct, Microsoft says a repair can start on its own after drives are reconnected. Do not start one while you do not know which layer failed.I already cleared read-only, brought a disk online, or reset a drive. Is it too late?
Set-StoragePool, no repair, no firmware update, no new pool, no Initialize Disk. A Reset-PhysicalDisk that finished and a Bring Online you cancelled are different jobs. Bring every NVMe, including ones marked Lost Communication or Failed, and label which node and bay each one left. We image first and tell you what is left. We will not guess from a screenshot which click already committed.Is there a Storage Spaces Direct case in the public log?
Not sure whether the NVMes are missing or the virtual disk is already past its copies? Find out before anyone forces the pool read-write. Start with a free evaluation.
Request free evaluation →Free evaluation · No data, no fee · Talk directly with a technician.