Skip to content

NumberOfColumns for New-VirtualDisk with tiering #3028

Open
@i3v

Description

@i3v

The NumberOfColumns parameter is poorly documented. Especially, when it comes to the tiered storage space.

  • Both New-VirtualDisk and New-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 equal NumberOfColumns, 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 the New-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.

Metadata

Metadata

Assignees

Labels

area-storageIssues for storage moduledoc-enhancementSuggested additions/improvements to the article, but there is no evidence the customer was blocked.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions