windows-powershell-docs icon indicating copy to clipboard operation
windows-powershell-docs copied to clipboard

NumberOfColumns for New-VirtualDisk with tiering

Open i3v opened this issue 2 years ago • 2 comments

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.

i3v avatar Jul 10 '22 19:07 i3v

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").

i3v avatar Nov 06 '22 05:11 i3v

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:

Image showing a dialog asking if the article was helpful with yes and no answers.

Then, choose at least one reason for your feedback and optionally provide additional details about your feedback:

Article was helpful Article was unhelpful
Image showing a dialog asking how the article was helpful with several options. Image showing a dialog asking how the article wasn't helpful with several options.

Finally, select Submit and you're done!

officedocspr5 avatar Dec 08 '23 03:12 officedocspr5