I’ve been building, tearing down, and rebuilding Storage Spaces in the lab over and over, and that will continue for the next few years
Rather than spend a significant percentage of my life clicking on wizards, I decided to script what I want done.
The below script will:
- Build a storage pool from all available disks
- Prep 2 storage tiers from SSD and HDD
- Create 3 different virtual disks with different configs (customize to your heat’s content!)
- Then run the PrepCSV function to turn those virtual disks into CSVs just the way I like them
How do I like a CSV? I like them formatted
and the names consistent all the way: virtual disk, cluster resource name, volume label, and CSV mount point in C:ClusterStorage. None of that “Cluster Disk (X)” or “Volume 1” BS for me, thank you.
It might be possible to clean up the stuff in the function. This is what I have working – it works and that’s the main thing. There’s a lot of steps to get disk ID so I can create and format a volume, and then bring the disk back so I can turn it into a CSV.
What’s missing? I have not added code for adding the SOFS role or adding/configuring shares. I’m not at that point yet in the lab.
Function PrepCSV ($CSVName)
{
#Rename the disk resource in FCM
(Get-ClusterResource | where {$_.name -like “*$CSVName)”}).Name = $CSVName
#Get the disk ID
Stop-ClusterResource $CSVName
$DiskID = (Get-VirtualDisk -FriendlyName $CSVName).UniqueId
Start-ClusterResource $CSVName
#Format the disk
Suspend-ClusterResource $CSVName
Get-disk -UniqueId $DiskID | New-Partition -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel “$CSVName” -Confirm:$false
Resume-ClusterResource $CSVName
#Bring the CSV online
Add-ClusterSharedVolume -Name $CSVName
$OldCSVName = ((Get-ClusterSharedVolume $CSVName).SharedVOlumeInfo).FriendlyVolumeName
Rename-Item $OldCSVName -NewName “C:ClusterStorage$CSVName”
}
# The following Storage Pool and Virtual Disk cmdlets taken from Bryan Matthew’s TechEd …
# … Session at http://channel9.msdn.com/Events/TechEd/Europe/2013/MDC-B217#fbid=TFEWNjeU9XP
# Find all eligible disks
$disks = Get-PhysicalDisk |? {$_.CanPool -eq $true}
# Create a new Storage Pool
New-StoragePool -StorageSubSystemFriendlyName “Clustered Storage Spaces on Demo-FSC1” -FriendlyName “Demo-FSC1 Pool1” -PhysicalDisks $disks
# Define the Pool Storage Tiers
$ssd_tier = New-StorageTier -StoragePoolFriendlyName “Demo-FSC1 Pool1” -FriendlyName SSD_Tier -MediaType SSD
$hdd_tier = New-StorageTier -StoragePoolFriendlyName “Demo-FSC1 Pool1” -FriendlyName HDD_Tier -MediaType HDD
#Transfer ownership of Available Storage to current node to enable disk formatting
Move-ClusterGroup “Available Storage” -Node $env:COMPUTERNAME
# Creation of a 200 GB tiered virtual disk with 5 GB cache
New-VirtualDisk -StoragePoolFriendlyName “Demo-FSC1 Pool1” -FriendlyName CSV1 –StorageTiers @($ssd_tier, $hdd_tier) -StorageTierSizes @(50GB,150GB) -ResiliencySettingName Mirror -WriteCacheSize 5GB
PrepCSV CSV1
# Creation of a 200 GB non-tiered virtual disk with no cache
New-VirtualDisk -StoragePoolFriendlyName “Demo-FSC1 Pool1” -FriendlyName CSV2 -Size 200GB -ResiliencySettingName Mirror -WriteCacheSize 0
PrepCSV CSV2
# Creation of a 50 GB virtual disk on SSD only with 5 GB cache
New-VirtualDisk -StoragePoolFriendlyName “Demo-FSC1 Pool1” -FriendlyName CSV3 –StorageTiers @($ssd_tier) -StorageTierSizes @(50GB) -ResiliencySettingName Mirror -WriteCacheSize 5GB
PrepCSV CSV3
EDIT1:
This script broke if the cluster group, Available Storage, was active on another node. This prevented formatting, which in turn prevented adding the virtual disks as CSVs. Easy fix: move the Available Storage cluster group to the current machine (a node in the cluster).
Hi
Using tha later part of the script du build a 2-tier mirror with two SSD and 2 HDD just as a test.
I get a vdisk but it is not tierd. No errormessages.
If i create it with the GUI wizard it works….but only get 1GB och Cache and i would like to get 5GB.
My lines:
$ssd_tier = New-StorageTier -StoragePoolFriendlyName “SnabbPool” -FriendlyName SSD_Tier -MediaType SSD
$hdd_tier = New-StorageTier -StoragePoolFriendlyName “SnabbPool” -FriendlyName HDD_Tier -MediaType HDD
New-VirtualDisk -StoragePoolFriendlyName “SnabbPool” -FriendlyName TierdDisk1 –StorageTiers @($ssd_tier, $hdd_tier) -StorageTierSizes @(110GB,2700GB) -ResiliencySettingName Mirror -WriteCacheSize 5GB -NumberOfColumns 1