• Stars
    star
    215
  • Rank 183,925 (Top 4 %)
  • Language
    PowerShell
  • License
    MIT License
  • Created over 4 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Scripts for creating an destroying Fault Tolerant multi-tier storage spaces on Windows 10

Create Storage Spaces in Windows 10

Windows Server O/S contains Storage Spaces support for Server Spaces tiered storage. You can front slower spinning disks with smaller faster SSDs. Windows 10 has a Storage Spaces GUI Control Panel that does not include the tiered storage GUI. This means Powershell must be used for all configuration.

Physical Disks

This repository contains scripts that create tiered storage pools that integrate SSDs as caching drives and HDDs as storage drives. They assume you have at least one SSD and one HDD.

  • The scripts automatically find all raw drives and add them to the pool.
  • Some HDDs have their types incorrectly identified. The script can coerce them to be MediaType:HDD
  • The entire virtual drive is added to the system as a single large volume
  • You need at least
    • 1 SSD and 1 HDD to run cached storage / Simple resiliency
    • 2 SSD and 2 HDD to run cached storage / Mirror resiliency /
    • 1 SSD and 2 HDD to run cached storage / Simple resiliency / striped storage (sum of HDD space)

Simple Mirrored Mirrored and Striped

Scripts

new-storage-space.ps1

Creates a tiered storage pool and allocates all the disk space to a single drive

  • You can change the drive letter and label by editing the variables at the top.
  • the script can auto size the drive and cache. That didn't work for me so the script supports manual sizing.

remove-storage-space

Removes the virtual drive, the storage tiers and then the storage pool.

  • All drives are returned the Primordial pool

Sample configuration

new-storage-space.ps created a Virtual drive from 3 physical drives

Physical Drives Storage Space Virtual Drive
two 2TB HDD single 3.6TB data volume striped across my two HDD
one 200GB SSD. with a 200GB read/write cache

Simple resiliency with striped drives

Win 10 Pro Storage Spaces Control Panel

The control panel does not display or manipulate tiers

ResiliancyName: Simple vs Mirror

The "Mirror" resiliency level attempts to mirror both SSD and HDD tiers so you would need 4 drives run mirror, to mirror both tiers

Caching Impact Benchmark

All Storage Pool drives connected to 3Gb/s SATA. The write-back cache is not used with sequential writes over 256KB

[Read]                           *Single 2TB no cache*           *Two 2TB mirrored with 200GB cache*
Sequential 1MiB (Q=  8, T= 1):   160.497 MB/s [    153.1 IOPS]   282.983 MB/s [    269.9 IOPS]
Sequential 1MiB (Q=  1, T= 1):   156.766 MB/s [    149.5 IOPS]   254.605 MB/s [    242.8 IOPS]
    Random 4KiB (Q= 32, T=16):     1.748 MB/s [    426.8 IOPS]   175.272 MB/s [  42791.0 IOPS]
    Random 4KiB (Q=  1, T= 1):     0.527 MB/s [    128.7 IOPS]    21.189 MB/s [   5173.1 IOPS]

[Write]                          *Single 2TB no cache*           *Two 2TB mirrored with 200GB cache*
Sequential 1MiB (Q=  8, T= 1):   153.896 MB/s [    146.8 IOPS]   226.825 MB/s [    216.3 IOPS]
Sequential 1MiB (Q=  1, T= 1):   154.147 MB/s [    147.0 IOPS]   230.149 MB/s [    219.5 IOPS]
    Random 4KiB (Q= 32, T=16):     2.033 MB/s [    496.3 IOPS]   149.000 MB/s [  36377.0 IOPS]
    Random 4KiB (Q=  1, T= 1):     1.706 MB/s [    416.5 IOPS]    38.790 MB/s [   9470.2 IOPS]

Example state

Before script

Three drives can pool. The HDD drive media types are not recognized

PS C:\WINDOWS\system32> Get-PhysicalDisk
Number FriendlyName           SerialNumber         MediaType   CanPool OperationalStatus HealthStatus Usage            Size
------ ------------           ------------         ---------   ------- ----------------- ------------ -----            ----
0      SanDisk Ultra II 480GB xxxxxxxxxxxx         SSD         False   OK                Healthy      Auto-Select 447.13 GB
4      ATA WDC WD20EFRX-68A   WD-xxxxxxxxxxxx      Unspecified True    OK                Healthy      Auto-Select   1.82 TB
3      ATA WDC WD20EFRX-68A   WD-xxxxxxxxxxxx      Unspecified True    OK                Healthy      Auto-Select   1.82 TB
1      ATA KINGSTON SH103S3   xxxxxxxxxxxxxxxx     SSD         False   OK                Healthy      Auto-Select 223.57 GB
2      ATA LITEONIT LCS-256   xxxxxxxxxxxxxxxxxxxx SSD         True    OK                Healthy      Auto-Select 238.47 GB

After creating Virtual Drive

