If I have two physical hard drives in a Storage Spaces pool and a 2-way mirrored virtual disk on them, how can I replace one HDD with a new (larger) one, without at any point having only a single copy of data?

A naive plan would be:

Starting point: two drives: hd0 and hd1

  • add new HDD (hd2)
  • copy data from either old HDD to hd2
  • remove hd0
  • optional cleanup
  • result: hd1 and hd2 have mirrored data

But Storage Spaces seem to work in other direction:

  • add new HDD (hd2)
  • remove hd0 from mirror (or entire pool actually)
  • at this point there is no more redundancy, if hd1 fails, the volume is lost
  • copy data from hd1 HDD to hd2 (rebuild/repair)
  • result: hd1 and hd2 have mirrored data

Is there a way to do this without having at any point only one copy of data? (besides the obvious "backup and restore", which I expect to be much slower than a single copy operation between hard drives)

OS: Windows 2012R2

  • are the hd1 and hd2 same capacity? Why do you think that backups will take more time than simple copy? What if something happened with the entire SATA/SAS controller? In any case, make a backup (you are not forced to use them, but just to keep your data safe). The easiest way will be adding a new disk to Storage Pool and then removing the old one and let storage space make a rebuild. – Strepsils Apr 8 at 7:46
  • hd2 is bigger. Backup + restore > one copy. Same as if it happened before the operation in question. I already have backup. That is exactly what I described in the question. – David Balažic Apr 8 at 11:39
  • Additionally to the first comment: Storage Spaces FAQ - How do I replace a physical disk? – Freddy Apr 8 at 13:06


Apparently not. When the repair/rebuild is started, Storage Spaces "disconnects" the old drive from the mirror and keeps only one copy (on hd1) and start copying it to the new drive. So if hd1 fails before the rebuild is finished, the array is lost.


  • use an independent backup and restore from it in case of disk failure
  • use another partition on the new disk as an "online" backup
  • as the data is physically still on hd0, try to rescue them using some "undelete" tool (as it is ReFS on a Storage Spaces virtual disk, the chances are quite low, at least now in 2019, as those are not widely supported by 3rd party tools)
  • some other solution?


There does not seem (or I could not find one) to be a way to migrate a Mirror volume to a new physical disk in Storage Spaces that would keep it redundant and online in case the remaining old disk dies before the rebuild to the new disk is finished.

After inserting the new disk (using the names from a test system : PhysicalDisk1 old disk that will be replaced, PhysicalDisk2 old disk that should remain, PhysicalDisk5 new disk) the state is:

PS C:\Users\Administrator> Set-PhysicalDisk -FriendlyName "PhysicalDisk1" -Usage Retired
PS C:\Users\Administrator> Get-VirtualDisk -FriendlyName mirr | Get-PhysicalDisk

FriendlyName                      CanPool                           OperationalStatus                HealthStatus                     Usage                                                        Size
------------                      -------                           -----------------                ------------                     -----                                                        ----
PhysicalDisk1                     False                             OK                               Healthy                          Retired                                                 899.25 GB
PhysicalDisk2                     False                             OK                               Healthy                          Auto-Select                                               1.46 TB

Then the moment the repair is started, the situation changes to:

Repair-VirtualDisk -FriendlyName mirr
PS C:\Users\Administrator> Get-VirtualDisk -FriendlyName mirr | Get-PhysicalDisk

FriendlyName                      CanPool                           OperationalStatus                HealthStatus                     Usage                                                        Size
------------                      -------                           -----------------                ------------                     -----                                                        ----
PhysicalDisk2                     False                             OK                               Healthy                          Auto-Select                                               1.46 TB
PhysicalDisk5                     False                             OK                               Healthy                          Auto-Select                                               1.76 TB

So if now PhysicalDisk2 fails, the mirror is lost (PhysicalDisk1 is retired, PhysicalDisk2 is lost, PhysicalDisk5 does not have yet the complete copy of data).

Un-retireing PhysicalDisk1 does not help.

The quickest way seems to be to first to create a new "backup" (Simple) volume on the new HDD, copy data from the mirror to it, the start the mirror migration and if things fail, there is still a copy available (then PhysicalDisk1 can be un-retired and a new create a new Mirror created on PhysicalDisk1 and PhysicalDisk5).


I feel like I'm either missing something here or you're overthinking this. If you have a mirror, both disks are identical. Presuming you are doing a disk replacement of a good disk, you have 2 copies.

Pull out a good copy, install a blank hard disk, rebuild onto the new disk. This would be the same as simulating disk failure. The array will not go offline when you remove a disk, only a disk will go offline. In the event you have an issue with the rebuild, you could reinsert the other, original disk, then use your other new disk to clone that disk.

  • That would work only if there are originally exactly two drives in the pool and if all other disks are removed, system powered off and then the old (and only that) disk is returned. Otherwise the problem I described in my answer occurs: once a disk is removed, there is no (known) way to return it to working state. In the special case with only two drives, it works thanks to the "trick" that all traces of the new setup are removed. If not (the new drive is left attached), then Windows will not re-use the old drive! Quite risky. Maybe usable as an additional backup that MAY work in case of fail – David Balažic Apr 29 at 21:21
  • I'll play with that in the Storage spaces app, but you might just be overthinking that. I have done the following several times: Server has a hardware RAID 5 (say 3x100g SATA) and empty bays. Plug in 3x500g SAS 15k, make new RAID 5 on the controller. Go in storage spaces and make series of mirrors (C partition, D partition, etc) wait. Come back later, start up MSCONFIG, set to secondary plex. Shut down box, pull out old RAID 5, boot up on new array, kill all mirrors, reboot cleanly and set secondary drive letters. Storage spaces should be no different in your scenario. – thelanranger Apr 30 at 0:05
  • Ah, so you never tried it. That explains a lot. First, C: can not be put on Storage Spaces. – David Balažic Apr 30 at 19:13
  • I have used Storage Spaces, just not your scenario. But yes, you cannot put boot in storage spaces. That's not what it is for. I will start commenting this all over the place when my reputation is high enough but Storage Spaces is really not designed for "Software RAID". If you play with it, it is EXTREMELY slow for something like a RAID 5 in a single computer. This is a better job for ZFS/hardware. Storage Spaces is really made to replicate VMs across multiple arrays across multiple systems across multiple geolocations. The resiliency seems more focused on replication than 'RAID'. – thelanranger May 2 at 21:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.