This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Repository Sizing - Calculations

Hey,

I have been asked to put together some full calculations for sizing a new Repository, 

Reading through the sizing document its stating the multiplier as 1.4x where x = total amount protected. +- .2 per 10% 

and then adding  .5 year year etc, 

anyhow long and short of it  just wondered if anyone had already made  calculator that could help

Cheers

  • Hi Teh_May:
    Please check the Rapid Recovery sizing guide that can be downloaded here. If you are interested in more Rapid Recovery Technical documentation, please check this link. (It contains the sizing guide referenced above as well).

    These being said, and leaving the generalities aside, sizing is more an art than an established science. However, the first thing to do is to figure out how much data you protect, then to estimate the IOPS available for your storage. The first shows you where to start when plan for the repository size, the second how much load your storage can take (the idea is to be able to perform all desired tasks in 24 hour cycles). Memory is important (although not as much as some would believe) and the CPU power comes the last as most modern XEON based two sockets machines would do.

    A few years ago I have written a PowerShell script that would collect the storage information from multiple machines in a Windows environment and performs some rough calculations re the repository size (you need to run it from a machine you are logged in with domain admin permissions). Although I do things differently now, the code still has its value. Since I cannot attach files to a post and it is only slightly over 100 lines, I will paste it below as an example (disclaimer below). If you decide to look at it, please make sure that all lines are complete (some may be broken).

    Disclaimer:
    This script is provided "as is" for the purpose of illustrating how AppAssure/RapidRecovery tasks may be performed in conjunction with Powershell.  AppAssure/RapidRecovery shall not be liable for any direct, indirect, incidental, consequential, or other damage alleged in connection with the furnishing or use of this script or of the principles it demonstrates.

    #this script is meant to assist in sizing an AppAssure Repository.
    #it gets all the drives belonging to the computers
    #with names included in a text files, calculates the total size of those drives,
    #the total volume of used and free space, and gives some indications as of
    #to size the repository
    #For simplicty, the script uses the credentials of the current user
    #Since a function [Get-Disk] is used, in order to avoid placing the function code at the
    #beginning of the script, Process{} and Begin{} blocks are used
    Process{
    Write-host ""
    Write-host "Get The Size of the Hard Drives from a list of Servers"
    Write-Host "and Repository Sizing"
    Write-host "______________________________________________________"
    Write-host ""
    #default path of the file with the servers' names. Change with your preferred one.
    $defaultFile = "c:\temp\agents.txt"
    #default coeficient
    $defaultk = 1.2
    [double]$test = $null
    #get the new coeficient and validate it
    do{
    $k = Read-Host "Repository Coeficient [default $defaultk]"
    if ($k -eq ""){$k = $defaultk}
    Write-host "Selected Repository Coeficient is: $k`r`n"
    try{$test = $k}catch{Write-Host "Not a Number... Try again`r`n" -f "yellow"}
    }
    until (($test -ne 0))
    #get an alternate protected server file path interractively
    Do {
    $Agents = Read-Host "Path to the server list. [$($defaultFile)]"
    if($Agents -eq ""){$Agents=$defaultFile}
    }
    while (!(Test-Path $Agents -PathType Leaf))
     
    #get the object with the information; Eliminate unecessary error messages while keeping the ones that matter
    #Kept error messages allowing identifying the servers that fail to connect
    #get all volumes
    $disks0 = Get-Content $Agents -ErrorAction stop | where {Test-Connection $_  -count 2 -ErrorAction Inquire 2>null} | get-disk
    #show volumes to remove
    $disks1 = $disks0 | out-gridview -title "Select The Volumes To Remove From Assesment" -Passthru
    #remove the volumes selected above
    if($disks1 -ne $null){$disks = compare-object $disks0 $disks1 -property Computername,DeviceId -passthru | where-object {$_.sideindicator -eq "<="}}
    else {$disks = $disks0}
    #show general information
    Write-Host "General Info:" -f "Green"
    $disks | Format-Table -Property Computername,DeviceId,Size_GB],Free_GB,Used_GB,PerFree -AutoSize
     
    Write-host "`r`n`r`n"
    Write-Host "Totals:" -f "Green"
    #Attempt changing color [may or may not work]
    $originalcolor = $Host.ui.rawui.ForegroundColor
    #Show results
    $disks | measure-object size*,used*,Free* -sum |Format-Table -autosize @{name="HDs";Expression={$_.count}},
    @{name="Value";Expression={$_.Property}},
    @{name="Totals";Expression={"{0:N2}GB" -f $($_.Sum)}},
    @{name="Estimated Repository Size";Expression={if($_.Property -ne "Free_GB"){$Host.ui.rawui.ForegroundColor="Yellow";"{0:N2}GB" -f $($_.Sum * $k);$Host.ui.rawui.ForegroundColor=$originalcolor}} }
    $Host.ui.rawui.ForegroundColor=$originalcolor
    }

    #Begin Block to host the function
    Begin{
    Function Get-Disk{
    #just in case, default machine as a parameter if nothing is piped in.
    Param([string] $computername=$env:computername)
    #Process block to repeat the operation for each entry in the pipe
    Process {
                    if ($_) {
                                    $computername=$_
                            }
    #Try-Catch block for errors caused by machines refusing to send data (most likely permissions)
    try{
                $z =  Get-WmiObject win32_logicaldisk -filter “drivetype=3” -computer $computername
    }
    catch { Write-host "computer '$($computername)' data collection failed [Check Permissions!]" }
    #Prepare results
                $z |Select @{name="Computername"; Expression={$_.SystemName}}, DeviceId,
               
                    @{name="FileSystem"; Expression={$_.filesystem}},
                    @{name="Size_GB";Expression={"{0:N2}" -f ($_.size/1GB)}},              
                    @{name="Free_GB";Expression={"{0:N2}" -f ($_.FreeSpace/1GB)}},
                    @{name="Used_GB";Expression={"{0:N2}" -f (($_.Size -$_.FreeSpace)/1GB)}},
                    @{name="PerFree";Expression={"{0:P2}" -f ($_.FreeSpace/$_.Size)}}
     
              }
    }
    }
  • Thanks Tudor that script looks interesting.
  • I found this (below) when I was searching for such a tool based on a formula like this.

    http://rps.dewin.me/
  • Hi Corrigun:
    Nice App -- it works specifically for Veeam 7 & 8 though. Without false boasting, in most cases, real life RapidRecovery dedupe/compression is much better. However, the tool itself is very nicely done with the simplicity that derives from fully understanding the issue at hand (I looked in the code & at GitHub as well). Will show it to our dev team as an example of what can be done. Thank you for sharing!
  • Yes I knew it was a Veeam thing linked from their forum by one of their users but it seemed like it was as close as I was likely to find.

    I used it to size our current RR repository and was happy to find that I had extra wiggle room when all was said and done. Like you said RR is clearly doing better job overall of dedup and compression.