windows-powershell-docs
windows-powershell-docs copied to clipboard
NumberOfColumns for New-VirtualDisk with tiering
The NumberOfColumns
parameter is poorly documented. Especially, when it comes to the tiered storage space.
-
Both
New-VirtualDisk
andNew-StorageTier
allow to specify this parameter, but the current documentation does not provide any guidance on how to choose them, and which combinations of values are possible/recommended.It would be nice to document down that
New-VirtualDisk
would only accept-StorageTiers
that have equalNumberOfColumns
, otherwise, it would just return generic "Not Supported" error (see below). This limitation is mentioned in this Dell doc:For a VD that uses storage tiers, the column count of the SSD tier and HDD tier must be identical.
, but I think it would make sense to mention this limitation in the
NumberOfColumns
parameter description in theNew-VirtualDisk
article. -
Assume that we would like to use 3 SSD and 2 HDD drives in a Simple tiered Storage Space. How many columns can we set? I found no doc explaining that.
-
The most relevant doc I found says that there should be a "1:1" "Column-to-disk correlation". Which sounds like 3 for SSD tier and 2 for HDD tier. However, this does not work.
-
After few more googling, it is not difficult to find that actually the recommended number of disks is a multiple of a number or columns e.g. from this Dell doc:
Dell recommends when expanding a storage pool to add physical disks in a quantity equal to the column count multiplied by the number of data copies plus any additional disks required for automatic rebuilds.
. This looks like we one option - to use 1 column. Some additional performance considerations are nicely explained here.
-
However, just be experiment (see below), it turns out that it is possible to create an SSD Tier with 2 columns and 3 SSD drives. I found no docs that mention such a possibility (and no document that explains the actual data layout in this case). It might make sense, because Simple spaces should not suffer from the "symmetry" limitations that are natural for Parity and Mirror spaces. However, it would be nice to explicitly document this somehow (e.g. in the
New-VirtualDisk
cmdlet documentation). For now, I'm not even sure if "2 columns on 3 disks" is a supported case (or is it just a bug that I was able to even create such a tier).
UPD: or, afaiu, it implicitly silently creates 2-column HDD and 3-column SSD tiers:PS C:\> Get-StorageTier | Select FriendlyName, TierClass, MediaType, ResiliencySettingName, Size, FootprintOnPool, StorageEfficiency, NumberOfColumns, ColumnIsolation FriendlyName : DataStoreVDisk1-HDDTier TierClass : Capacity MediaType : HDD ResiliencySettingName : Simple Size : 19994146504704 FootprintOnPool : 19994146504704 StorageEfficiency : NumberOfColumns : 2 ColumnIsolation : PhysicalDisk FriendlyName : HDDTier TierClass : Unknown MediaType : HDD ResiliencySettingName : Simple Size : 0 FootprintOnPool : 0 StorageEfficiency : NumberOfColumns : 2 ColumnIsolation : PhysicalDisk FriendlyName : SSDTier TierClass : Unknown MediaType : SSD ResiliencySettingName : Simple Size : 0 FootprintOnPool : 0 StorageEfficiency : NumberOfColumns : 2 ColumnIsolation : PhysicalDisk FriendlyName : DataStoreVDisk1-SSDTier TierClass : Performance MediaType : SSD ResiliencySettingName : Simple Size : 5989868765184 FootprintOnPool : 5989868765184 StorageEfficiency : NumberOfColumns : 3 ColumnIsolation : PhysicalDisk
-
-
BTW, similar question arises for the
Interleave
parameter - the docs do not mention if it should be the same for all the tiers used by a VirtualDisk or not (one may think that it would be a good idea to achieve the same stripe size for both tiers). -
BTW, it might be a good idea to document down the heat map cell size (is it filesystem cluster size? is it Interleave size? is it stripe size?). How much space does it take in the pool (and thus, how much should I substract from the
TierSizeMax
to account for that)?
The experiment:
PS C:\temp> $StoragePoolName = "DataStorePool1"
PS C:\temp> $VDiskName = "DataStoreVDisk1"
PS C:\temp> $ResiliencySetting = "Simple"
PS C:\temp> $SSDTierName = "SSDTier"
PS C:\temp> $HDDTierName = "HDDTier"
PS C:\temp> $PhysicalDisks
Number FriendlyName SerialNumber MediaType CanPool OperationalStatus HealthStatus Usage Size
------ ------------ ------------ --------- ------- ----------------- ------------ ----- ----
7 NVMe Samsung SSD 970 0066_385A_01B2_1E0A. SSD True OK Healthy Auto-Select 1.82 TB
10 NVMe Samsung SSD 970 0088_385A_01B2_1E13. SSD True OK Healthy Auto-Select 1.82 TB
1 ATA WDC WD100PURZ-85 7PKTTGNC HDD True OK Healthy Auto-Select 9.1 TB
0 ATA WDC WD100PURZ-85 7JGXXJ8C HDD True OK Healthy Auto-Select 9.1 TB
8 NVMe Samsung SSD 970 0025_377A_01B2_1E02. SSD True OK Healthy Auto-Select 1.82 TB
PS C:\temp> $SubSysName = (Get-StorageSubSystem).FriendlyName
PS C:\temp> New-StoragePool -PhysicalDisks $PhysicalDisks -StorageSubSystemFriendlyName $SubSysName -FriendlyName $StoragePoolName
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly Size AllocatedSize
------------ ----------------- ------------ ------------ ---------- ---- -------------
DataStorePool1 OK Healthy False False 23.65 TB 1.25GB
PS C:\temp> #View the disks in the Storage Pool just created
PS C:\temp> Get-StoragePool -FriendlyName $StoragePoolName | Get-PhysicalDisk | Select FriendlyName, MediaType
FriendlyName MediaType
------------ ---------
NVMe Samsung SSD 970 SSD
NVMe Samsung SSD 970 SSD
ATA WDC WD100PURZ-85 HDD
ATA WDC WD100PURZ-85 HDD
NVMe Samsung SSD 970 SSD
PS C:\temp> $SSDTier = New-StorageTier -StoragePoolFriendlyName $StoragePoolName -FriendlyName $SSDTierName -MediaType SSD -NumberOfColumns 3 -ResiliencySettingName $ResiliencySetting # default interleave
PS C:\temp> $SSDTier
FriendlyName TierClass MediaType ResiliencySettingName FaultDomainRedundancy Size FootprintOnPool StorageEfficiency
------------ --------- --------- --------------------- --------------------- ---- --------------- -----------------
SSDTier Unknown SSD Simple 0 0 B 0B
PS C:\temp> $HDDTier = New-StorageTier -StoragePoolFriendlyName $StoragePoolName -FriendlyName $HDDTierName -MediaType HDD -NumberOfColumns 2 -ResiliencySettingName $ResiliencySetting # default interleave
PS C:\temp> $SSDTierSizes = (Get-StorageTierSupportedSize -FriendlyName $SSDTierName -ResiliencySettingName $ResiliencySetting).TierSizeMax
PS C:\temp> $HDDTierSizes = (Get-StorageTierSupportedSize -FriendlyName $HDDTierName -ResiliencySettingName $ResiliencySetting).TierSizeMax
PS C:\temp> New-VirtualDisk -StoragePoolFriendlyName $StoragePoolName -FriendlyName $VDiskName -StorageTiers $SSDTier, $HDDTier -StorageTierSizes @(($SSDTierSizes-48GB), ($HDDTierSizes-40GB)) -WriteCacheSize (1GB) -ProvisioningType Fixed
New-VirtualDisk : Not Supported
Extended information:
The storage pool does not have sufficient eligible resources for the creation of the specified virtual disk.
Recommended Actions:
- Choose a combination of FaultDomainAwareness and NumberOfDataCopies (or PhysicalDiskRedundancy) supported by the storage pool.
- Choose a value for NumberOfColumns that is less than or equal to the number of physical disks in the storage fault domain selected for the virtual
disk.
Activity ID: {3215d574-93df-003f-8bd6-1532df93d801}
At line:1 char:1
+ New-VirtualDisk -StoragePoolFriendlyName $StoragePoolName -FriendlyNa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (StorageWMI:ROOT/Microsoft/...SFT_StoragePool) [New-VirtualDisk], CimException
+ FullyQualifiedErrorId : StorageWMI 1,New-VirtualDisk
PS C:\temp> Remove-StorageTier -FriendlyName $SSDTierName
Confirm
Are you sure you want to perform this action?
This will remove the StorageTier "SSDTier".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
PS C:\temp> $SSDTier = New-StorageTier -StoragePoolFriendlyName $StoragePoolName -FriendlyName $SSDTierName -MediaType SSD -NumberOfColumns 2 -ResiliencySettingName $ResiliencySetting # default interleave
PS C:\temp> $SSDTierSizes = (Get-StorageTierSupportedSize -FriendlyName $SSDTierName -ResiliencySettingName $ResiliencySetting).TierSizeMax
PS C:\temp> New-VirtualDisk -StoragePoolFriendlyName $StoragePoolName -FriendlyName $VDiskName -StorageTiers $SSDTier, $HDDTier -StorageTierSizes @(($SSDTierSizes-48GB), ($HDDTierSizes-40GB)) -WriteCacheSize (1GB) -ProvisioningType Fixed -NumberOfDataCopies 1
FriendlyName ResiliencySettingName FaultDomainRedundancy OperationalStatus HealthStatus Size FootprintOnPool StorageEfficiency
------------ --------------------- --------------------- ----------------- ------------ ---- --------------- -----------------
DataStoreVDisk1 OK Healthy 23.56 TB 23.56 TB 99.99%
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.
- ID: 071dc6e7-e380-1015-6d32-83edc1f529c8
- Version Independent ID: d2de71c0-90d0-1b25-7412-2a4ab53cdc99
- Content: New-VirtualDisk (Storage)
- Content Source: docset/winserver2019-ps/storage/New-VirtualDisk.md
- Product: w10
- Technology: windows
- GitHub Login: @JasonGerend
- Microsoft Alias: jgerend
BTW, here's a nice article, explaining how Slabs work in "Storage Spaces Direct". Maybe some its parts could be re-used in official docs here to add some context. (I'm not sure what could be reused, actually - I've heard that "Storage Spaces Direct" is implemented quite differently from "Storage Spaces").
To make it easier for you to submit feedback on articles on learn.microsoft.com, we're transitioning our feedback system from GitHub Issues to a new experience.
As part of the transition, this GitHub Issue will be moved to a private repository. We're moving Issues to another repository so we can continue working on Issues that were open at the time of the transition. When this Issue is moved, you'll no longer be able to access it.
If you want to provide additional information before this Issue is moved, please update this Issue before December 15th, 2023.
With the new experience, you no longer need to sign in to GitHub to enter and submit your feedback. Instead, you can choose directly on each article's page whether the article was helpful. Then you can then choose one or more reasons for your feedback and optionally provide additional context before you select Submit.
Here's what the new experience looks like.
Note: The new experience is being rolled out across learn.microsoft.com in phases. If you don't see the new experience on an article, please check back later.
First, select whether the article was helpful:
Then, choose at least one reason for your feedback and optionally provide additional details about your feedback:
Article was helpful | Article was unhelpful |
---|---|
![]() |
![]() |
Finally, select Submit and you're done!