Su Windows Server 2022 può capitare che la deduplicazione non elabori i file su un volume appena formattato e già abilitato: Start-DedupJob
termina subito, nessun errore nei log e nessun risparmio di spazio. Ecco una guida pratica per sbloccare la situazione senza ricorrere subito al re‑format.
Scenario e sintomi
Il caso tipico è questo: si crea o si riformatta un volume, si abilita la deduplicazione dati e si copiano file “deduplicabili”. Quando si avvia manualmente un job di ottimizzazione con Start-DedupJob -Type Optimization -Volume X:
il comando restituisce immediatamente il prompt. In Deduplication/Operational non compaiono errori, lo spazio usato non cambia e Get-DedupStatus
non mostra attività. Riformattare il volume e ricominciare da zero sembra l’unica azione risolutiva, ma è onerosa. La buona notizia: nella maggior parte dei casi si tratta di metadati incoerenti o di parametri che escludono i file, e si può recuperare senza distruggere i dati.
Perché accade
- Metadati non inizializzati o incoerenti: il catalogo Dedup sul volume (archiviato in System Volume Information) può restare in uno stato che fa “saltare” l’analisi.
- Nessun file in policy: per impostazione predefinita la deduplica ignora file più piccoli di ~32 KB, più grandi di ~1 TB e più “giovani” del valore MinimumFileAgeDays (generalmente 3 giorni). Su dataset di test appena copiati, il job finisce subito perché non trova candidati.
- Pianificazione e trigger non allineati: finestre di manutenzione che non partono o partono quando il server è in uso intenso, con throttling aggressivo.
- Job scheduler in stallo: rari casi in cui una coda “fantasma” o un job sospeso impedisce nuova attività.
- Problemi I/O o antivirus: latenza disco anomala o prodotti di sicurezza che scandagliano la cartella Dedup possono fermare i job senza errori espliciti.
Risposta rapida
Prima di pensare al re‑format, esegui la seguente sequenza sul volume interessato (sostituisci X:
con la lettera corretta):
$vol = 'X:'
Verifica stato e servizio
Get-Service -Name ddpsvc | Format-Table Status,Name,DisplayName
Update-DedupStatus -Volume $vol
Get-DedupStatus -Volume $vol | Format-List *
Rendi deduplicabili anche i file appena copiati
Set-DedupVolume -Volume $vol -MinimumFileAgeDays 0
Disabilita e riabilita per ricostruire il catalogo senza toccare i dati
Disable-DedupVolume -Volume $vol
Enable-DedupVolume -Volume $vol
Rimuovi eventuale stato di ottimizzazione incoerente
Start-DedupJob -Type Unoptimization -Volume $vol -Confirm:$false
Garbage Collection completo sui metadati
Start-DedupJob -Type GarbageCollection -Volume $vol -Full
(Opzionale) Scrubbing approfondito dei chunk
Start-DedupJob -Type Scrubbing -Volume $vol -Full
Avvia l’ottimizzazione vera e propria
Start-DedupJob -Type Optimization -Volume $vol
Monitora in tempo reale
Get-DedupJob -Volume $vol -IncludeCompleted | Format-Table Type,State,StartTime,Progress,Throughput
Nella maggior parte dei casi vedrai nuovamente avanzare i job e variare i contatori InPolicyFiles, OptimizedFiles e SpaceSavings.
Procedura guidata di ripristino
Avvio parallelo controllato
Se hai più volumi con deduplica, avvia in parallelo un Optimization su quelli che hanno dati idonei. Lavorare in contemporanea talvolta “sblocca” lo scheduler. Usa il parallelismo con giudizio (monitorando CPU, RAM e I/O):
Start-DedupJob -Type Optimization -Volume D:
Start-DedupJob -Type Optimization -Volume E:
Start-DedupJob -Type Optimization -Volume F:
Controlla con Get-DedupJob
che lo stato diventi Running e che il Progress aumenti.
Rigenerazione del catalogo
Disabilitare e riabilitare la deduplicazione sul volume forza la rigenerazione dei metadati senza toccare i file:
Disable-DedupVolume -Volume X:
Enable-DedupVolume -Volume X:
Dopo il ri‑enable, lancia un Optimization o, se sospetti stato sporco, un Unoptimization seguito da GarbageCollection completo.
Unoptimization per ripartire pulito
Unoptimization rimuove lo stato di ottimizzazione registrato, costringendo Dedup a rianalizzare i file:
Start-DedupJob -Type Unoptimization -Volume X:
Enable-DedupVolume -Volume X: # nel caso fosse stato disabilitato
Start-DedupJob -Type Optimization -Volume X:
Garbage Collection e Scrubbing
GarbageCollection -Full elimina chunk orfani e riallinea il catalogo; Scrubbing -Full verifica l’integrità dei chunk ed è utile se sospetti corruzione silente:
Start-DedupJob -Type GarbageCollection -Volume X: -Full
Start-DedupJob -Type Scrubbing -Volume X: -Full
Reinstallazione del ruolo
Se i job restano inerti e i log non aiutano, valuta la rimozione e reinstallazione del ruolo Data Deduplication (con riavvio intermedio):
Get-WindowsFeature FS-Data-Deduplication
Remove-WindowsFeature FS-Data-Deduplication
Restart-Computer
Add-WindowsFeature FS-Data-Deduplication
Al termine, abilita nuovamente sul volume e ripeti i job di GarbageCollection e Optimization.
Soluzioni proposte nella discussione
Passo | Descrizione | Comando o azione |
---|---|---|
1. Avviare più job contemporanei solo se disponibili risorse | Se esistono job pianificati su altri volumi, lanciarli in parallelo può aiutare a “sbloccare” l’attività sospesa, purché CPU e I/O lo consentano. | Start-DedupJob -Type Optimization -Volume X (su più volumi in parallelo) |
2. Disabilitare e riabilitare Dedup sul volume | Forza la rigenerazione del catalogo metadati senza toccare i dati. | Disable-DedupVolume -Volume X Enable-DedupVolume -Volume X |
3. Eseguire un job di Unoptimization | Rimuove manualmente lo stato di ottimizzazione così da ricominciare l’analisi. | Start-DedupJob -Type Unoptimization -Volume X poi di nuovo Enable-DedupVolume |
4. Eseguire Garbage Collection mirata | Utile se il problema dipende da metadati orfani. | Start-DedupJob -Type GarbageCollection -Volume X -Full |
5. Reinstallare il ruolo Deduplication | Estremo rimedio: rimuove il feature, riavvio, reinstallazione. | Server Manager / Remove-WindowsFeature FS-Data-Deduplication e poi Add-WindowsFeature |
Controlli preliminari che fanno la differenza
Verifica delle soglie dimensionali e dell’età dei file
Se stai testando con pochi file appena copiati, è molto probabile che non rientrino nella policy. Imposta temporaneamente l’età minima a 0
per rendere eleggibili i file “freschi” e verifica i limiti di dimensione:
Set-DedupVolume -Volume X: -MinimumFileAgeDays 0
Get-DedupVolume -Volume X: | Select-Object Volume, MinimumFileAgeDays, ExcludeFileType
Ricorda che file < 32 KB o > 1 TB (default) vengono ignorati. Per un test rappresentativo, usa un set di file medi (decine di MB) con contenuti ripetitivi o ridondanti.
Pianificazione e trigger
Get-DedupSchedule | Format-Table Name,Type,Days,Start,DurationHours,Enabled
Assicurati che gli slot non coincidano con finestre a forte carico. Se necessario, crea una schedule ad hoc per il recupero:
New-DedupSchedule -Name 'Recovery' -Type Optimization -Start (Get-Date).AddMinutes(5) -DurationHours 12 -Days Monday,Tuesday,Wednesday,Thursday,Friday -Enabled $true
Analisi dello stato del volume
Update-DedupStatus -Volume X:
Get-DedupStatus -Volume X: | Format-List *
Get-DedupVolume -Volume X: | Format-List *
Get-DedupJob -Volume X: -IncludeCompleted
Controlla con attenzione: InPolicyFilesCount, OptimizedFilesCount, SpaceSavings, LastOptimizationTime, DedupMode e lo State dei job correnti.
Log dedicati
Apri Applications and Services Logs → Microsoft → Windows → Deduplication/Operational e filtra gli eventi chiave: 102 (Optimization), 204 (Garbage Collection), 4097 (Metadata corruption). Puoi farlo anche via PowerShell:
$log = 'Microsoft-Windows-Deduplication/Operational'
Get-WinEvent -LogName $log | Where-Object { $_.Id -in 102,204,4097 } |
Select-Object TimeCreated, Id, LevelDisplayName, Message |
Format-Table -Wrap
Salute del disco e interferenze
- Controlla SMART e latenze: un disco lento o con errori può far terminare i job senza progressi tangibili.
- Escludi dall’antivirus System Volume Information\Dedup e ChunkStore per evitare lock indesiderati.
Diagnostica approfondita delle policy
La deduplicazione applica criteri a livello di volume. Ecco i più rilevanti e come modificarli per il troubleshooting.
Parametro | Significato | Comando | Valore consigliato per test |
---|---|---|---|
MinimumFileAgeDays | Età minima dei file per essere candidati | Set-DedupVolume -MinimumFileAgeDays 0 | 0 durante il test, poi ripristina (es. 3) |
ExcludeFileType | Tipi file esclusi | Set-DedupVolume -ExcludeFileType .pst,.vhdx (esempio) | Verifica che i formati di test non siano esclusi |
ExcludeFolder | Cartelle escluse | Set-DedupVolume -ExcludeFolder 'Temp','Backup' | Evita che i file di test ricadano in esclusioni |
ReadOnlyMode | Volume in sola lettura per Dedup | Get-DedupVolume | Select ReadOnlyMode | Assicurati sia False |
Interpretare correttamente Get-DedupStatus
Alcuni indicatori chiave:
- InPolicyFilesCount: numero di file che soddisfano la policy; se è zero, il job di ottimizzazione non ha lavoro da svolgere.
- OptimizedFilesCount / OptimizedFilesSize: conteggi e dimensioni dei file già ottimizzati.
- SpaceSaved / SavingsRate: risparmio totale e percentuale; controlla che crescano dopo l’ottimizzazione.
- LastOptimizationTime: utile per capire se un job è realmente partito di recente.
- DedupMode: stato del volume rispetto a Dedup (abilitato, in manutenzione, ecc.).
Flusso decisionale suggerito
- Conferma i prerequisiti: ruolo installato, servizio
ddpsvc
Running, file system supportato, volumi integri. - Azzeramento policy bloccanti:
MinimumFileAgeDays
a 0 e verifica esclusioni. - Rigenerazione catalogo: Disable/Enable sul volume.
- Unoptimization → GarbageCollection → Scrubbing.
- Optimization e monitoraggio
Get-DedupJob
eGet-DedupStatus
. - Reinstallazione del ruolo se persiste lo stallo; solo in ultima istanza valuta il re‑format del volume.
Script di recupero pronto all’uso
Questo script esegue in sicurezza la catena di azioni consigliate su un volume; registra un log minimale in C:\Temp\Dedup-Recovery.log
.
param(
[Parameter(Mandatory)][ValidatePattern('^[A-Z]:$')]
[string]$Volume
)
$ErrorActionPreference = 'Stop'
$log = 'C:\Temp\Dedup-Recovery.log'
New-Item -ItemType Directory -Path (Split-Path $log) -Force | Out-Null
function Write-Log($msg){ $ts = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'; "$ts`t$msg" | Tee-Object -FilePath $log -Append }
try {
Write-Log "=== Dedup Recovery avviato su $Volume ==="
Write-Log "Servizio dedup: $(Get-Service ddpsvc | Select-Object -ExpandProperty Status)"
Set-DedupVolume -Volume $Volume -MinimumFileAgeDays 0
Write-Log "MinimumFileAgeDays impostato a 0"
Disable-DedupVolume -Volume $Volume
Enable-DedupVolume -Volume $Volume
Write-Log "Dedup disabilitata/riabilitata"
Start-DedupJob -Type Unoptimization -Volume $Volume -Confirm:$false
Write-Log "Job Unoptimization avviato"
Start-DedupJob -Type GarbageCollection -Volume $Volume -Full
Write-Log "Job GarbageCollection -Full avviato"
Start-DedupJob -Type Scrubbing -Volume $Volume -Full
Write-Log "Job Scrubbing -Full avviato"
Start-DedupJob -Type Optimization -Volume $Volume
Write-Log "Job Optimization avviato"
Update-DedupStatus -Volume $Volume
$st = Get-DedupStatus -Volume $Volume
Write-Log ("Status: InPolicy={0}, Optimized={1}, Savings={2:N2}%" -f `
$st.InPolicyFilesCount, $st.OptimizedFilesCount, $st.SavingsRate)
}
catch {
Write-Log "Errore: $($_.Exception.Message)"
throw
}
finally {
Write-Log "=== Dedup Recovery completato su $Volume ==="
}
Verifiche infrastrutturali e performance
- CPU e RAM: Dedup è CPU‑intensiva; durante il recupero evita carichi concorrenti (backup/compressioni).
- I/O: monitora latenza medio‑alta sul volume; se la coda disco è costantemente elevata, i job possono rallentare o fermarsi.
- Antivirus/EDR: escludi la cartella Dedup e i processi di sistema coinvolti, altrimenti si generano lock.
- Backup e snapshot: alcune soluzioni di backup possono interferire con i lock del ChunkStore; prova a fermarle temporaneamente durante i job di recupero.
Domande frequenti
Posso eliminare manualmente la cartella Dedup dal volume?
Fortemente sconsigliato. Usa Unoptimization, GarbageCollection e Scrubbing. La rimozione manuale può corrompere definitivamente lo stato.
Qual è un buon dataset per testare?
File tra 1 MB e 1 GB con ridondanza intrinseca (ad esempio librerie, ISO simili o set di log ripetitivi). Evita pochi file enormi o migliaia di file minuscoli.
Quanto lasciare MinimumFileAgeDays a zero?
Solo per il troubleshooting. In produzione ripristina un valore conservativo (es. 3–7 giorni) per ridurre rielaborazioni inutili su file frequentemente modificati.
È supportato su tutti i file system?
La deduplicazione è pensata per volumi supportati da Windows Server 2022; verifica sempre i requisiti del tuo scenario e della tua edizione prima di abilitarla su nuovi volumi.
Check‑list operativa pronta
- Imposta
MinimumFileAgeDays = 0
e rimuovi esclusioni che toccano il dataset. Disable-DedupVolume
→Enable-DedupVolume
.Start-DedupJob -Type Unoptimization
.Start-DedupJob -Type GarbageCollection -Full
e, se opportuno,-Type Scrubbing -Full
.Start-DedupJob -Type Optimization
e monitoraggio conGet-DedupJob
.- Controllo log eventi 102, 204, 4097 e stato con
Get-DedupStatus
. - Se tutto fallisce: reinstallazione ruolo Deduplication; re‑format solo come ultima risorsa.
Best practice per evitare recidive
- Automatizza un controllo settimanale: esporta
Get-DedupStatus
,Get-DedupJob
e un estratto dei log eventi; conserva lo storico per trend. - Cap con policy realistiche: non esasperare con età minima a 0 in produzione; usa schedule notturne e finestra di manutenzione ampia.
- Capacità: lascia margine di spazio libero (almeno 10–15%) per permettere a Dedup di lavorare senza frammentazione eccessiva.
- Integrazione con backup: coordina i job Dedup con il piano di backup per evitare scansioni doppie sui medesimi file.
- Esclusioni antivirus: definiscile una volta sola e verificale dopo ogni aggiornamento del prodotto di sicurezza.
Conclusioni
Il comportamento “fa nulla e finisce” di Start-DedupJob
su Windows Server 2022 è quasi sempre riconducibile a metadati incoerenti o a policy troppo restrittive che escludono i file. Prima di ricorrere alla riformattazione, applica la sequenza di recupero: disabilita/riabilita, esegui Unoptimization, quindi GarbageCollection (e, se necessario, Scrubbing) e infine rilancia l’Optimization. In parallelo controlla soglie, stato e log dedicati. Solo se il problema persiste dopo queste azioni valuta la reinstallazione del ruolo Deduplication o, davvero in ultima istanza, il re‑format del volume. Con questa checklist la deduplicazione tornerà operativa nella maggior parte delle situazioni senza tempi morti e senza perdita di dati.