
In ambienti IT moderni, dove la continuità operativa e l’integrità dei dati sono requisiti imprescindibili, Microsoft DFS Replication (DFSR) rappresenta una tecnologia chiave per la replica efficiente e affidabile dei file tra server distribuiti.
Tuttavia, sebbene DFSR funzioni bene “out of the box”, le configurazioni predefinite non sono sempre sufficienti per scenari complessi, infrastrutture di grandi dimensioni o collegamenti di rete con vincoli specifici.
Questa guida nasce con l’obiettivo di andare oltre le nozioni di base, offrendo una visione approfondita sul tuning di DFSR, sulle best practice operative e sulle configurazioni avanzate che possono fare la differenza in termini di prestazioni, stabilità e capacità di troubleshooting.
Analizzeremo come ottimizzare l’utilizzo della banda, gestire correttamente il database di replica, interpretare i log più importanti e adattare DFSR a contesti enterprise reali.
Che tu sia un sistemista esperto alla ricerca di un affinamento delle prestazioni o un IT administrator che vuole evitare problemi comuni e replicazioni inefficienti, questa guida ti fornirà strumenti pratici e conoscenze avanzate per sfruttare al massimo il potenziale di DFSR.
PREREQUISITI
DFSR Installato su Windows Server 2019-2022-2025
Di seguito le configurazioni che utilizzerò in questo tutorial:
- GroupName: TEST-DFS
- Server 1: TEST-SRV-01
- Server 2: TEST-SRV-02
- Folders: Dati-A, Dati-B, Dati-C, Dati-D, Dati-E, Dati-F
DIMENSIONAMENTO E CONFIGURAZIONE DELLO STAGING DEL DFSR
Per dimensionare correttamente il disco di staging di DFS Replication (DFSR) su sistemi Microsoft si deve considerare quanto cambiano i dati, quanto sono grandi i file e come avviene la replica.
Di seguito trovi la regola pratica ufficiale + criteri reali da campo.
Cos’è lo staging DFSR?
Il folder di staging è l’area temporanea dove DFSR prepara i file prima di inviarli e ricostruisce i file dopo averli ricevuti
Se lo staging è troppo piccolo DFSR deve rigenerare i file quindi la replica rallenta e aumentano CPU, I/O disco e log di errore
La Regola base consigliata da Microsoft è:
Staging size ≥ dimensione del file più grande × 1,5
Ad Esempio:
File più grande nella replica: 20 GB
Staging minimo: 20 GB × 1,5 = 30 GB
⚠️ ATTENZIONE: Questo è il minimo indispensabile, non sempre sufficiente.
Dimensionamento consigliato (BEST PRACTICE)
Usa questa formula più realistica:
Staging = max(file più grande × 2, 10–20% della dimensione totale dei dati replicati)
Esempi reali
| Dati replicati | File più grande | Staging consigliato |
| 100 GB | 5 GB | 20–30 GB |
| 500 GB | 20 GB | 40–60 GB |
| 2 TB | 50GB | 100–200 GB |
Aumentare lo staging se:
- hai file molto grandi (ISO, VHDX, backup)
- i file vengono modificati spesso
- la replica avviene su link WAN
- ci sono molti cambiamenti simultanei
DFSR mostra eventi tipo:
- Event ID 4202
- Event ID 2213
- staging quota exceeded
Dove mettere lo staging (IMPORTANTISSIMO)
✔️ Disco veloce (SSD se possibile)
✔️ Disco diverso dai dati replicati
❌ Non su C:
❌ Non su dischi lenti o condivisi
Come controllare la dimensione attuale tramite Powershell:
|
0 |
Get-DfsrMembership Select-Object FolderName, StagingPath, StagingQuotaInMB
|
Come aumentare lo staging tramite Powershell:
|
0
1
2
3
4
|
Set-DfsrMembership `
-GroupName "NomeGruppo" `
-FolderName "NomeCartella" `
-StagingPath "D:\DFSR_Staging" `
-StagingQuotaInMB 102400
|
In sintesi:
✔ Calcola il file più grande
✔ Considera il volume totale dei dati
✔ Sovradimensiona (DFSR scala male se è stretto)
✔ Meglio troppo grande che troppo piccolo
COME VELOCIZZARE LA REPLICA DEI DATI
🚀 1. Disattivazione dell’RDC per la prima replica
RDC (Remote Differential Compression) è utile dopo, ma rallenta enormemente la prima replica.
E’ possibile disabilitare RDC da Powershell e da Sanp-In
Powershell
Su entrambi i server da una powershell eseguire i comandi:
|
0
1
2
|
Set-DfsrMembership -GroupName "TEST-DFS" -FolderName "Dati-Test" -ComputerName "TEST-SRV-01" -DisableRDC $true
Set-DfsrMembership -GroupName "TEST-DFS" -FolderName "Dati-Test" -ComputerName "TEST-SRV-02" -DisableRDC $true
|
Quindi riavviare il servizio DFSR con il comando:
|
0 |
Restart-Service DFSR
|
Verificare che RDC sia disabilitato con il comando:
|
0
1
2
|
Get-DfsrMembership -GroupName "TEST-DFS" -FolderName "Dati-Test" | Select ComputerName,DisableRDC
Get-DfsrMembership -GroupName "TEST-DFS" -FolderName "Dati-A" | Select ComputerName,DisableRDC
|
⚠️ ATTENZIONE: Dopo la prima replica è possibile riattivarlo se si vuole ottimizzare la WAN.
Snap-In
E’ possibile disattivare RDC anche da Snap-in
Aprire lo Snap-In DFS Management
Espandere Replication quindi selezionare il Group Name. Cliccare su Connections e selezionando ciascun membro cliccare con il tasto destro quindi Properties.
Togliere la spunta all’opzione: Use remote differential compression (RDC) quindi cliccare OK.
Per applicare le impostazioni su tutti i Membri del DFS riavviare il servizio
Dallo Snap-In Services riavviare DFS Replication
🚀 2. Impostare la replica su full-speed (no schedule limits)
Assicurarsi che la replica sia impostata su Full Speed
In DFS Management espandere Replication quindi selezionare il Group Name. Cliccare su Connections quindi Properties come mostrato nell’immagine sovrastante
Cliccare Edit Schedule quindi nella schermata successiva selezionare Bandwidth Usage: Full e seelzionare tutti i giorni in H24 quindi cliccare OK
Oppure tramite PowerShell eseguire il comando:
|
0 |
Set-DfsrConnection -GroupName "TEST-DFS" -SourceComputerName "TEST-SRV-01" -DestinationComputerName "TEST-SRV-02" -UseDiffCompression $false -Schedule @(255,255,255,255,255,255,255)
|
Esempio PowerShell:
|
0 |
Set-DfsrMembership -GroupName "TEST-DFS" -FolderName "Dati-A" -PrimaryMember "TEST-SRV-01" -StagingMaxSizeMB 8192 -Force
|
🚀 3. Verificare e disattivare il throttling a livello NIC
Utilizzare il comando Powershell Set-NetAdapterAdvancedProperty per modificare una proprietà avanzata della scheda di rete chiamata Large Send Offload V2 (LSO v2)
LSO v2 è una tecnologia che permette al sistema operativo di inviare grandi blocchi di dati demandando alla scheda di rete il compito di suddividerli in pacchetti più piccoli.
Questo riduce il carico della CPU e migliora le prestazioni di rete soprattutto con traffico elevato
Abilitarlo sia per IPV4 che per IPV6 con i seguenti comandi:
|
0
1
2
|
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv4)" -DisplayValue "Enabled"
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv6)" -DisplayValue "Enabled"
|
🚀 4. Esclusioni su Antivirus per cartelle e servizi del DFS
Gli Antivirus rallentano molto hashing + scrittura del DB.
📄 Cartella da eslcudere:
- C:\System Volume Information\DFSR
Se hai cambiato percorso (configurazioni avanzate):
- <Drive>:\System Volume Information\DFSR
⚠️ ATTENZIONE: questa cartella contiene il database di replica. Se viene bloccata o scansionata DFSR può smettere di funzionare.
- C:\Windows\System32\dfsrdiag.exe
📄 Estensioni di file da escludere
Escludere queste estensioni ovunque si trovino:
- .dfsr
- .frx
⚙️ Processi da escludere
Aggiungere l’esclusione per il processo DFSR:
- DFSRs.exe
Percorso tipico:
- C:\WINDOWS\system32\DFSRs.exe
🧠 Best practice aggiuntive
✅ Cartelle replicate (contenuto utenti)
NON escluderle completamente dall’antivirus
Usa piuttosto:
- scansione programmata
- esclusioni solo per i file temporanei DFSR
❌ Cosa NON fare
- Non escludere C:\System Volume Information interamente
- Non escludere tutte le cartelle DFS
- Non escludere i volumi NTFS completi
🚀 5. Forzare il rebuild del database DFSR solo se sospetti sia lento o bloccato
👉 Da fare SOLO se la prima sync è lentissima e non è mai partita.
Fermare il servizio DFSR:
|
0 |
Stop-Service DFSR
|
Quindi rinominare DFSR in DFSR_old
|
0 |
Rename-Item "C:\System Volume Information\DFSR" "DFSR_old"
|
Riavviare il servizio DFSR:
|
0 |
Start-Service DFSR
|
Questo fa ripartire la configurazione pulita senza cancellare i files ma solo il DB
🚀 6. Aumentare il numero di thread (avanzato)
Modificare il registro per aumentare la concorrenza operativa.
Aprire il registro di sistema e posizionarsi nel seguente path:
|
0 |
HKLM\System\CurrentControlSet\Services\DFSR\Parameters |
Aggiungere una DWORD 32-bit:
Value Name: RpcContextPoolSize
Value Data: 64
Quindi riavviare il server DFS con il comando:
|
0 |
Restart-Service DFSR
|
🚀 7. Pre-seeding
Se i server sono nella stessa LAN puoi pre-copiare a mano tutto il contenuto da TEST-SRV-01 a TEST-SRV-02 tramite Robocopy
Così DFS-R deve solo verificare e non trasferire
Di seguito il Robocopy consigliato:
|
0
1
2
3
4
5
|
robocopy D:\Dati-A \\TEST-SRV-02\Dati-A /MIR /MT:32 /R:3 /W:1
robocopy F:\Dati-B \\TEST-SRV-02\Dati-B /MIR /MT:32 /R:3 /W:1
robocopy G:\Dati-C \\TEST-SRV-02\Dati-C /MIR /MT:32 /R:3 /W:1
robocopy M:\Dati-D \\TEST-SRV-02\Dati-D /MIR /MT:32 /R:3 /W:1
robocopy N:\Dati-E \\TEST-SRV-02\Dati-E /MIR /MT:32 /R:3 /W:1
robocopy P:\Dati-F \\TEST-SRV-02\Dati-F /MIR /MT:32 /R:3 /W:1
|
Questo è il metodo migliore per diminuire drasticamente i tempi durante la prima replica.
COMANDI PER CHECK AVANZAMENTO REPLICA
Di seguito il comando Powershell per verificare il Backlog presente:
|
0
1
2
3
4
5
6
|
Get-Date
Get-DfsrBacklog -DestinationComputerName "TEST-SRV-02" -SourceComputerName "TEST-SRV-01" -GroupName "TEST-DFS" -FolderName "Dati-A" -Verbose | Out-Null
Get-DfsrBacklog -DestinationComputerName "TEST-SRV-02" -SourceComputerName "TEST-SRV-01" -GroupName "TEST-DFS" -FolderName "Dati-B" -Verbose | Out-Null
Get-DfsrBacklog -DestinationComputerName "TEST-SRV-02" -SourceComputerName "TEST-SRV-01" -GroupName "TEST-DFS" -FolderName "Dati-C" -Verbose | Out-Null
Get-DfsrBacklog -DestinationComputerName "TEST-SRV-02" -SourceComputerName "TEST-SRV-01" -GroupName "TEST-DFS" -FolderName "Dati-D" -Verbose | Out-Null
Get-DfsrBacklog -DestinationComputerName "TEST-SRV-02" -SourceComputerName "TEST-SRV-01" -GroupName "TEST-DFS" -FolderName "Dati-E" -Verbose | Out-Null
Get-DfsrBacklog -DestinationComputerName "TEST-SRV-02" -SourceComputerName "TEST-SRV-01" -GroupName "TEST-DFS" -FolderName "Dati-F" -Verbose | Out-Null
|
SCRIPT PER CONTROLLARE IL BACKLOG DEL DFSR
Questo script va schedulato tramite il Task Manager e converebbe farlo girare ogni ora cosi da avere sempre sotto controllo il BACKLOG
Di seguito il listato dello script Powershell:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# ===============================
# Configurazione
# ===============================
$Source = "TEST-SRV-01"
$Destination = "TEST-SRV-02"
$Group = "TEST-DFS"
$Folders = @(
"Dati-A",
"Dati-B",
"Dati-C",
"Dati-D",
"Dati-E",
"Dati-F",
)
$SmtpServer = "SMTP-SERVER "
# ===============================
# Esecuzione
# ===============================
$Results = @()
$Date = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
foreach ($Folder in $Folders) {
try {
$Backlog = Get-DfsrBacklog `
-SourceComputerName $Source `
-DestinationComputerName $Destination `
-GroupName $Group `
-FolderName $Folder `
-ErrorAction Stop
$Count = ($Backlog | Measure-Object).Count
}
catch {
$Count = "ERRORE"
}
$Results += [PSCustomObject]@{
Folder = $Folder
Backlog = $Count
}
}
# ===============================
# Corpo email
# ===============================
$Body = @"
<html>
<body style="font-family: Consolas, monospace;">
<h3>Report DFSR - $Date</h3>
<b>Source:</b> $Source<br>
<b>Destination:</b> $Destination<br>
<b>Group:</b> $Group<br><br>
<hr>
<table border="1" cellpadding="4" cellspacing="0">
<tr>
<th>Folder</th>
<th>Backlog</th>
</tr>
"@
foreach ($R in $Results) {
$Color = if ($R.Backlog -eq 0) { "green" } else { "red" }
$Body += "<tr>
<td>$($R.Folder)</td>
<td style='color:$Color'>$($R.Backlog)</td>
</tr>"
}
$Body += @"
</table>
</body>
</html>
"@
# ===============================
# Verifica backlog
# ===============================
$HasBacklog = $Results | Where-Object {
($_.Backlog -is [int] -and $_.Backlog -gt 0) -or
($_.Backlog -eq "ERRORE") -or
($_.Backlog -eq "TIMEOUT")
}
# ===============================
# Oggetto email
# ===============================
if ($HasBacklog) {
$Subject = "DFSR BACKLOG rilevato - $Destination"
}
else {
$Subject = "DFSR OK - Nessun backlog - $Destination"
}
# ===============================
# Invio mail
# ===============================
Send-MailMessage `
-From $From `
-To $To `
-Subject $Subject `
-Body $Body `
-BodyAsHtml `
-SmtpServer $SmtpServer `
-Encoding UTF8
|
⚠️ ATTENZIONE: Di seguito i paramentri da modificare:
$Source = “TEST-SRV-01”
$Destination = “TEST-SRV-02”
$Group = “TEST-DFS”
$Folders = @(
“Dati-A”,
“Dati-B”,
“Dati-C”,
“Dati-D”,
“Dati-E”,
“Dati-F”,
)
$SmtpServer = “SMTP-SERVER ”
$From = “[email protected]”
$To = “[email protected]”
Download “Monitoring-Backlog-DFSR-Email.zip” Monitoring-Backlog-DFSR-Email.zip – Scaricato 0 volte – 1,12 KB

0 commenti