Over the past few months, I’ve been working with the Airtop-S Fanless Server from Compulab. This is a compact device, about the size of a Small Form Factor PC. What’s cool about it is that it uses a Natural AirFlow technology that does not require fans or liquid to cool the CPU and PCIe Video Card. They’ve also used an external power supply, similar to what you’d use to power a docking station, freeing up all kinds of space internally for nice extras.

As the entire design has been customized with thermal considerations, CompuLab has also designed their own motherboard. When I received the unit, I was pleased with the wealth of connectivity options and redundant power capabilities.

I have an unboxing video where I show all the ports that come included with the unit. The front panel is customizable, and I opted to have it configured with an additional 4x1GbE NICs. As 1Gb is commonplace, I decided to start with this in my configuration along with some consumer-grade 850 Evo SSDs, to provide a functional (though not recommended) setup and establish some benchmarks.

With all my NICs plugged into an unmanageable switch, I was getting pretty poor performance on my Volume. But it did work, and it’ll provide me with a starting point as we optimize these units and integrate them with Azure

In subsequent posts we will look at maximizing the performance out of these little units with the minimum amount of cost. For now, here’s the PowerShell script that I’m using to build my S2D cluster. It’s a trimmed down version of the production-ready one you can find in the Master Storage Spaces Direct book on Amazon.

Get-WindowsFeature
Invoke-Command -Computername Cabot-Airtop2 -ScriptBlock {Get-WindowsFeature}

#Role Installation
Invoke-Command -Computername Cabot-Airtop2 -ScriptBlock {
Install-WindowsFeature -Name File-Services
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
Install-WindowsFeature -Name Hyper-V -IncludeAllSubFeature -IncludeManagementTools -Restart
}
Install-WindowsFeature -Name File-Services
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
Install-WindowsFeature -Name Hyper-V -IncludeAllSubFeature -IncludeManagementTools

#Build Switch-Embedded Team
New-VMSwitch -Name TeamedvSwitch -NetAdapterName "Ethernet 3", "Ethernet 4", "Ethernet 5", "Ethernet 6" -EnableEmbeddedTeaming $true
Invoke-Command -Computername Cabot-Airtop2 -ScriptBlock {New-VMSwitch -Name TeamedvSwitch -NetAdapterName "Ethernet 3", "Ethernet 4", "Ethernet 5", "Ethernet 6" -EnableEmbeddedTeaming $true}

#Create vAdapters
Add-VMNetworkAdapter -SwitchName TeamedvSwitch -Name SMB -ManagementOS
Add-VMNetworkAdapter -SwitchName TeamedvSwitch -Name LM -ManagementOS
Add-VMNetworkAdapter -SwitchName TeamedvSwitch -Name HB -ManagementOS
Invoke-Command -Computername Cabot-Airtop2 -ScriptBlock {
Add-VMNetworkAdapter -SwitchName TeamedvSwitch -Name SMB -ManagementOS
Add-VMNetworkAdapter -SwitchName TeamedvSwitch -Name LM -ManagementOS
Add-VMNetworkAdapter -SwitchName TeamedvSwitch -Name HB -ManagementOS
}

#Configure IPs for Converged Network
New-NetIPAddress -IPAddress 172.16.16.1 -PrefixLength 24 -InterfaceAlias "vEthernet (SMB)"
New-NetIPAddress -IPAddress 172.16.17.1 -PrefixLength 24 -InterfaceAlias "vEthernet (HB)"
New-NetIPAddress -IPAddress 172.16.18.1 -PrefixLength 24 -InterfaceAlias "vEthernet (LM)"
Invoke-Command -Computername Cabot-Airtop2 -ScriptBlock {
New-NetIPAddress -IPAddress 172.16.16.2 -PrefixLength 24 -InterfaceAlias "vEthernet (SMB)"
New-NetIPAddress -IPAddress 172.16.17.2 -PrefixLength 24 -InterfaceAlias "vEthernet (HB)"
New-NetIPAddress -IPAddress 172.16.18.2 -PrefixLength 24 -InterfaceAlias "vEthernet (LM)"
}

#Get Status of NICs
Get-SmbServerNetworkInterface | FT *
Invoke-Command -Computername Cabot-Airtop2 -ScriptBlock {Get-SmbServerNetworkInterface | FT *}

#Build Cluster
Test-Cluster -Node Cabot-Airtop1,Cabot-Airtop2 -Include "Cluster Configuration", "Hyper-V Configuration", "Storage Spaces Direct", "Inventory", "System Configuration", "Network"
New-Cluster -Name S2DCluster -Node Cabot-Airtop1,Cabot-Airtop2 -NoStorage -StaticAddress 192.168.4.10

#Configure Cluster Cloud Witness
Set-ClusterQuorum -CloudWitness -AccountName <AzureStorageAccountNameHere> -AccessKey <AccessKeyHere> -Endpoint core.windows.net

#Validate cluster for S2D
Get-StorageSubsystem
Get-PhysicalDisk | ft
Invoke-Command -Computername Cabot-Airtop2 -ScriptBlock {
Get-StorageSubsystem
Get-PhysicalDisk | ft
}

#Enable S2D
Enable-ClusterS2D -PoolFriendlyName S2DPool -Confirm:$false

#Provision Cluster Shared Volumes
New-Volume -StoragePoolFriendlyName S2DPool -FriendlyName MirrorDisk1 -FileSystem CSVFS_REFS -Size 200GB -PhysicalDiskRedundancy 1
New-Volume -StoragePoolFriendlyName S2DPool -FriendlyName AWD -FileSystem CSVFS_REFS -Size 450GB -PhysicalDiskRedundancy 1

As soon as I get some time to add some Mellanox cards and some proper SSD drives, we’ll be rebuilding the S2D cluster with a production configuration and running a series of performance tests to benchmark the solution.

Hope this helps!

É