A little fling ... a simple calculator that answers the
question “How many RAID groups should I have, and what size should the RAID
groups be?” depending on various inputs.
Firstly, a screenshot to illustrate how the tool works,
and how to use it:
Image: Using
RaidGroupsCalculator.ps1
The Script
#######################################
## RaidGroupCalculator.ps1 (RAID-DP) ##
#######################################
Param(
[Parameter(Mandatory=$True,HelpMessage="Number of shelves on the
node/HA-pair.")]
[Int]$ShelfCount,
[Parameter(Mandatory=$True,HelpMessage="If you have root disks on
these shelves, then 3 for a node, 6 for a HA-pair, otherwise 0.")]
[Int]$RootDisks,
[Parameter(Mandatory=$True,HelpMessage="Number of spares on the
node/HA-pair.")]
[Int]$SparesCount,
[Parameter(Mandatory=$True,HelpMessage="Number of other disks (like
you might have 4 SSDs in a SAS shelf).")]
[Int]$OtherDisks,
[Parameter(Mandatory=$True,HelpMessage="Number of disks in a shelf
(usually 24, but might be 48).")]
[Int]$DisksInShelf,
[Parameter(Mandatory=$True,HelpMessage="Target RAID group size.`n
TYPE # Default => Maximum`n SSD # 23 => 28`n SAS/FC # 16 => 28`n SATA
# 14 => 20`n 6TB MSATA # 14 => 14")]
[Int]$TargetRaidGroupSize
)
## ===== CALCULATION ===== ##
Function
RoundUp{Param([Double]$N);[Int][Math]::Ceiling($N)}
[Int]$AvailableDisks
= ($ShelfCount * $DisksInShelf) - $RootDisks - $SparesCount - $OtherDisks
[Int]$RaidGroups =
RoundUp($AvailableDisks/$TargetRaidGroupSize)
[Int]$AvrgRGsize = RoundUp($AvailableDisks/$RaidGroups)
[Int]$LastRGsize = $AvailableDisks - (($RaidGroups
-1)*$AvrgRGsize)
[Int]$Balancer = RoundUp(($AvrgRGsize - $LastRGsize) /
$RaidGroups)
[System.Array]$Output
= @()
For($i=1;$i
-lt $RaidGroups;$i++){
If(($LastRGsize + $Balancer) -lt $TargetRaidGroupSize){
$Output
+= ($AvrgRGsize - $Balancer)
$LastRGsize += $Balancer
}else{ $Output += $AvrgRGsize }
}
$Output
+= $LastRGsize;""
## ===== OUTPUT ===== ##
">>>>>
RAID Groups Size Calculator (RAID-DP) <<<<<";""
"Shelf
Count = " +
[String]$ShelfCount
"Root
Disks Count = " +
[String]$RootDisks
"Spares
Count = " +
[String]$SparesCount
"Other
Disks Count = " + [String]$OtherDisks
"Disks
In a Shelf = " +
[String]$DisksInShelf
"Target
RG Size = " + [String]$TargetRaidGroupSize;""
"Raid
Group Count = " +
[String]$RaidGroups
"Data
Disks Count = " +
[String]($AvailableDisks - ($RaidGroups * 2))
"Parity
Disks = " +
[String]($RaidGroups * 2)
"Root/Spares/Other
= " + [String]($RootDisks + $SparesCount + $OtherDisks)
"TOTAL
DISKS = " +
[String]($ShelfCount * $DisksInShelf);""
"<<<<<
RAID Group Sizes >>>>>";""
$Output
= $Output | Sort -Descending
[String]$Output;""
Comments
Post a Comment