Storage Spaces Direct guidelines
Solution 1:
Speaking shortly, the deployment sequence looks as following:
- Deploy necessary WS roles and features
- Validate the Failover Cluster
- Create the Failover Cluster
- Enable Storage Spaces Direct
-EnableStorageS2D
- Create and configure storage pools
Example input:
New-StoragePool -StorageSubSystemName #CLUSTER_NAME# -FriendlyName #POOL_NAME# -WriteCacheSizeDefault 0 -ProvisioningTypeDefault Fixed -ResiliencySettingNameDefault Simple -PhysicalDisk (Get-StorageSubSystem -Name #CLUSTER_NAME# | Get-PhysicalDisk)
- Create and configure virtual disks
Example input:
New-Volume -StoragePoolFriendlyName #POOL_NAME# -FriendlyName #VD_NAME# -PhysicalDiskRedundancy 2 -FileSystem CSVFS_REFS –Size 100GB
- Deploy SOFS
- Create file shares That's it!
Here are two articles that I found helpful:
Link1 https://www.starwindsoftware.com/blog/microsoft-storage-spaces-direct-4-node-setup-2
Link2 https://technet.microsoft.com/en-us/windows-server-docs/storage/storage-spaces/hyper-converged-solution-using-storage-spaces-direct
Solution 2:
My current script for evaluating Storage Spaces Direct
# windows server installation
Install-WindowsFeature Hyper-V, Data-Center-Bridging, Failover-Clustering, RSAT-Clustering-Powershell, Hyper-V-PowerShell -IncludeManagementTools
# before creating cluster set correct MediaType for all disks
#note before setting MediaType disks have to be assigned to a Storage Pool which can be deleted right after setting
Get-Physicaldisk | where size -gt 506870912000 | Set-PhysicalDisk –MediaType HDD
# Create the cluster
New-Cluster -Name w16hyper -Node w16hyper1, w16hyper2, w16hyper3 -NoStorage -StaticAddress 192.168.2.100
# hack to use RAID cards as JBOD
(Get-Cluster).S2DBusTypes=0x100
Enable-ClusterStorageSpacesDirect -CacheState Disabled
Get-StorageSubSystem Cluster*
Get-StorageSubSystem Cluster* | Get-Volume
#statistics
Get-StorageSubSystem Cluster* | Get-StorageHealthReport
#jobs running on background (eg. rebuild)
Get-StorageJob | ? JobState -Eq Running
#status
Get-StoragePool S2D* | Get-PhysicalDisk | Group OperationalStatus -NoElement
Get-StoragePool S2D* | Get-PhysicalDisk | Sort Model, OperationalStatus
#get log info
Get-StorageSubSystem Cluster* | Debug-StorageSubSystem
Get-VirtualDisk
Get-PhysicalDisk -Usage Retired
#create new mirrored volume (survive 1 fail for 2node system, 2 simultaneous fails for more nodes)
New-Volume -FriendlyName "Volume A" -FileSystem CSVFS_ReFS -StoragePoolFriendlyName S* -Size 1TB
#create hybrid volume (mirror + parity) with recommended 10% mirror part size
New-Volume -FriendlyName "Volume A" -FileSystem CSVFS_ReFS -StoragePoolFriendlyName S* -StorageTierFriendlyNames Performance, Capacity -StorageTierSizes 100GB, 900GB
#cleanup (pool has to be deleted on each node)
Disable-ClusterStorageSpacesDirect
Get-StoragePool S2D* | Set-StoragePool -IsReadOnly $false
Get-StoragePool S2D* | Remove-StoragePool