Removing/Replacing a Physical Disk from Windows 2012 Essentials / Windows 8 Storage Spaces

Removing a physical disk from Windows 2012 Essentials / Windows 8 Storage Spaces:

Microsoft has yet to write a fancy GUI button-clickable tool to do this job for us, as there was previously in Windows Home Server. Why this is… who knows – its really the only major downfall to Storage Spaces I’ve run across in the 8 months I have been using it.

Google searches tend to lend toward the “Accepted” method of replacing/removing a drive from the Storage Spaces array is to remove it, and repair your Virtual Disks. Granted, the whole point to resiliency in storage arrays is to be able to recover from a failure, I don’t feel that intentionally placing my storage array in a compromised position¬† is a reasonable method.

First – I think this should go without saying, but backup your data. This shouldn’t just apply with messing around with your drives, but always. Multiple failures can occur – I’ve seen it more than once on traditional RAIDs. Backup your data – BE WARNED! I have all of my storage space data backed up (via rsync) to a secondary NAS, so I’m not just spewing crap I don’t follow myself.

Anyway… In my example, all of my storage spaces contain some sort of resiliency, either parity or mirror. I have NOT attempted to complete this procedure with a non-resilient Virtual Disk. I’m not saying it won’t work, I just don’t know it will.

Basically, the process is to set the disk to be removed as “retired”, migrate the data off of it, and remove it from the storage pool.

To figure out the names of the disk, you can use the Windows PowerShell command Get-PhysicalDisk. This will output the list of drives attached to your storage spaces. I’ll be removing an old 2TB drive, named ST2000DL003–C to make room for a larger drive.

Now, use the PowerShell command (you’ll need to be running PowerShell as an administrator) to mark the disk as retired:

Set-PhysicalDisk -FriendlyName ‘ST2000DL003–C’ -Usage Retired

Windows will chug for a few seconds, and you’ll see the drive marked as retired in the Storage Spaces control panel.


Now, we’ll need to repair the Virtual Disks (IE “move” the data on the retired disk elsewhere on the storage pool. We’ll need to know what Windows calls our Virtual disks, and we can figure that out with the PowerShell command Get-VirtualDisk. Next, we’ll issue the repair command for ach Virtual Disk within this Storage Space.

Repair-VirtualDisk -FriendlyName ‘DomainData’

Repair-VirtualDisk -FriendlyName ‘ServerData’


The jobs are queued, so only one runs at a time.

You can check on the progress of the data copy by watching the blinkie lights on your NAS, the PowerShell command Get-StorageJob, or within the Storage Spaces GUI:


Personally? Blinkie lights…

Depending on the speed, and consumed data size of the drive you’re removing, this is going to take a while. Windows was reading the drive I was removing while it was repairing, so I can only assume it was actively moving the data from it, rather than simply breaking the array, and fixing it. The Storage Spaces GUI never indicated a degraded state, and I wasn’t about to pull a second drive to find out – so your guess is as good as mine.

My Virtual Disks remained online, and accessible while my repair process was ongoing. It felt a bit sluggish, but worked.

Once all of your “repair” jobs are complete, you can remove the drive from the Storage Space, either through the GUI (2012 Essentials), or with the PowerShell command:

Remove-PhysicalDisk -FriendlyName ‘ST2000DL003–C’

You should now be able to pop the drive out of the NAS, and replace it with a larger/working drive, and add it to your Storage Pool.



5 thoughts on “Removing/Replacing a Physical Disk from Windows 2012 Essentials / Windows 8 Storage Spaces

    1. Can’t say that I have tried. One of the main reasons Storage Spaces is an attractive solution to me is the efficient resiliency – all of my spaces are either parity, or two-way-mirror.

      Next time I’m upgrading a drive, I will create a simple space, and test.

    2. I’ve been trying to remove a drive from my pool that is mostly “simple” virtualdrives without luck. I have 6 2tb drives (used: 99.3%, 99.2%, 90.3%, 61.7%, 61.8%, 0.08%). I have 9 virtualdrives (all Simple). I want to remove the 61.7% drive, so I added a new 2tb drive (0.08% filled now). Marked 61.7% as retired, ran the “virtualdrive” repairs for the hell of it (they all executed immediately), went to storage spaces and clicked remove drive and get the error “Can’t remove the drive from the pool” because “not all data could be reallocated”. I’m using 7.5TB of 10.9TB total (ie if I remove one of the 2TB I’d had 9.1TB total… so it should be adequate).

  1. You cannot remove a physical disk from a Storage Spaces pool if it contains a simple virtual disk. The simple disk stripes data across each drive, and there’s no mechanism to copy the data to a replacement drive before removing the old one. It’s recommended to use simple disks only to store volatile data, such as for a scratch disk or temp data. If a single physical disk fails, you lose the entire simple virtual disk.

  2. I have 2 1TB disks in thin 2-way mirror. So I have 930GB usable storage. I have about 780GB used. 1 disk is making an awkward noice.(but is still healthy).
    I want to replace it with a new disk. I don’t have an additional free SATA port to add a new disk in advance.
    Can I just ‘remove’ the disk(click on remove under physical disks in Win2012R2 essentials), shut down the server, replace the disk with a new empty disk and start the server. Where the server rebuilds my mirroring on the new disk?
    (I mean, can i skip the retire and repair steps since I don’t have enough disk space the backup the data on the disk I want to remove)

    Thanks in advance for any help

Leave a Reply to wighty Cancel reply

Your email address will not be published. Required fields are marked *

+ 5 = seven

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>