Windows Server 2022 : déduplication bloquée — le job s’exécute mais ne traite aucune donnée (diagnostic, correctifs et scripts PowerShell)

Sur Windows Server 2022, il arrive que la déduplication se lance mais ne traite aucune donnée : le job « Optimization » finit en quelques secondes, les économies restent à 0 %. Voici une procédure concrète pour diagnostiquer et corriger, sans reformater ni perdre de données.

Sommaire

Vue d’ensemble de la question

Scénario typique : vous formatez un volume, activez la déduplication, copiez un jeu d’essai tout neuf puis exécutez Start-DedupJob (type Optimization, valeur par défaut). Le job aboutit presque instantanément : aucun bloc n’est traité, l’économiseur de stockage reste à 0 %, et rien d’alarmant n’apparaît dans le journal d’événements. La tentation est grande de reformater et de tout recommencer — solution lourde, risquée et inutile dans la majorité des cas.

Ce guide propose une méthode pas à pas pour remettre le moteur de déduplication en état, comprendre pourquoi il ne « voit » rien à optimiser et relancer un traitement complet, le tout en production et sans remise à zéro du volume.

Pourquoi le job s’arrête aussitôt ?

  • Seuils d’éligibilité non respectés : par défaut, la déduplication ne traite que les fichiers dont l’âge minimal est supérieur à un certain nombre de jours (valeur usuelle : 3) et dont la taille minimale dépasse un seuil (usuellement ~32 KB). Des données fraîchement copiées ou très petites sont donc ignorées.
  • Règles d’exclusion : les extensions ou dossiers exclus (ExcludeFileType, ExcludeFolder) rendent certains fichiers inéligibles.
  • Fichiers ouverts en exclusif : un processus verrouille les fichiers (ex. sauvegarde en cours, antivirus, VM). La déduplication les reporte.
  • Ressources contraignantes : peu de mémoire ou de CPU libre ; le job cède la place à d’autres tâches et se termine sans action notable.
  • État interne à « nettoyer » : un précédent job a mal fini (arrêt brutal, redémarrage) et des métadonnées bloquent la reprise. Un cycle Unoptimization / Garbage Collection suffit souvent à repartir.
  • Planification et chevauchement : un horaire actif, un job concurrent ou une fenêtre trop courte empêchent l’optimisation manuelle de s’exécuter réellement.
  • Limites fonctionnelles : la déduplication n’opère pas sur le volume système, ne traite pas les fichiers au‑delà d’un certain gabarit (p. ex. > 1 To) ni ceux ouverts en exclusif. Suivant l’édition et le scénario, ReFS n’est pas toujours éligible.

Réponse & solutions proposées

Suivez les étapes ci‑dessous dans l’ordre ; elles couvrent 90 % des cas où l’optimisation termine « à vide ».

ÉtapeActionObjectif / commentaire
Vérifications rapidesGet-DedupVolume, Get-DedupStatus, Get-DedupMetadataConfirmer que le volume est bien marqué Enabled = True, qu’il reste des ressources (mémoire, CPU) et qu’aucun job bloqué n’est listé.
Forcer la « dés‑optimisation »Start-DedupJob -Type Unoptimization -Volume X:Réinitialise les états internes en réhydratant si nécessaire. Une fois terminé, relancez Start-DedupJob -Type Optimization.
Ajuster l’âge minimal des fichiersSet-DedupVolume -Volume X: -MinimumFileAgeDays 0Par défaut seuls les fichiers âgés (≥ 3 jours) sont dédupliqués ; ramener la valeur à 0 pour un dataset fraîchement copié.
Lancer le Garbage CollectionStart-DedupJob -Type GarbageCollection -Volume X: -Priority HighNettoie les blocs orphelins et débloque l’optimisation.
Désactiver / réactiver la déduplicationDisable-DedupVolume X:redémarrage du service DedupEnable-DedupVolume X:Régénère les structures logiques sans reformater. À utiliser hors pic d’activité.
Vérifier la planificationGet-DedupSchedule, éventuellement Start-DedupJob -Type Optimization -Memory 80 -Priority HighÉcarter un chevauchement ou une fenêtre trop étroite.
Dernier recours : réinstaller la fonctionnalitéUninstall-WindowsFeature FS-Data-Deduplication puis Install-WindowsFeature ...Réinitialise complètement le moteur si tout le reste échoue (prévoir une fenêtre de maintenance).

