sembrerebbe fare al caso in esame, e lo proverò appena possibile.
Chiedevo se qualcuno ha già esperienze in merito da condividere 😊
grazie
Best answer by DChiavari
Si, sicuramente in ambienti più grandi con migliaia di restore point usare Get-VBRBackup senza alcun parametro/filtro può essere lento…
# Get backups (if no filter is specified, all backups) $backups = Get-VBRBackup
Come detto, il mio script è giusto un “semilavorato” che sicuramente va calato con delle modifiche nel contesto specifico dell’ambiente.
Ad esempio, come possibile ottimizzazione, si potrebbe filtrare a priori, includendo solo i backup generati dai job che hanno la retention GFS abilitata. Questo dovrebbe far guadagnare in performance.
# Initialize variables to store the count and total size of GFS restore points $gfsRestorePoints = @() $totalSize = 0
# Get only Backup Jobs (and Backup Copy Jobs) for which GFS retention is enabled $gfsJobs = @() $gfsBackups = @() foreach ($bkJob in $(Get-VBRJob)) { $job_options = Get-VBRJobOptions -Job $bkJob if ($job_options.Gfspolicy.IsEnabled -eq $True) { $gfsJobs += $bkJob $gfsBackups += $(Get-VBRBackup -Name $bkJob.Name) } }
# Get Restore Points for GFS Backups foreach ($backup in $gfsBackups) { $childBackups = $backup.FindChildBackups() $restorePoints = Get-VBRRestorePoint -Backup $childBackups
# Cycle through Restore Points and check if they are GFS Fulls foreach ($rp in $restorePoints) { $storage = $rp.GetStorage() if ($storage.GfsPeriod -ne "None") { $gfsRestorePoints += $storage | select @{n='Name';e={$rp.Name}}, GfsPeriod, CreationTime, @{n='Size (GB)';e={[math]::Round($_.Stats.BackupSize / 1GB, 2)}} $totalSize += [math]::Round($storage.Stats.BackupSize / 1GB, 2) } } }
# Print out GFS restore points in a table $gfsRestorePoints | ft -AutoSize
# Communicate results Write-Host "Total number of GFS restoe points: " $gfsRestorePoints.Count Write-Host "Total size of GFS restore points : " $totalSize " GB"
Nel mio mini-ambiente di test, dove comunque lo script impiegava poco anche prima, la differenza è stata significativa (circa 4.5x):
Non è necessario che tu calcoli lo spazio occupato dagli attuali backup. Basta inserire lo spazio occupato dai server in produzione e la retention che vuoi raggiungere. Il resto lo fa tutto lui.
Se dovesse essere utile, questo script “semi-lavorato” può aiutare a ricavare velocemente i backup GFS e la loro dimensione:
sto provando lo script ma forse su un VBR molto “grande” il tempo impiegato diventa molto elevato (ieri l’ho lasciato girare per alcune ore). Vi aggiorno se riesco a vederlo terminare e/o lo provo su un VBR di dimensioni più modeste.
Si, sicuramente in ambienti più grandi con migliaia di restore point usare Get-VBRBackup senza alcun parametro/filtro può essere lento…
# Get backups (if no filter is specified, all backups) $backups = Get-VBRBackup
Come detto, il mio script è giusto un “semilavorato” che sicuramente va calato con delle modifiche nel contesto specifico dell’ambiente.
Ad esempio, come possibile ottimizzazione, si potrebbe filtrare a priori, includendo solo i backup generati dai job che hanno la retention GFS abilitata. Questo dovrebbe far guadagnare in performance.
# Initialize variables to store the count and total size of GFS restore points $gfsRestorePoints = @() $totalSize = 0
# Get only Backup Jobs (and Backup Copy Jobs) for which GFS retention is enabled $gfsJobs = @() $gfsBackups = @() foreach ($bkJob in $(Get-VBRJob)) { $job_options = Get-VBRJobOptions -Job $bkJob if ($job_options.Gfspolicy.IsEnabled -eq $True) { $gfsJobs += $bkJob $gfsBackups += $(Get-VBRBackup -Name $bkJob.Name) } }
# Get Restore Points for GFS Backups foreach ($backup in $gfsBackups) { $childBackups = $backup.FindChildBackups() $restorePoints = Get-VBRRestorePoint -Backup $childBackups
# Cycle through Restore Points and check if they are GFS Fulls foreach ($rp in $restorePoints) { $storage = $rp.GetStorage() if ($storage.GfsPeriod -ne "None") { $gfsRestorePoints += $storage | select @{n='Name';e={$rp.Name}}, GfsPeriod, CreationTime, @{n='Size (GB)';e={[math]::Round($_.Stats.BackupSize / 1GB, 2)}} $totalSize += [math]::Round($storage.Stats.BackupSize / 1GB, 2) } } }
# Print out GFS restore points in a table $gfsRestorePoints | ft -AutoSize
# Communicate results Write-Host "Total number of GFS restoe points: " $gfsRestorePoints.Count Write-Host "Total size of GFS restore points : " $totalSize " GB"
Nel mio mini-ambiente di test, dove comunque lo script impiegava poco anche prima, la differenza è stata significativa (circa 4.5x):