Cluster aggregated view in Windows Server 2012 R2 Storage Provider for an asymmetric storage configuration

Blog written by Sripresanna in the Storage, Network & Print Team.


Cluster aggregated view for Windows Storage Provider (Asymmetric storage configuration)


This is a continuation of previous blog, where I explained cluster aggregated view for Windows Storage Provider for symmetric storage configuration. We strongly encourage to use Symmetric storage configuration and this blog is just to illustrate how cluster aggregate feature (in Windows Server 2012 R2) will work for an Asymmetric storage configuration.

Consider the asymmetric storage configuration in the below cluster:



The cluster aggregated view for storage objects works the same way for symmetric and asymmetric storage (not fully shared storage across all cluster nodes) configurations. The two differences for asymmetric storage is that:

  1. All SAS based physical disks are shown in the cluster aggregated view though not all of them can be part of the same concrete storage pool, since there isn’t a common node where all are connected.
  • For example, if a SAS physical disk PD4 is connected only to cluster node N3, is not an OS disk, (what other criteria – size, no partitions) cluster UI will not show this disk as it cannot be added to the cluster (since it is not shared with any of the other cluster nodes). But the aggregated view (Get-PhysicalDisk) will show this disk.
  • This is because we cannot detect if the drive is truly intended to be connected just to that node or if the link from the drive to another cluster node is intermittently down.
  • The primordial pool of the cluster subsystem contains the aggregated set of drives with “CanPool” equals “true”. But creating a concrete pool from this may fail if just this criteria was used to pick the drives. Note that concrete pools can be formed only with drives that are
  • Physically connected to a given set of nodes.
  • All within the same storage subsystem

The cluster primordial pool will contain these Physical disks – {P1, P2, P3, P4}. To create a concrete pool on the cluster, the StorageNode  PhysicalDisk association should be used to determine the set of disks that are physically attached to a set of nodes (and CanPool = true) and then form the concrete pool with those Physical Disks. In this case such valid sets would be (Sample script in the last section )

N1-N2-N3/N1-N2/N2-N3/N1-N3/N1: {PD1, PD3}

N2: {PD1, PD2, PD3}, {PD1, PD2}, {PD2, PD3}, {PD1, PD3}, {PD1}, {PD2}, {PD3}

N3: {PD1, PD3, PD4}, {PD1, PD3}, {PD3, PD4}, {PD1, PD4}, {PD1}, {PD3}, {PD4}  

Here’s the asymmetric storage cluster which will be used to walkthrough the below workflow.



Two Storage Subsystems


This also has the local and cluster storage subsystems



PowerShell snippet to show the 2 Storage subsystem on each node


a. Enumerate physical disks in each subsystem



PowerShell snippet showing the Physical Disk in each Storage subsystem on node 1, 2, 3 and 4


b. Creating a Storage pool


The below two PowerShell snippet enumerates primordial pools in local and cluster Storage System. You will notice that primordial pool in cluster Storage System from all nodes show same output.




PowerShell snippet to create a pool on local storage system of node1 & enumerate


PowerShell snippet to create a pool on cluster subsystem from node1 & enumerate


Few things to note:

  • A pool can be created only using drives that belong to the same subsystem
  • A pool can be created using drives that are physically connected to a given set of nodes.
  • A pool created on a cluster subsystem is by default clustered (added to the cluster). To disable auto-clustering of a pool, the “EnableAutomaticClustering” flag needs to be set to “false” on the cluster subsystem

The below PowerShell snippet illustrates this.


Set-StorageSubsystem –EnableAutomaticClustering $false on the clustered subsystem


From then on, to add the pool to the cluster, the Add-ClusterResource cmdlet should be used.


c. Creating virtual disk



PowerShell snippet to enumerate pool in local Storage System, create Virtual Disk and enumerate it


PowerShell snippet to enumerate pool in local Storage System, create Virtual Disk and enumerate it



Script to generate sets


$count = Read-Host -Prompt "Enter number of nodes"
[String[]] $nodesarray = @()
For ($i=0; $i -lt $count; $i++)
  $nodesarray += Read-Host -Prompt "Enter node"
$temp = Get-StorageNode -name $nodesarray[0] | Get-PhysicalDisk | select UniqueId
$PD = $temp | select -expand UniqueId –Unique
$NPD = $PD
foreach ($element in $nodesarray)
  $temp = Get-StorageNode -name $element | Get-PhysicalDisk | select UniqueId
  $PD = $temp | select -expand UniqueId –Unique
  $NPD = $NPD | ?{$PD -contains $_}
$PD = @()
foreach ($element in $NPD)
  Write-Host $element
  $PD += Get-PhysicalDisk -UniqueId $element
Get-StorageSubSystem -FriendlyName "clu*" | New-StoragePool -FriendlyName "testpool" -PhysicalDisks $PD