Jump to content
RESET Forums (homeservershow.com)

Recommended Posts

Posted (edited)

Hi all,


Here's a guide I would like to share around Windows Storage spaces and creating a 4x drive Parity pool


In a nutshell I have Windows Serer 2019 and storage space parity pool running very nicely on my Gen8. Here's the configuration I used and How to copy my setup.

(I still believe ZFS or UnRAID are far better choice as a filesystem on these limited servers, but if you need Windows like I do, then storage spaces can be an excellent alternative.)


This is my "best effort" guide and by no means perfect. It does however yield excellent results for both read and write speeds.


Gen8 Microserver


CPU Stock for now (1270 V3 on it's way)

Disks  4x 3TB WD NAS drives in front bays

SSD - Samsung Evo 850 265



First lesson, DONT use the Windows GUI to create the pool or Virtual disk as the GUI applies terrible defaults that you can't edit and will ruin performance. Also make sure you're on the latest version of Windows server as a LOT has changed and been improved recently.



You must use PowerShell.




  • PhysicalDiskRedundancy - Parity
  • Columns - 4 (The data segments stripped to disks. Should match your 4 disks)
  • Interleve - 256K (The amound of data written to each "column" or disk. In this case 256KB interleave gives us a 64K write to each disk)
  • LogicalSectorSize - 4096
  • PhysicalSectorSize - 4096
  • REFS/NTFS Cluster - 64K



Overall configuration:

4 drive file system, one bootable SSD in RAID mode.


BIOS setup initial

F9 into the BIOS and set the B120i controller into RAID mode

F5 into the RAID manager and create 1 individual RAID0 logical drive for the SSD

Set the SSD as the preferred boot drive (Yes in the same screen)

Set the cluster size to 63

Enable caching


Windows install 

Install Windows 2019 Server Standard GUI edition from ISO

Offer up the B120i RAID drivers via a USB stick so the wizard can see the SSD RAID0 drive. Filename p033111.exe (Have them extracted)

Windows update and patch and reboot


BIOS setup post windows

Once windows is up and running go back into the F5 RAID manager and finish the setup of the 4 front drives into 4x RAID0

Check the SSD is still set as the preferred boot drive (Yes in the same screen)

Set the cluster size to 63


Windows config of storage spaces

At this point you should see 4 individual drives ready to be used as a Storage pool


Try to set each disk to have a cache (Not all drives support this)

Win + X to open the side menu

Device Manager

Expand Disk Drives

Right Click the "HP Logical Volume" for each drive

Check - "Enable write caching on the device"

(If it doesn't work don't stress, it's optional but nice to have)



Powershell - Run as Admin


Determine the physical drisks available for the pool we're about to create

Get-PhysicalDisk | ft friendlyname, uniqueid, mediatype, size -auto


Your output will look something like this, so identify the 4 drives that are the same and take note of their uniqueID


Mine are the bottom four drives all 3TB in size


friendlyname            uniqueid                                        size
------------                         --------                                        ----
HP LOGICAL VOLUME       600508B1001C5C7A1716CCDD5A706248        250023444480


HP LOGICAL VOLUME       600508B1001CAC8AFB32EE6C88C5530D       3000559427584
HP LOGICAL VOLUME       600508B1001C51F9E0FF399C742F83A6       3000559427584
HP LOGICAL VOLUME       600508B1001C2FA8F3E8856A2BF094A0       3000559427584
HP LOGICAL VOLUME       600508B1001CDBCE168F371E1E5AAA23       3000559427584


Rename the friendly name based on the UniqueID from above and set to "HDD type"


Set-Physicaldisk -uniqueid "Your UniqueID" -newFriendlyname Disk1 -mediatype HDD


You will need to run that 4 times with each UniqueID code and create a new friendly name for each drive. I called mine "Drive 1, Drive 2" etc

Set-Physicaldisk -uniqueid "600508B1001C2FA8F3E8856A2BF094A0" -newFriendlyname Disk1 -mediatype HDD
Set-Physicaldisk -uniqueid "600508B1001CDBCE168F371E1E5AAA23" -newFriendlyname Disk2 -mediatype HDD
Set-Physicaldisk -uniqueid "600508B1001CAC8AFB32EE6C88C5530D" -newFriendlyname Disk3 -mediatype HDD
Set-Physicaldisk -uniqueid "600508B1001C51F9E0FF399C742F83A6" -newFriendlyname Disk4 -mediatype HDD


Verify the disks have been set correctly
The following example shows which physical disks are available in the primordial server and CAN be used in the new Pool. You're just checking here if the friendly name renaming worked and they are all set to HDD type. Primordial just means on your local server and available.

Get-StoragePool -IsPrimordial $true | Get-PhysicalDisk | Where-Object CanPool -eq $True

You should see your four drives with nice names that you set like "Disk1"



Now find out your sub system name, as we need this for the next command. Just take note of it. Example "Windows Storage on <servername>"


Mine is ""Windows Storage on Radaxian"




The following example creates a new storage pool named "Pool1" that uses all available disks and sets the cluster size.

New-StoragePool -FriendlyName Pool1 -StorageSubsystemFriendlyName "Windows Storage on Radaxian" -PhysicalDisks (Get-PhysicalDisk -CanPool $True) -LogicalSectorSizeDefault 64KB



Now create the Virtual Disk on the new pool with 4x disks and Partity set correctly. (This is critical to do via PowerShell)

New-VirtualDisk -StoragePoolFriendlyName "Pool1" -FriendlyName "VDisk1" -ResiliencySettingName Parity -NumberOfDataCopies 1 -NumberOfColumns 4 -ProvisioningType Fixed -Interleave 256KB -UseMaximumSize

Those two commands should complete without error, if they don't go back and check your syntax




Go back into the Windows GUI and open this

Server Manager\File and Storage Services\Servers

You should see the Storage pool listed and the Virtual disk we created in the previous steps.


Storage pool - Pool1

Virtual Disk - VDisk1


Select Disks in the GUI

Identify your new VDisk1 and right click it.

Set to Online, this will also set it to use a GPT boot record


On the same screen in the below pane Volumes

Click TASKS and select "New Volume"

Select REFS and Sector size of 64K

Enter a volume name like "Volume1" or whatever you want to call it

Select a drive letter such as Z

(You can use NTFS here for slightly better performance, but I'm sticking to REFS as it has some benefits)


You'll now have a Storage pool, Virtual disk on top and a volume created with optimal settings




Go back into Power Shell
Enable power protected status if applicable (Just try it, no harm)

(Ideally here you should have your server connected to a basic UPS to protect it from power outages)

Set-StoragePool -FriendlyName Pool1 -IsPowerProtected $True


Check if the new sector sizes of Virtual disk and all relevant settings are correct

Get-VirtualDisk | ft FriendlyName, ResiliencySettingName, NumberOfColumns, Interleave, PhysicalDiskRedundancy, LogicalSectorSize, PhysicalSectorSize

Example output

FriendlyName  ResiliencySettingName  NumberOfColumns  Interleave  PhysicalDiskRedundancy  LogicalSectorSize  PhysicalSectorSize
VDisk1                Parity                                      4                       262144                         1                                        4096                       4096


You're done.... enjoy the new Volume.


At this point you can share out your new Volume "Z" and allow client computers to connect.





Some other commands in Power Shell that I found useful


Get more verbose disk details around sectors.

Get-VirtualDisk -friendlyname Vdisk1 | fl


Get-PhysicalDisk | select FriendlyName, Manufacturer, Model, PhysicalSectorSize, LogicalSectorSize | ft



Check if TRIM is enabled. This output should be 0

fsutil behavior query DisableDeleteNotify

If TRIM is not enabled, you can set it on with these commands

fsutil behavior set disabledeletenotify ReFS 0
fsutil behavior set disabledeletenotify NTFS 0



Check the Power Protected status and cache

Get-StorageAdvancedProperty -PhysicalDisk (Get-PhysicalDisk)[0]



Once your data has been migrated back to your new pool from backup, make sure you run this command to "spread out the data" properly.

This command rebalances the Spaces allocation for all of the Spaces in the pool named SQLPool.

Optimize-StoragePool -FriendlyName "Pool1"



I'm yet to get my Xeon in the mail, but once that's installed I think the disk performance will go up even higher as the stock CPU is junk.







Edited by radaxian
  • Like 2

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • E3000
      By E3000
      Hey guys,
      Has anyone around here been successful in setting up Proxmox on a Gen8 using a HBA for storage?
    • E3000
      By E3000
      Hey guys,
      As of June 2020, what are the latest versions of firmware for HP Microserver Gen8 to be installed on the system itself? Also do any other components have updatable firmware/os-independent software?
      So far my list is as follows:
      BIOS - J06 (04/04/2019) iLO 4 - v2.73 (11/02/2020) Intelligent Provisioning - v1.71 (20/02/2019)  
      and I guess the following could also be added (although both out of date):
      Smart Update Manager (HP SUM) - v8.1.0 (21/12/2017) Service Pack for ProLiant (06/11/2017)  
      Date formated as DD/MM/YYYY.
      I believe all the B120i Smart Storage stuff is part of Intelligent Provisioning.
    • E3000
      By E3000
      Hey guys, 
      Bit of a random question here, and I know it depends on many factors such as what they are doing etc, but how many VMs have you guys comfortably ran on Gen8 with an E3-1265v2 and 16GB RAM? When did you start to see a performance hit compared to what the Gen8 is generally capable of?

  • Create New...