Sur Windows Server 2012 R2, un seul dossier du partage se duplique instantanément en dizaines d’exemplaires à chaque modification. Ce guide fournit une méthode éprouvée, des commandes et des exemples concrets pour identifier la cause et éliminer le phénomène.
Vue d’ensemble du problème
Vous administrez un serveur de fichiers Windows Server 2012 R2. Dès qu’un utilisateur ajoute, renomme ou modifie un élément dans un répertoire précis, environ cent copies du même dossier apparaissent presque instantanément. Les autres répertoires du partage ne présentent pas ce comportement. Il s’agit typiquement d’un enchaînement déclenché par un processus tiers, d’une règle d’automatisation (tâche planifiée, WMI permanent event, GPO), d’un mécanisme de réplication (DFS‑R) en conflit ou, plus rarement, d’une corruption du système de fichiers. L’objectif est double : identifier la cause exacte et stopper définitivement les duplications sans perte de données.
Ci‑dessous : un plan d’attaque priorisé, puis une procédure détaillée, des commandes clés prêtes à l’emploi, des scénarios typiques et un plan de remise en état.
Ordre de diagnostic priorisé
Commencez par ce qui est le plus probable et le moins intrusif. Le tableau suivant synthétise les vérifications et leur objectif.
<table>
<thead>
<tr>
<th>Étape</th>
<th>Vérification / Action</th>
<th>But recherché</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>1</strong></td>
<td><strong>Chercher des processus tiers</strong> : scripts de sauvegarde, agents de synchronisation (OneDrive, Dropbox, Google Drive File Stream, Veeam/Backup Exec, <code>robocopy</code> en tâche planifiée, etc.).</td>
<td>Détecter un outil externe qui réagit à chaque modification en clonant le dossier.</td>
</tr>
<tr>
<td><strong>2</strong></td>
<td><strong>Contrôler les autorisations NTFS et de partage</strong> : droits d’écriture/Création accordés à un service automatisé ou un compte applicatif.</td>
<td>S’assurer qu’aucune ACL inhabituelle n’autorise la duplication par un compte non prévu.</td>
</tr>
<tr>
<td><strong>3</strong></td>
<td><strong>Inspecter déclencheurs et tâches planifiées</strong> : filtres FSRM, tâches « On an event », abonnements WMI (FileSystemWatcher).</td>
<td>Identifier un mécanisme d’automatisation lié à ce dossier.</td>
</tr>
<tr>
<td><strong>4</strong></td>
<td><strong>Vérifier l’intégrité du système de fichiers</strong> avec <code>chkdsk /f</code> et <code>sfc /scannow</code>.</td>
<td>Exclure une corruption NTFS générant des artefacts.</td>
</tr>
<tr>
<td><strong>5</strong></td>
<td><strong>Examiner les stratégies de groupe</strong> : redirection de dossiers, « Offline Files », DFS‑R.</td>
<td>Confirmer qu’aucune GPO ne réplique involontairement le répertoire.</td>
</tr>
<tr>
<td><strong>6</strong></td>
<td><strong>Tester sans antivirus/antimalware actif</strong> ou en mode sans échec.</td>
<td>Vérifier qu’une fonction de protection (p. ex. « Auto‑Backup »/« Ransomware Shield ») ne crée pas des copies.</td>
</tr>
<tr>
<td><strong>7</strong></td>
<td><strong>Surveiller en temps réel</strong> avec Process Monitor / journaux Sécurité.</td>
<td>Identifier le processus et l’utilisateur qui effectuent les appels <code>CreateFile</code>/<code>CopyFile</code>.</td>
</tr>
<tr>
<td><strong>8</strong></td>
<td><strong>Mettre à jour le système et les pilotes</strong> (patches, contrôleur RAID).</td>
<td>Écarter un bogue corrigé par une mise à jour.</td>
</tr>
</tbody>
</table>
Procédure détaillée pas‑à‑pas
<h3>Cartographier le périmètre</h3>
<ul>
<li>Notez le chemin exact du dossier concerné (ex. <code>D:\Shares\Projets\DossierA</code>) et le nom du partage SMB (<code>\\Serveur\Projets</code>).</li>
<li>Identifiez les postes ou comptes qui déclenchent la duplication (un seul utilisateur ? plusieurs ?).</li>
<li>Observez le motif de nommage des copies : <em>« Copie de »</em>, <em>« Dossier (1) »</em>, suffixe horodaté, GUID, <em>« Conflicted copy »</em>… Ces indices orientent vers la source.</li>
</ul>
<h3>Rechercher immédiatement des processus de copie</h3>
<p>Depuis une session administrateur PowerShell, listez les processus courants susceptibles de copier :</p>
<pre><code>Get-CimInstance Win32_Process |
Where-Object { $*.CommandLine -match ‘robocopy|xcopy|copy|synch|backup|onedrive|dropbox|googledrive|veeam|syncthing’ } | Select-Object ProcessId, Name, CommandLine | Format-List
Surveillez également les partages ouverts en écriture :
Get-SmbOpenFile | Where-Object { $*.Path -match 'D:\Shares\Projets\DossierA' } |
Select-Object ClientUserName, ClientComputerName, Path, Permissions
Si un agent tiers apparaît (ex. un service de sauvegarde ou de synchronisation), mettez‑le temporairement en pause pour vérifier l’arrêt des duplications.
<h3>Contrôler rigoureusement les autorisations</h3>
<p>Exportez les ACL NTFS et du partage :</p>
<pre><code>icacls "D:\Shares\Projets\DossierA" /save C:\Temp\acl_dossierA.txt /t /c
Get-SmbShare -Name « Projets » | Get-SmbShareAccess
Recherchez des entrées inattendues (compte de service, « Tout le monde » en modification, etc.). Une ACL permissive couplée à un service automatisé suffit à provoquer des copies fantôme.
<h3>Inspecter tâches planifiées et abonnements WMI</h3>
<p>Des tâches « On an event » ou des abonnements WMI permanents peuvent réagir aux changements de fichiers. Vérifiez les deux.</p>
<pre><code># Tâches planifiées verbeuses
schtasks /query /fo LIST /v > C:\Temp\scheduled_tasks.txt # Abonnements WMI permanents (persistents) Get-WmiObject -Namespace root\subscription -Class __EventFilter Get-WmiObject -Namespace root\subscription -Class CommandLineEventConsumer Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding
Si vous trouvez un filtre WMI __InstanceCreationEvent
/__InstanceModificationEvent
visant votre chemin, supprimez‑le après sauvegarde :
# Exemple de suppression d’un binding
$bind = Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding `
| Where-Object { $_.Filter -match 'D:\\Shares\\Projets\\DossierA' }
$bind | Remove-WmiObject
<h3>Vérifier FSRM et actions associées</h3>
<p>Un écran de fichiers (FSRM) peut exécuter un script à chaque création. Dressez l’état :</p>
<pre><code>dirquota quota list /path:D:\Shares\Projets\DossierA
filescrn filegroup list filescrn screen list /path:D:\Shares\Projets\DossierA filescrn eventlog list
Désactivez temporairement la règle suspecte et rejouez une modification pour valider.
<h3>Écarter une corruption NTFS</h3>
<p>Planifiez un <code>chkdsk</code> avec correction d’erreurs sur le volume concerné (redémarrage requis si volume système) :</p>
<pre><code>chkdsk D: /f</code></pre>
<p>Contrôlez l’intégrité des fichiers système :</p>
<pre><code>sfc /scannow</code></pre>
<p>Une corruption est rare mais peut créer des répertoires « fantômes » lors des écritures.</p>
<h3>Passer en revue les GPO et fonctionnalités liées</h3>
<p>Exportez un rapport de stratégie :</p>
<pre><code>gpresult /H C:\Temp\gp.html</code></pre>
<p>Vérifiez : redirection de dossiers, paramètres « Offline Files », scripts de logon/logoff, déploiement de logiciels de synchronisation, configuration DFS‑R. Si le dossier est un membre de réplication DFS‑R, consultez le journal DFS‑R et l’état de conflit.</p>
<h3>Tester sans antivirus/antimalware</h3>
<p>Certains produits possèdent des mécanismes d’auto‑sauvegarde qui, mal configurés, dupliquent des dossiers. Désactivez <em>temporairement</em> la protection sur le serveur pour un test <strong>contrôlé</strong> (en maintenance, réseau restreint), puis validez.</p>
<h3>Surveiller en temps réel avec Process Monitor</h3>
<ol>
<li>Lancez Process Monitor sur le serveur.</li>
<li>Ajoutez des filtres : <em>Path begins with</em> <code>D:\Shares\Projets\DossierA</code>, <em>Operation is</em> <code>CreateFile</code>/<code>WriteFile</code>/<code>SetRenameInformationFile</code>.</li>
<li>Reproduisez la modification côté client.</li>
<li>Identifiez <strong>Process Name</strong>, <strong>PID</strong>, <strong>User</strong> sur les événements de création des copies.</li>
</ol>
<p>En parallèle, activez l’audit d’accès pour obtenir une piste non‑répudiable côté journal Windows.</p>
Audit ciblé du dossier
Activez la stratégie « Audit Object Access » et l’audit sur le dossier pour loguer qui crée quoi.
- Ouvrez les propriétés du dossier → onglet Sécurité → Avancé → Auditer → Ajouter → sélectionnez « Tout le monde » (temporairement) → cochez Créer des fichiers/dossiers et Supprimer.
- Dans la stratégie locale : Configuration ordinateur → Paramètres Windows → Paramètres de sécurité → Stratégies locales → Stratégie d’audit avancée → Object Access : activez « Audit File System » et « Audit File Share » (Succès/Échec).
Événements utiles à surveiller dans le journal Sécurité :
ID | Source | Signification | Ce qu’on en tire |
---|---|---|---|
4663 | Security | Accès à un objet (fichier/dossier) | Qui a initié la création/écriture (SID, processus si activé) |
4656 | Security | Demande de handle avec droits | Drois demandés : WriteData, AppendData, CreateFiles |
4688 | Security | Création de processus | Command line de robocopy /powershell /xcopy |
5145 | Security (File Share) | Accès via SMB | Client à l’origine de la demande (nom machine, utilisateur) |
Filtrez le journal sur le chemin du dossier ; identifiez l’utilisateur et la machine responsables des créations répétées.
Cas particuliers à forte probabilité
<h3>Boucle de synchronisation ou de sauvegarde</h3>
<p>Un script qui copie <em>le dossier vers lui‑même</em> ou vers un sous‑dossier, ou encore un agent qui repart de la destination comme nouvelle source, engendre une explosion combinatoire (ex. <code>robocopy D:\Share\DossierA D:\Share\DossierA\Backup /E /MIR</code> couplé à un watcher sur <code>DossierA</code>).</p>
<ul>
<li><strong>Symptômes</strong> : copies portant des suffixes numérotés, timestamps, « Copy of ».</li>
<li><strong>Validation</strong> : Process Monitor montre <code>robocopy.exe</code> ou <code>powershell.exe</code> avec <code>Copy-Item</code> en boucle.</li>
<li><strong>Correctif</strong> : corriger la cible, ajouter des exclusions, supprimer le watcher, forcer des chemins absolus sûrs et des verrous (fichiers <code>.lock</code>).</li>
</ul>
<h3>DFS‑R : conflits et répertoires dupliqués</h3>
<p>En topologie DFS‑R, des écritures concurrentes peuvent créer des « conflicted copies ». Le dossier incriminé peut recevoir des « résurrections » si la réplication rejoue des opérations depuis un partenaire.</p>
<ul>
<li><strong>Validation</strong> : vérifier l’état DFS‑R, la présence de <em>ConflictAndDeleted</em>, le backlog, les journaux DFS‑R.</li>
<li><strong>Correctif</strong> : résoudre les conflits de nommage, suspendre la réplication le temps de stabiliser, réinitialiser la base DFS‑R si nécessaire après sauvegarde.</li>
</ul>
<h3>Abonnements WMI furtifs</h3>
<p>Des malwares ou scripts d’admin laissent des abonnements WMI permanents qui copient des données à chaque changement.</p>
<ul>
<li><strong>Validation</strong> : lister <code>__EventFilter</code>, <code>__EventConsumer</code>, <code>__FilterToConsumerBinding</code> (voir commandes plus haut).</li>
<li><strong>Correctif</strong> : documenter puis supprimer les bindings, désactiver les consommateurs et vérifier la disparition des événements.</li>
</ul>
<h3>Fonctions antivirus/EDR</h3>
<p>Certains produits créent des copies sûres (« journaling », « auto‑backup ») avant modification.</p>
<ul>
<li><strong>Validation</strong> : pause de l’agent → plus de duplications.</li>
<li><strong>Correctif</strong> : exclure le chemin du mécanisme d’auto‑sauvegarde, mettre à jour la politique.</li>
</ul>
<h3>Volume Shadow Copy ou restauration répétée</h3>
<p>Une tâche qui restaure régulièrement depuis VSS vers le même chemin peut matérialiser des dossiers dupliqués.</p>
<ul>
<li><strong>Validation</strong> : vérifier tâches de restauration, historique VSS.</li>
<li><strong>Correctif</strong> : corriger le job de restauration, changer la destination.</li>
</ul>
Commandes utiles prêtes à l’emploi
<h3>Inventaire rapide des services et tâches</h3>
<pre><code># Services automatiques non Microsoft (attention aux colonnes)
Get-Service | Where-Object { $*.StartType -eq ‘Automatic’ } | Where-Object { $*.Name -notmatch ‘^MS|^Win’ } | Select-Object Status, Name, DisplayName # Tâches qui semblent réagir à des événements Get-ScheduledTask | Where-Object { $_.Triggers -match ‘Event|Logon|OnIdle’ } | Select-Object TaskName, TaskPath, State # Tâches contenant des mots-clés Get-ScheduledTask | Select-Object TaskName, TaskPath, Description | Where-Object { $_.Description -match ‘copy|backup|sync|robocopy’ }
<h3>Exploration des partages et sessions</h3>
<pre><code>Get-SmbShare
Get-SmbSession | Select-Object ClientComputerName, ClientUserName, NumOpens Get-SmbOpenFile | Select-Object ClientUserName, Path, Permissions | Sort-Object Path
<h3>Journalisation ciblée avec PowerShell</h3>
<pre><code># Derniers événements Security pour le dossier concerné
$path = « D:\Shares\Projets\DossierA » $filter = @{ LogName= »Security »; Id=4663 } Get-WinEvent -FilterHashtable $filter -MaxEvents 200 | Where-Object { $_.Message -like « *$path* » } | Select-Object TimeCreated, Id, ProviderName, Message
Tableau de diagnostic rapide
Symptôme visible | Cause la plus probable | Comment confirmer | Action corrective |
---|---|---|---|
« Dossier (1)… Dossier (100) » | Script/agent qui copie dans le même arbre | Procmon : robocopy /Copy-Item en boucle | Corriger la destination, filtrer le dossier, verrou .lock |
Noms avec « Conflicted copy » | DFS‑R conflit | Journal DFS‑R, présence ConflictAndDeleted | Résoudre conflit, purger backlog, stabiliser réplication |
Copies avec horodatage fixe | Tâche planifiée périodique | schtasks /query /v , Description | Désactiver/éditer la tâche |
Copies dès chaque changement | Abonnement WMI ou FSRM action | Enum WMI root\subscription , filescrn | Supprimer binding, neutraliser règle |
Copies visibles même sans clients | Agent sur le serveur | Arrêt services → arrêt du phénomène | Désinstaller ou reconfigurer l’agent |
Gestion des permissions et du partage
Si un compte de service exécute les copies, limitez‑le :
- Remplacez « Modifier » par « Lecture » là où c’est suffisant.
- Restreignez au dossier cible légitime, jamais au niveau racine du partage.
- Appliquez le principe du moindre privilège et tracez l’usage via l’audit.
Pour documenter l’état, exportez les ACL (NTFS et SMB) vers un dépôt de changement et associez chaque modification à un ticket de changement (CMDB).
Cas DFS‑R : méthode de résolution
- Geler la réplication sur le groupe de réplication concerné pour stabiliser la situation.
- Identifier le nœud source des copies via journaux et sessions SMB.
- Traiter les conflits : renommer le dossier de référence, consolider le contenu valide, supprimer les copies conflictuelles après sauvegarde.
- Vérifier le backlog et l’état de santé avant de réactiver la réplication.
- Prévenir la récidive en interdisant les renommages simultanés et en clarifiant les fenêtres de maintenance.
Remise en état et nettoyage contrôlé
- Isoler la cause : arrêter temporairement le service/script fautif.
- Congeler les accès utilisateurs au dossier le temps du nettoyage (droits Lecture seule, fenêtre de maintenance courte).
- Sauvegarder un état de référence (snapshot de volume, sauvegarde hors ligne).
- Supprimer les copies excédentaires de manière déterministe : privilégiez PowerShell avec compteurs et journalisation.
# Exemple de nettoyage contrôlé (à adapter au motif réel)
$root = "D:\Shares\Projets\DossierA"
Get-ChildItem $root -Directory |
Where-Object { $_.Name -match '^(DossierA \(\d+\)|Conflicted copy|Copie de|_backup_)$' } |
ForEach-Object {
Remove-Item -LiteralPath $_.FullName -Recurse -Force -Verbose
}
Avant suppression massive, comparez le contenu et conservez une copie consolidée.
Prévention et bonnes pratiques
- Éviter les destinations imbriquées dans le même arbre que la source pour toute synchronisation/backup.
- Utiliser des fichiers verrou (
.lock
) et des tests d’exclusivité dans les scripts (PowerShell :New-Item -ItemType File -ErrorAction SilentlyContinue
). - Exclusions claires dans les agents de sauvegarde et de synchronisation (répertoires
temp
,cache
,~$
,ConflictAndDeleted
). - Journalisation explicite de chaque job avec horodatage et code de retour, conservée au moins 30 jours.
- Surveillance proactive : alerte dès > N créations/min sous le chemin considéré (compteur de performance, SIEM).
- Gouvernance des comptes de service : mots de passe gérés, droits minimaux, interdiction de sessions interactives.
- Tests de régression après toute modification GPO/FSRM/DFS‑R.
Scénarios d’enquête reproductibles
Pour gagner du temps lors d’incidents futurs, adoptez ce mini‑protocole :
- Photo instantanée : lister process de copie et tâches planifiées (commandes ci‑dessus), exporter ACL et sessions SMB.
- Audit ciblé : activer 4663/4688 sur le chemin, collecter 10 minutes de logs.
- Reproduction contrôlée : créer un fichier
test.txt
dans le dossier, observer Procmon et journaux. - Hypothèse > test : pause de l’agent suspect → est‑ce que la duplication cesse ?
- Remédiation : corriger configuration, documenter, nettoyer, valider.
Informations complémentaires essentielles
- Audit du dossier : activez l’audit d’accès et analysez le journal Sécurité, filtrez les événements
4663
pour voir qui crée réellement les copies. - DFS‑R et noms en conflit : en topologie DFS, un conflit « Conflit et suppression » (ConflictAndDeleted) peut engendrer des répertoires dupliqués. Vérifiez et résolvez les conflits.
- Volume Shadow Copy : une restauration répétée via VSS peut parfois se matérialiser sous forme de dossiers physiques.
- Action corrective standard : une fois la cause isolée (script, service, GPO, logiciel), la désactiver / reconfigurer et contrôler qu’aucune nouvelle copie n’apparaît lors d’une modification test.
Résultats attendus
- Le processus (ou la règle) responsable est identifié sans ambiguïté.
- Sa désactivation ou reconfiguration supprime le phénomène de duplication.
- Le dossier peut de nouveau être modifié sans créer de copies et la cause est documentée pour prévenir toute récurrence.
Annexe : exemples de scripts PowerShell robustes
Copie sûre avec verrou, exclusions et journal
$Source = "D:\Shares\Projets\DossierA"
$Destination = "E:\Backups\Projets\DossierA"
$Log = "C:\Logs\copy_DossierA_$(Get-Date -Format yyyyMMdd_HHmmss).log"
$Lock = "C:\Locks\copy_DossierA.lock"
if (Test-Path $Lock) { Write-Host "Job déjà en cours."; exit 1 }
New-Item -Path $Lock -ItemType File -Force | Out-Null
try {
robocopy $Source $Destination /E /COPY:DAT /R:1 /W:2 /XD "ConflictAndDeleted" "temp" /XF "*.tmp" "~$*" /LOG:$Log /NP /NFL /NDL /TEE /XJ
if ($LASTEXITCODE -gt 3) { throw "Robocopy code $LASTEXITCODE" }
}
catch {
Write-Error $_
}
finally {
Remove-Item $Lock -Force -ErrorAction SilentlyContinue
}
<h3>Détection d’une tempête de créations</h3>
<pre><code>$Path = "D:\Shares\Projets\DossierA"
$Since = (Get-Date).AddMinutes(-5) $events = Get-WinEvent -FilterHashtable @{ LogName= »Security »; Id=4663; StartTime=$Since } | Where-Object { $*.Message -like « *$Path* » -and $*.Message -match « Create » } if ($events.Count -gt 200) { Write-Host « Alerte : $($events.Count) créations en 5 min sur $Path » }
Checklist finale
- Processus tiers identifiés et neutralisés
- ACL NTFS/SMB revues et durcies
- Tâches planifiées/WMI/FSRM auditées
- Intégrité NTFS validée (
chkdsk
,sfc
) - GPO/DFS‑R contrôlés
- Antivirus testé et ajusté
- Audit 4663/4688 en place le temps de la validation
- Nettoyage des doublons et documentation du correctif