Introduction to Scale-Out File Server on Windows Server 2019

Scale-Out File Server (SoFS) is a Windows Server 2019 failover cluster role that presents Cluster Shared Volumes (CSV) as SMB 3.x file shares that all cluster nodes simultaneously serve. Unlike a traditional clustered file server where only one node owns the storage at a time, SoFS allows all nodes to actively serve the same share simultaneously, distributing the load and eliminating single-node bottlenecks. SoFS is specifically designed for hosting Hyper-V VM storage files (VHD/VHDX) and SQL Server database files over SMB 3.x.

SoFS leverages SMB Multichannel for parallel data transfer across multiple network paths, SMB Direct (RDMA) for low-latency high-throughput access, transparent failover for non-disruptive operations during node failures, and CSV Cache for in-memory caching of hot data blocks. These features combine to deliver predictable, high-performance shared storage without requiring a dedicated SAN.

Prerequisites for Scale-Out File Server

SoFS requires a Windows Server 2019 failover cluster with at least two nodes. The cluster must have shared storage — either traditional SAN LUNs added as Cluster Shared Volumes, or Storage Spaces Direct (S2D) volumes. All nodes must have 10 GbE or faster network adapters, ideally RDMA-capable for SMB Direct.

Install the Failover Clustering feature on all nodes:

Install-WindowsFeature -Name Failover-Clustering, FS-FileServer -IncludeManagementTools

Create the failover cluster (assuming shared SAN storage is already connected):

New-Cluster -Name "SoFSCluster" -Node "Node1","Node2","Node3","Node4" -StaticAddress 192.168.1.110

Creating the Scale-Out File Server Role

Add the Scale-Out File Server role to the cluster. This creates a cluster role with a virtual computer name (used in the UNC share path) and a virtual IP address:

Add-ClusterScaleOutFileServerRole -Name "SoFSServer" -Cluster "SoFSCluster"

Verify the role was created:

Get-ClusterResource -Cluster "SoFSCluster" | Where-Object {$_.ResourceType -like "*File Server*"}

Unlike a general-use file server cluster role which requires an IP address, SoFS does not require a static IP — it uses Distributed Network Name (DNN) or the cluster name for access. The SoFS role is available on all nodes simultaneously.

Adding Cluster Shared Volumes

Add shared storage as Cluster Shared Volumes that all nodes can access concurrently:

Get-ClusterAvailableDisk -Cluster "SoFSCluster" | Add-ClusterDisk

Enable CSV on the added disks:

Add-ClusterSharedVolume -Name "Cluster Disk 1" -Cluster "SoFSCluster"
Add-ClusterSharedVolume -Name "Cluster Disk 2" -Cluster "SoFSCluster"

Verify CSVs are online and accessible:

Get-ClusterSharedVolume -Cluster "SoFSCluster" | Select Name, State, OwnerNode

CSVs are accessible at C:ClusterStorageVolume1 and C:ClusterStorageVolume2 from all cluster nodes.

Creating SMB Shares on SoFS

Create SMB shares that point to CSV folders. These shares will be accessible from all nodes simultaneously:

# Create a share for Hyper-V VM files
New-SmbShare -Name "VMStorage" -Path "C:ClusterStorageVolume1VMs" -ScopeName "SoFSServer" -FullAccess "CONTOSOSYSTEM","CONTOSOHyper-V Hosts$" -Description "Hyper-V VM Storage"

# Create a share for SQL Server databases
New-SmbShare -Name "SQLData" -Path "C:ClusterStorageVolume2SQLData" -ScopeName "SoFSServer" -FullAccess "CONTOSOsqlsvc" -Description "SQL Server Database Files"

The -ScopeName parameter scopes the share to the SoFS cluster role name, so the share path is \SoFSServerVMStorage (using the cluster role name, not a physical node name).

Enable continuous availability on the share for transparent failover:

Set-SmbShare -Name "VMStorage" -ScopeName "SoFSServer" -ContinuouslyAvailable $true -EncryptData $true

Configuring CSV Cache

CSV cache allocates system memory on each cluster node for caching frequently accessed blocks from CSV volumes. Enable CSV cache and set the size:

(Get-Cluster -Name "SoFSCluster").BlockCacheSize = 8192

This sets 8 GB of CSV cache per node. For Hyper-V workloads, a larger cache significantly reduces disk I/O. View current CSV cache settings:

(Get-Cluster -Name "SoFSCluster").BlockCacheSize

Connecting Hyper-V to SoFS Storage

After creating the SoFS shares, configure Hyper-V hosts (which may or may not be the same physical servers as the SoFS cluster) to store VMs on the SoFS shares. Create a new Hyper-V VM using the SoFS share as storage:

New-VM -Name "ProdVM01" -MemoryStartupBytes 4GB -NewVHDPath "\SoFSServerVMStorageProdVM01ProdVM01.vhdx" -NewVHDSizeBytes 100GB -Path "\SoFSServerVMStorageProdVM01"

Move an existing VM’s storage to SoFS:

Move-VMStorage -VMName "ExistingVM" -DestinationStoragePath "\SoFSServerVMStorageExistingVM"

View SoFS share statistics to monitor throughput:

Get-SmbShareAccess -Name "VMStorage" -ScopeName "SoFSServer"
Get-SmbSession -ScopeName "SoFSServer" | Select ClientUserName, ClientComputerName, NumOpens, TotalRequestsProcessed

Scale-Out File Server on Windows Server 2019 provides a high-performance, scale-out SMB file storage solution that leverages all available cluster nodes to maximise throughput for demanding Hyper-V and SQL Server workloads.