Procédure pas à pas avec commandes et sorties attendues

Vérifier l’état du volume et du service

Get-DedupVolume -Volume X: | Format-List *
Get-DedupStatus | Format-List *
Get-DedupMetadata -Volume X:
Get-Service *dedup*

Attendez‑vous à voir Enabled = True pour le volume, aucune erreur, et le service Data Deduplication (ddpsvc) en état Running. Si le service n’est pas démarré :

Start-Service -Name ddpsvc

Pour un diagnostic minimaliste, contrôlez la présence d’un job en cours :

Get-DedupJob -Volume X:

Relancer la chaîne de traitement via « Unoptimization »

Attention : la dés‑optimisation peut temporairement augmenter l’espace utilisé (réhydratation). Assurez‑vous d’avoir de la marge disque.

Start-DedupJob -Type Unoptimization -Volume X: -Priority High
# Puis, quand terminé
Start-DedupJob -Type Optimization -Volume X: -Priority High

Cette séquence force la réévaluation des éligibilités et vide certains états qui, sinon, empêchent le scanner d’identifier du travail.

Abaisser l’âge minimal des fichiers (et, si nécessaire, la taille minimale)

Sur un jeu de test fraîchement copié, la politique par défaut peut ignorer les fichiers trop « récents ». Ajustez l’âge :

Set-DedupVolume -Volume X: -MinimumFileAgeDays 0

Si votre dataset contient majoritairement de très petits fichiers, vérifiez aussi la taille minimale et adaptez‑la :

# Vérifier la valeur actuelle
(Get-DedupVolume -Volume X:).MinimumFileSize
# Éventuellement la réduire (exemple)
Set-DedupVolume -Volume X: -MinimumFileSize 0

Relancez enfin une optimisation ciblée et prioritaire :

Start-DedupJob -Type Optimization -Volume X: -Priority High -Memory 80

Nettoyer les orphelins avec Garbage Collection

Un garbage collection remet le magasin de chunks en état, purge les références obsolètes et lève les blocages silencieux :

Start-DedupJob -Type GarbageCollection -Volume X: -Priority High

Basculer la fonctionnalité (sans formater)

Une bascule contrôlée de la fonctionnalité peut suffire à reconstruire des structures internes endommagées.

Disable-DedupVolume -Volume X: -Confirm:$false
Restart-Service -Name ddpsvc
Enable-DedupVolume -Volume X: -UsageType Default
Start-DedupJob -Type Optimization -Volume X:

Valider et corriger la planification

Un horaire actif peut interrompre un job manuel (« fenêtre fermée »). Listez les schedules :

Get-DedupSchedule

Pour forcer une passe intensive ponctuelle :

Start-DedupJob -Type Optimization -Volume X: -Priority High -Memory 90

Vérifier les journaux d’événements dédiés

Ouvrez Journaux des applications et des servicesMicrosoftWindowsDeduplicationOperational et Diagnostic. Filtrez les catégories Optimization, Garbage Collection, Scrubbing. Les messages « No files to optimize » ou « Skipping file due to policy » confirment une cause « politique » (âge, taille, exclusions) plutôt qu’un incident.

Vérifications complémentaires utiles

  • Services dépendants : Data Deduplication et File Server VSS Agent Service doivent être démarrés.
  • Mémoire : sous forte pression, les jobs de déduplication se mettent en retrait. Augmentez la fenêtre (Schedule), la priorité, ou le budget via -Memory.
  • Intégrité NTFS/ReFS : exécutez chkdsk /scan X: (en ligne) ou Repair-Volume X: -Offline pendant une maintenance, pour exclure une corruption du volume.
  • Limites fonctionnelles : certains types de fichiers ou tailles extrêmes ne sont pas optimisés ; les fichiers verrouillés sont reportés. Ne ciblez jamais le volume système.
  • Surveillance : suivez Performance Monitor (compteurs Dedup IO, Jobs/sec) pour confirmer l’activité avant de conclure à un blocage.

