#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : Data Deduplication jobs fail or stop reclaiming space Fix : Check eligibility, then the schedule Source: https://jbtecwiz.com/support/srv-sto-dedup Run as : Elevated PowerShell Expect : 45 minutes Risk : low Reversible : yes WHEN THIS IS THE RIGHT FIX Savings are not what is expected. HOW TO UNDO IT Set-DedupVolume can restore the previous settings. Start-DedupJob -Type Unoptimization reverses deduplication entirely, given enough free space. This script walks the fix one step at a time and asks before each one. Steps with no command are things you do yourself -- it prints those and waits. Run with -DryRun to print without executing. -------------------------------------------------------------------- NO WARRANTY - USE AT YOUR OWN RISK This script is provided by JbTecWiz as-is and with no warranty of any kind, express or implied. You run it entirely at your own risk. JbTecWiz accepts no liability for any loss or damage arising from its use, including but not limited to data loss, downtime, or configuration changes that turn out to be wrong for your system. You are responsible for reading this script before running it, for satisfying yourself that it suits the machine in front of you, and for having a working backup first. Some steps cannot be undone. -------------------------------------------------------------------- #> [CmdletBinding()] param( # Print every step and command without running anything. [switch]$DryRun, # Do not ask before each step. Read the script first if you use this. [switch]$Unattended ) $ErrorActionPreference = 'Stop' $script:Failed = 0 function Write-Rule { param([string]$Text) Write-Host '' Write-Host ('-' * 70) -ForegroundColor DarkGray if ($Text) { Write-Host $Text -ForegroundColor Cyan } } function Show-Prose { param([string]$Text, [string]$Colour = "Gray") if (-not $Text) { return } $words = $Text -split "\s+"; $line = " " foreach ($w in $words) { if (($line.Length + $w.Length) -gt 74) { Write-Host $line -ForegroundColor $Colour; $line = " " } $line += "$w " } if ($line.Trim()) { Write-Host $line -ForegroundColor $Colour } } function Invoke-Step { param( [int]$Number, [string]$Do, [string]$Why, [scriptblock]$Command, [switch]$Manual, [string]$Shell = "powershell" ) Write-Rule " Step $Number of 6" Show-Prose $Do "White" if ($Why) { Write-Host ""; Show-Prose $Why "DarkGray" } if ($Manual) { Write-Host '' Write-Host ' -> Do this yourself, then press Enter to carry on.' -ForegroundColor Yellow if (-not $Unattended -and -not $DryRun) { [void](Read-Host) } return } Write-Host '' foreach ($l in ($Command.ToString().Trim() -split "`n")) { Write-Host (" " + $l.Trim()) -ForegroundColor Green } Write-Host '' if ($DryRun) { Write-Host " (dry run -- not executed)" -ForegroundColor DarkGray; return } if (-not $Unattended) { $a = Read-Host " Run this step? [Y]es / [S]kip / [Q]uit" if ($a -match "^[Qq]") { Write-Host " Stopped at your request."; exit 0 } if ($a -match "^[Ss]") { Write-Host " Skipped." -ForegroundColor DarkGray; return } } try { & $Command } catch { $script:Failed++ Write-Host (" Step $Number failed: " + $_.Exception.Message) -ForegroundColor Red Show-Prose "The rest of the fix may depend on this. Read the write-up before carrying on." "Red" if (-not $Unattended) { $c = Read-Host " Carry on anyway? [y/N]" if ($c -notmatch "^[Yy]") { exit 1 } } } } Write-Rule Write-Host ' Data Deduplication jobs fail or stop reclaiming space' -ForegroundColor White Write-Host ' Check eligibility, then the schedule' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: low Reversible 45 minutes' Write-Host '' Show-Prose 'No warranty. Use at your own risk - JbTecWiz accepts no liability. Read it before you run it, and have a backup.' 'DarkYellow' Write-Rule if (-not $Unattended -and -not $DryRun) { $go = Read-Host ' Ready? [y/N]' if ($go -notmatch "^[Yy]") { Write-Host " Nothing was changed."; exit 0 } } Invoke-Step -Number 1 -Do 'Check the status and what has actually been optimised.' -Command { Get-DedupStatus | Format-List Volume,Capacity,SavedSpace,SavingsRate,OptimizedFilesCount,InPolicyFilesCount,LastOptimizationResult } Invoke-Step -Number 2 -Do 'Compare InPolicyFilesCount against the total. A low number means the files are not eligible, not that deduplication is failing.' -Why 'The default minimum file age is three days, and several file types are excluded outright. A volume of files written yesterday will show zero savings and nothing is wrong with it.' -Command { Get-DedupVolume | Format-List Volume,MinimumFileAgeDays,ExcludeFileType,ExcludeFolder,UsageType } Invoke-Step -Number 3 -Do 'Adjust the minimum age if the workload justifies it.' -Command { Set-DedupVolume -Volume E: -MinimumFileAgeDays 1 } Invoke-Step -Number 4 -Do 'Check the job schedule and whether jobs are completing inside their window.' -Command { Get-DedupSchedule | Format-Table Name,Type,Enabled,Days,Start,DurationHours,Memory Get-DedupJob | Format-Table Type,Volume,Progress,State } Invoke-Step -Number 5 -Do 'Give the optimisation job more memory and a longer window on a large volume.' -Command { Set-DedupSchedule -Name BackgroundOptimization -Memory 50 -DurationHours 9 -Priority Normal } Invoke-Step -Number 6 -Do 'Run garbage collection and scrubbing manually to reclaim space from deleted files.' -Why 'Deleting a file does not return its space immediately -- the chunks remain until garbage collection runs. A volume that has had a large deletion will not show the space back until this completes.' -Command { Start-DedupJob -Volume E: -Type GarbageCollection -Full Start-DedupJob -Volume E: -Type Scrubbing } Write-Rule " Confirm it worked" Show-Prose 'Get-DedupStatus shows a rising savings rate and the last job result is success.' 'White' Write-Host '' if (-not $DryRun) { Get-DedupStatus | Format-List Volume,SavingsRate,LastOptimizationResult,LastGarbageCollectionResult } Write-Rule if ($script:Failed -gt 0) { Write-Host (" Finished with " + $script:Failed + " failed step(s).") -ForegroundColor Yellow Show-Prose 'Read the full write-up at https://jbtecwiz.com/support/srv-sto-dedup' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: Set-DedupVolume can restore the previous settings. Start-DedupJob -Type Unoptimization reverses deduplication entirely, given enough free space.' 'DarkGray' Write-Rule