PS C:\WINDOWS\system32> Get-PhysicalDisk
Number FriendlyName           SerialNumber         MediaType CanPool OperationalStatus HealthStatus Usage            Size
------ ------------           ------------         --------- ------- ----------------- ------------ -----            ----
0      SanDisk Ultra II 480GB xxxxxxxxxxxx         SSD       False   OK                Healthy      Auto-Select 447.13 GB
4      ATA WDC WD20EFRX-68A   WD-xxxxxxxxxxxx      HDD       False   OK                Healthy      Auto-Select   1.82 TB
3      ATA WDC WD20EFRX-68A   WD-xxxxxxxxxxxx      HDD       False   OK                Healthy      Auto-Select   1.82 TB
1      ATA KINGSTON SH103S3   xxxxxxxxxxxxxxxx     SSD       False   OK                Healthy      Auto-Select 223.57 GB
2      ATA LITEONIT LCS-256   xxxxxxxxxxxxxxxxxxxx SSD       False   OK                Healthy      Auto-Select 238.47 GB

PS C:\WINDOWS\system32> Get-StoragePool
FriendlyName    OperationalStatus HealthStatus IsPrimordial IsReadOnly    Size AllocatedSize
------------    ----------------- ------------ ------------ ----------    ---- -------------
Primordial      OK                Healthy      True         False      4.53 TB       3.86 TB
My Storage Pool OK                Healthy      False        False      3.86 TB       3.66 TB

PS C:\WINDOWS\system32> Get-StorageTier
FriendlyName                  TierClass   MediaType ResiliencySettingName FaultDomainRedundancy    Size FootprintOnPool StorageEfficiency
------------                  ---------   --------- --------------------- ---------------------    ---- --------------- -----------------
SSDTier                       Unknown     SSD       Simple                0                        0 B             0 B
My Tiered VirtualDisk-HDDTier Capacity    HDD       Simple                0                     3.46 TB         3.46 TB           100.00%
My Tiered VirtualDisk-SSDTier Performance SSD       Simple                0                      211 GB          211 GB           100.00%
HDDTier                       Unknown     HDD       Simple                0                        0 B             0 B

PS C:\WINDOWS\system32> Get-VirtualDisk
FriendlyName          ResiliencySettingName FaultDomainRedundancy OperationalStatus HealthStatus    Size FootprintOnPool StorageEfficiency
------------          --------------------- --------------------- ----------------- ------------    ---- --------------- -----------------
My Tiered VirtualDisk                                             OK                Healthy      3.66 TB         3.66 TB            99.97%

Credits

More Repositories

1

jacob-project

JACOB is a JAVA-COM Bridge that allows you to call COM Automation components from Java. It uses JNI to make native calls to the COM libraries. JACOB runs on x86 and x64 environments supporting 32 bit and 64 bit JVMs. This repository was migrated from Sourceforge 2020 Sep
Java
507
star
2

RaspberryPi

Various Raspberry Pi Scripts and programs
Shell
15
star
3

build-monitor-devices

C++
9
star
4

Adafruit-Trinkey-CircuitPython

Experimentation zone
Python
8
star
5

docker-scripts

Some docker-compose and other scripts for a couple COTS / open source products
Shell
8
star
6

cp-server-jolokia

Docker image for confluentinc/cp-server including Jolokia Java Agent to expose metrics via HTTP
Shell
6
star
7

vnet-p2s-vpn-bastion-azure

Shell
5
star
8

java-to-windows-performance-counters

Library that makes it possible to call Windows Performance Counters from Java
C#
5
star
9

speedtest-app-insights

Python code that runs the speedtest.net API and then posts the results to an Azure App Insights dashboard
Python
5
star
10

wsl2-utils

Some WSL2 utilities for managing instances
PowerShell
5
star
11

build-monitors

C#
4
star
12

IOIODotNet

Windows .Net library for IOIO board
C#
2
star
13

ValidateSpringYml

Validate your yml properties as part of your CI build. Unit test that validates yml files.
Java
2
star
14

ESP8266

ESP8266 Experiments
C++
1
star
15

flutter-embedded

Embed a Flutter application inside a web app in an iFrame and with element replacement. Also demonstrate how the Flutter apps can talk to handlers in the HTML/JavaScript. Embed a Flutter module inside an Android app
Dart
1
star
16

entitopia

Python
1
star
17

covid-vaccinations-python

Basic python program that loads covid vaccination data sets available on Kaggle and shows national progress
Jupyter Notebook
1
star
18

fs-dart-tools

Some dart tools. They were going to https://github.com/dart-lang/tools but I'm not sure that is still active
Dart
1
star
19

ESP8266-MicroPython

Python
1
star
20

ephemeral-disk-encryption-azure

Create Azure VM with encrypted local disk using keyvault secret
Shell
1
star
21

token-service

GitHub repository for AWS CodeStar ASP.NET Core web service token-service.
C#
1
star