Tableau de triage rapide

SymptômeCause probableVérificationAction
Job « Optimization » finit en < 10 sAucun fichier éligible (âge/taille)Get-DedupVolume : MinimumFileAgeDays, MinimumFileSizeSet-DedupVolume -MinimumFileAgeDays 0 et, si besoin, réduire la taille minimale.
Économies 0 % après plusieurs passesExclusions d’extensions/dossiersGet-DedupVolume | Select Exclude*Retirer/adapter les exclusions, relancer une optimisation.
Jobs démarrent mais restent « Queued »Fenêtre de planification fermée / ressourcesGet-DedupSchedule, charge CPU/RAMÉtendre la fenêtre, augmenter -Priority et -Memory.
Messages « No files to optimize »État interne à purgerJournaux Operational / DiagnosticUnoptimization puis GarbageCollection, relancer l’optimisation.
Blocage récurrent après rebootMétadonnées incohérentes / serviceGet-Service ddpsvcBascule Disable/Enable et Restart-Service ddpsvc.

Exemples de scripts prêts à l’emploi

Diagnostic express d’un volume

# Exécuter dans une console PowerShell élevée
param([Parameter(Mandatory=$true)][string]$Volume = "X:")

Write-Host "=== ÉTAT DÉDUP SUR \$Volume ==="
\$vol = Get-DedupVolume -Volume \$Volume
\$status = Get-DedupStatus
\$meta = Get-DedupMetadata -Volume \$Volume

\$vol | Format-List Volume, Enabled, MinimumFileAgeDays, MinimumFileSize, ExcludeFileType, ExcludeFolder
\$status | Format-List LastOptimizationTime, LastGarbageCollectionTime, InPolicyFilesCount, InPolicyFileBytes
\$meta | Format-List DataChunkCount, ContainerCount, IndexCount

Get-DedupJob -Volume \$Volume 

Remise en route « douce » (sans réinstallation)

# Forces de manière sûre un cycle complet pour débloquer l'optimisation
param([Parameter(Mandatory=$true)][string]$Volume = "X:")

Write-Host "Réglage d’âge minimal à 0 jour..."
Set-DedupVolume -Volume \$Volume -MinimumFileAgeDays 0

Write-Host "Nettoyage Garbage Collection..."
Start-DedupJob -Type GarbageCollection -Volume \$Volume -Priority High | Out-Null
while((Get-DedupJob -Volume \$Volume | Where-Object {$\_.Type -eq "GarbageCollection"}).Progress -lt 100){ Start-Sleep -Seconds 5 }

Write-Host "Relance de l’optimisation..."
Start-DedupJob -Type Optimization -Volume \$Volume -Priority High -Memory 80 | Out-Null 

Bonnes pratiques pour éviter la panne sèche

  • Profil d’usage adapté : lorsque vous activez la déduplication, choisissez le UsageType pertinent (ex. Default, Backup, VDI) afin d’obtenir des seuils adaptés par défaut.
  • Fenêtres généreuses : configurez des plannings qui laissent le temps à l’optimisation de s’exécuter réellement, surtout sur de gros volumes.
  • Surveillance proactive : consolidez un tableau de bord avec PerfMon, la taille de System Volume Information\Dedup, et les derniers événements Operational.
  • Exclusions explicites : définissez clairement ce qui doit être dédupliqué (ou non) et documentez les règles avec Set-DedupVolume -ExcludeFileType / -ExcludeFolder.
  • Procédure de « reset » standardisée : gardez sous la main les séquences UnoptimizationGarbage CollectionOptimization pour un retour à la normale sans panique.

Questions fréquentes

