Recovering from Failed Disks in Tiered Storage Spaces on Windows 10 via PowerShell
I have a Windows 10 workstation at home which has a tiered storage space with 2 SSD and 6 HDD. I have a mirrored virtual disk using both tiers and I use this for regular storage, file sharing, and running my virtual machines.
A tiered storage space is one that mixes a "fast" set of SSD and a "slow" set of spinning disks to create a storage space that is both big _and_ fast. If you are unfamiliar with Tiered Storage Spaces, here are a couple of great blog posts here and here on the topic.
I had originally created this storage space when I was running Windows 2012R2 with the GUI, but even though there is no GUI (and it’s not supported) the tiered storage space works like a champ on Windows 10. While tiered storage spaces are not supported on Windows 10 (seriously, tiered spaces are intended for server only) all the commands below are the same across the client and server OS.
Due to some constraints during the initial build process ended up with a mismatched (size-wise) SSDs in the fast tier. I found another of my “small” SSDs on sale and I wanted to recover my “big” SSD for repurposing.
The task in front of me was simple, swap the disks. I was out of SATA ports on my system so I made the foolhardy move of simply unplugging the SSDtobeReplaced and plugging in the new SSD. Naturally this caused my mirrored storage space to go into a “degraded” state.
- Note: The MSFT documentation on storage spaces is _very_ clear. DON’T DO THIS IF AT ALL POSSIBLE. We really, really, really want to have the new disk in place before removing the old one.
As I started doing some research on how to fix my mess, I found some good documents on how to repair a tiered storage space using the GUI. Only problem was that I had no GUI to do this as I am running a client OS now. I could have rebuilt my machine as a server OS and fixed the space that way, but I thought I’d see what PowerShell could do.
It turns out that Windows 10 PowerShell includes all the storage space commands needed to create, modify, and manage a tiered storage space. This was good news, except that there was little to no documentation on _how_ to actually do the repair. Initially I tried adding the drive to the pool as normal with the “add-physicadisk” command.
PS C:\WINDOWS\system32> get-virtualdisk
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
NTFS Mirror Degraded Warning False 5.68 TB
PS C:\WINDOWS\system32> Get-PhysicalDisk
FriendlyName SerialNumber CanPool OperationalStatus HealthStatus Usage Size
------------ ------------ ------- ----------------- ------------ ----- ----
ATA Samsung SSD 840 S1DBNSAF925671Y True OK Healthy Auto-Select 232.89 GB
Disk1 WD-WMAZA3795023 False OK Healthy Auto-Select 1.82 TB
Disk2 WD-WCAZA5713932 False OK Healthy Auto-Select 1.82 TB
SSD3 False Lost Communication Warning Auto-Select 446.5 GB
Disk3 WD-WCAVY5436882 False OK Healthy Auto-Select 1.82 TB
Disk4 WD-WCAZA5724921 False OK Healthy Auto-Select 1.82 TB
Disk5 WD-WCAVY5805593 False OK Healthy Auto-Select 1.82 TB
Disk6 WD-WMAZA3791851 False OK Healthy Auto-Select 1.82 TB
SSD2 S1DBNSCF810110W False OK Healthy Auto-Select 232.25 GB
Samsung SSD 840 EVO 250GB S1DBNSAF925533D False OK Healthy Auto-Select 232.89 GB
PS C:\WINDOWS\system32> $SSD3 = Get-PhysicalDisk -SerialNumber S1DBNSAF925671Y
PS C:\WINDOWS\system32> Add-PhysicalDisk -StoragePoolFriendlyName pool1 -Usage HotSpare -PhysicalDisks $SSD3
PS C:\WINDOWS\system32> Repair-VirtualDisk -FriendlyName ntfs
PS C:\WINDOWS\system32> Get-StorageJob
Name ElapsedTime JobState PercentComplete IsBackgroundTask
---- ----------- -------- --------------- ----------------
Repair 00:00:00 Completed 100 False
I thought that it was odd that the repair job finished so quickly. Sure enough the virtual disk was still in degraded state.
PS C:\WINDOWS\system32> get-virtualdisk
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
NTFS Mirror Degraded Warning False 5.68 TB
I tried to think about what might have gone wrong with the repair and started looking at the details of the physical disk when I noticed that the media type of my SSD was listed as “unspecified”
PS C:\WINDOWS\system32> Get-PhysicalDisk -SerialNumber S1DBNSAF925671Y|fl
ObjectId : {1}\\NOTJJSB\root/Microsoft/Windows/Storage/Providers_v2\SPACES_PhysicalDisk.ObjectI
d="{4f1a0953-5b0d-11e4-95d2-806e6f6e6963}:PD:{47abc017-9860-11e5-963d-00224d9ad22b}"
PassThroughClass :
PassThroughIds :
PassThroughNamespace :
PassThroughServer :
UniqueId : 0050430000000003
Description :
FriendlyName : ATA Samsung SSD 840
HealthStatus : Healthy
Manufacturer : ATA
Model : Samsung SSD 840
OperationalStatus : OK
PhysicalLocation :
SerialNumber : S1DBNSAF925671Y
AllocatedSize : 268435456
BusType : RAID
CannotPoolReason : In a Pool
CanPool : False
DeviceId : 8
EnclosureNumber :
FirmwareVersion : EXT0
IsIndicationEnabled :
IsPartial : False
LogicalSectorSize : 512
MediaType : Unspecified
OtherCannotPoolReasonDescription :
PartNumber :
PhysicalSectorSize : 512
Size : 249376538624
SlotNumber :
SoftwareVersion :
SpindleSpeed : Unknown
SupportedUsages : {Auto-Select, Manual-Select, Hot Spare, Retired...}
UniqueIdFormat : EUI64
Usage : Hot Spare
PSComputerName :
ClassName : MSFT_PhysicalDisk
This means that the storage pool had no idea this was an SSD (even though it was in the name) and so it didn’t know to use it to replace the failed drive in the SSD_Tier. “Easy Peasy” I heard myself mutter and I manually set the media type to SSD and re-tried the repair job.
PS C:\WINDOWS\system32> Get-PhysicalDisk -SerialNumber S1DBNSAF925671Y|Set-PhysicalDisk -MediaType SSD
PS C:\WINDOWS\system32> Repair-VirtualDisk -FriendlyName ntfs
PS C:\WINDOWS\system32> Get-StorageJob
Name ElapsedTime JobState PercentComplete IsBackgroundTask
---- ----------- -------- --------------- ----------------
Repair 00:00:00 Completed 100 False
PS C:\WINDOWS\system32> get-virtualdisk
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
NTFS Mirror Degraded Warning False 5.68 TB
BLERG!! Still no joy on the repair job. I was scratching my head and searching around when I came across a blog post by MVP Charbel Nemnom about how to replace a faulty disk in a two-way tiered storage space.
I looked at the commands Charbel used and noticed the only difference between what he had done and my failed attempt was I specified “hotspare” as my usage type. I flipped the usage type to “autoselect” and re-ran the repair job.
PS C:\WINDOWS\system32> Get-PhysicalDisk -SerialNumber S1DBNSAF925671Y|Set-PhysicalDisk -Usage AutoSelect
PS C:\WINDOWS\system32> Repair-VirtualDisk -FriendlyName ntfs -AsJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
183 CimJob90 CimJob Running True NOTJJSB Repair-VirtualDisk -Fr...
And sure enough, it was WORKING!
PS C:\WINDOWS\system32> Get-StorageJob
Name ElapsedTime JobState PercentComplete IsBackgroundTask
---- ----------- -------- --------------- ----------------
Repair 00:10:48 Running 65 False
Regeneration 00:10:49 Running 66 True
After about 30 minutes of repair (boy are SSDs _fast_), I removed the “failed” SSD and had a healthy virtual disk again. J
PS C:\WINDOWS\system32> $BadSSD = Get-PhysicalDisk -FriendlyName SSD3
PS C:\WINDOWS\system32> Remove-PhysicalDisk -StoragePoolFriendlyName pool1 -PhysicalDisks $BadSSD
I learned several lessons with this exercise.
Don’t make the choice of just unplugging an existing drive and swapping in a new one if possible. – The MSFT documents are very clear on this point. Add the new drive first if possible
If I don’t have an existing hot-spare disk when a drive actually does go bad, I have to add that disk as “autoselect”
Try to read the official MSFT documentation better – the need to use “autoselect” is actually spelled out here. J
Thanks for reading and enjoy tiered storage spaces!
JJ Streicher-Bremer