Le job finit immédiatement mais mes fichiers ont plus de 3 jours.
Vérifiez la taille minimale et les exclusions. De petits fichiers (quelques ko) ou des extensions exclues font que l’optimisation n’a rien à faire malgré l’âge suffisant.

Puis‑je supprimer le dossier System Volume Information\Dedup ?
Non. Ne manipulez jamais à la main le magasin de chunks. Utilisez Unoptimization, Garbage Collection, puis relancez une Optimization.

Faut‑il redémarrer le serveur ?
Non, pas dans l’immense majorité des cas. Un redémarrage du service ddpsvc suffit quand c’est nécessaire.

La déduplication compresse‑t‑elle mes fichiers ?
Elle stocke les blocs communs une seule fois et applique une compression côté magasin de chunks. Vos fichiers restent accessibles de façon transparente par NTFS.

La déduplication est‑elle supportée sur ReFS ?
Selon l’édition et le scénario, l’optimisation peut ne pas être disponible. Sur Windows Server « classique », privilégiez NTFS pour la déduplication.

Checklist finale avant de reformater

  • État : Get-DedupVolume, Get-DedupStatus sans anomalies.
  • Âge/Taille : -MinimumFileAgeDays 0 pour les tests, taille minimale adaptée à votre dataset.
  • Exclusions : extensions/dossiers vérifiés.
  • Cycle soft‑reset : UnoptimizationGarbage CollectionOptimization.
  • Service : ddpsvc redémarré, absence de chevauchement de plannings.
  • Intégrité : chkdsk /scan OK.

Résumé opérationnel

Quand un job de déduplication sur Windows Server 2022 « ne fait rien », la cause est presque toujours liée aux politiques d’éligibilité (âge, taille, exclusions) ou à un état interne à purger après une interruption. Les commandes essentielles à retenir :

# Inspecter
Get-DedupVolume -Volume X:
Get-DedupStatus
Get-DedupMetadata -Volume X:
Get-DedupJob -Volume X:

# Dégager les blocages

Start-DedupJob -Type Unoptimization -Volume X:
Start-DedupJob -Type GarbageCollection -Volume X:

# Rendre les fichiers immédiatement éligibles pour un test

Set-DedupVolume -Volume X: -MinimumFileAgeDays 0

# Relancer une passe prioritaire

Start-DedupJob -Type Optimization -Volume X: -Priority High -Memory 80 

Ces mesures permettent en général de débloquer un volume sans reformater, en conservant les données et en minimisant l’impact sur la production.


Annexe : exemples de sorties attendues

PS C:\&gt; Get-DedupVolume -Volume X: | fl Volume,Enabled,MinimumFileAgeDays,MinimumFileSize,Exclude*
Volume              : X:
Enabled             : True
MinimumFileAgeDays  : 3
MinimumFileSize     : 32768
ExcludeFileType     : {iso, vhdx, ...}
ExcludeFolder       : {}
PS C:\&gt; Get-DedupStatus | fl *
LastOptimizationTime      : 2025-09-10 21:32:14
LastGarbageCollectionTime : 2025-09-10 22:05:01
InPolicyFilesCount        : 0
InPolicyFileBytes         : 0
OptimizedFilesCount       : 0
SavingRate                : 0

Après ajustements (âge = 0, GC, relance), vous devriez observer le compteur InPolicyFilesCount > 0, et la progression d’un job Optimization non nulle.


Remarques de sécurité et de performance : exécutez toujours ces commandes dans une console PowerShell élevée. Pour des environnements très contraints en RAM/CPU, préférez des plannings nocturnes avec -Priority Low et limitez le budget mémoire avec -Memory. N’utilisez la réinstallation de la fonctionnalité que lorsque la bascule Disable/Enable et la séquence Unoptimization/Garbage Collection n’ont apporté aucune amélioration.

En suivant cette démarche structurée, vous transformez un symptôme frustrant (« job terminé sans traitement ») en un runbook reproductible et sûr, et vous évitez surtout le piège du reformatage inutile.

Sommaire