How to Set Up Data Deduplication on Windows Server 2025
Data Deduplication is a Windows Server role service that identifies and eliminates duplicate data blocks across a volume, storing only a single copy of each unique block and replacing duplicates with lightweight pointers. On typical file server workloads, deduplication routinely achieves 50–80% space savings, dramatically reducing storage costs without requiring hardware upgrades or changes to how applications access data. Windows Server 2025 includes an updated deduplication engine with improved throughput and support for large volumes, Hyper-V workloads on Cluster Shared Volumes (CSVs), and backup storage use cases. This guide covers installing deduplication, enabling and configuring it for different workload types, tuning performance parameters, monitoring savings, and safely disabling deduplication when needed.
Prerequisites
- Windows Server 2025 Standard or Datacenter edition
- An NTFS-formatted volume — Data Deduplication does not support FAT32, exFAT, or ReFS volumes as of Windows Server 2025
- The volume to deduplicate should not be the OS volume (C:) — deduplication is designed for data volumes
- Administrator or equivalent privileges
- Sufficient CPU and RAM — deduplication optimization jobs are CPU-intensive; plan for at least 2 dedicated cores during optimization windows
- For Hyper-V CSV deduplication, Windows Server 2025 Datacenter edition and a Windows Server 2025 guest OS are required
Step 1: Install the Data Deduplication Role Service
Data Deduplication is a role service under the File and Storage Services role. Install it with PowerShell for consistency across server deployments:
# Install Data Deduplication role service
Install-WindowsFeature -Name FS-Data-Deduplication -IncludeManagementTools
# Verify installation
Get-WindowsFeature -Name FS-Data-Deduplication
# Import the Deduplication PowerShell module (loaded automatically after install)
Import-Module Deduplication
# Verify cmdlets are available
Get-Command -Module Deduplication
No reboot is required after installing Data Deduplication. The deduplication engine begins running as a background service (ddpsvc) immediately after installation. You can also install the role service through Server Manager: Add Roles and Features → File and Storage Services → File and iSCSI Services → Data Deduplication.
Step 2: Enable Deduplication on a Volume
Deduplication must be explicitly enabled per volume. Windows Server 2025 supports three usage types, each optimized for a different workload pattern. Choose the correct type when enabling deduplication — it affects default settings including minimum file age and chunk size:
# Enable deduplication for a General Purpose File Server (default usage type)
# Best for: user home directories, department shares, software repositories
Enable-DedupVolume -Volume "D:" -UsageType Default
# Enable deduplication for a Hyper-V workload
# Best for: Hyper-V VHD/VHDX files on a non-CSV volume
# Uses 0-day minimum file age so new VHDs are deduplicated immediately
Enable-DedupVolume -Volume "E:" -UsageType HyperV
# Enable deduplication for backup storage (high compression, offline chunks)
# Best for: Windows Server Backup targets, Veeam repositories, backup archives
# Achieves higher savings than Default at the cost of slower restore performance
Enable-DedupVolume -Volume "F:" -UsageType Backup
# Verify deduplication is enabled on all volumes
Get-DedupVolume | Select-Object Volume, Enabled, UsageType, MinimumFileAgeDays, MinimumFileSizeBytes
Understanding Usage Types
- Default (General Purpose): Minimum file age of 3 days, minimum file size of 32 KB, in-policy data rate optimized for file servers. Files under active use are excluded until they age out.
- HyperV: Minimum file age of 0 days, optimized for VHD/VHDX files, supports Open Files deduplication so running VM disk files are included.
- Backup: Minimum file age of 0 days, tuned for maximum compression and highest deduplication ratio, designed for backup software repositories.
Step 3: Tune Deduplication Settings
After enabling deduplication, fine-tune the configuration with Set-DedupVolume to match your environment’s file characteristics and operational requirements:
# Adjust minimum file age: only deduplicate files older than 7 days
# Higher value = fewer active files processed, lower I/O during business hours
Set-DedupVolume -Volume "D:" -MinimumFileAgeDays 7
# Set minimum file size: skip files smaller than 64 KB (default is 32 KB)
# Larger threshold improves optimization performance by skipping tiny files
Set-DedupVolume -Volume "D:" -MinimumFileSizeBytes 65536
# Exclude specific folders from deduplication (databases, temp files, etc.)
Set-DedupVolume -Volume "D:" -ExcludeFolder "D:DatabaseFiles", "D:TempUploads", "D:ApplicationCache"
# Exclude specific file extensions
Set-DedupVolume -Volume "D:" -ExcludeFileType "mp4", "avi", "mkv", "iso", "zip"
# Note: compressed/encrypted files yield little deduplication benefit
# Configure no-compress setting for volumes where CPU usage is a concern
# (stores chunks without compression — faster but larger)
Set-DedupVolume -Volume "D:" -NoCompress $false # false = compression enabled (default)
# View current settings for the volume
Get-DedupVolume -Volume "D:" | Format-List *
Step 4: Monitor Deduplication Status and Savings
Track deduplication progress, savings rate, and space freed using the Get-DedupVolume and Get-DedupStatus cmdlets. These provide real-time visibility into how much space deduplication is recovering:
# Get deduplication volume configuration and status overview
Get-DedupVolume | Format-Table Volume, Enabled, UsageType, SavingsRate, SavedSpace -AutoSize
# Get detailed deduplication status including chunk store metrics
Get-DedupStatus | Format-List *
# Get status for a specific volume with key savings metrics
Get-DedupStatus -Volume "D:" | Select-Object `
Volume,
OptimizedFilesCount,
OptimizedFilesSize,
SavedSpace,
SavingsRate,
LastOptimizationTime,
LastOptimizationResult,
LastGarbageCollectionTime,
LastScrubbingTime | Format-List
# Example output interpretation:
# SavedSpace : 187456512000 (187 GB saved)
# SavingsRate : 62 (62% space reduction)
# OptimizedFilesCount : 142856 (files that have been deduplicated)
# Get deduplication status across all enabled volumes
Get-DedupStatus | Select-Object Volume, SavingsRate,
@{N="SavedGB";E={[math]::Round($_.SavedSpace/1GB,2)}},
LastOptimizationResult | Format-Table -AutoSize
Step 5: Manually Start Deduplication Jobs
Deduplication runs as background jobs scheduled by Windows. You can trigger jobs manually to test configuration, process files before a maintenance window, or reclaim space immediately after deleting a large dataset:
# Start the main Optimization job (deduplicates new/changed files)
Start-DedupJob -Volume "D:" -Type Optimization
# Start a Garbage Collection job (reclaims space from deleted/moved files)
# Run this after deleting large amounts of data to free chunk store space
Start-DedupJob -Volume "D:" -Type GarbageCollection
# Start a Scrubbing job (identifies and repairs data integrity issues in the chunk store)
Start-DedupJob -Volume "D:" -Type Scrubbing
# Start an Unoptimization job (reverses deduplication — prepares for Disable-DedupVolume)
# WARNING: this can take hours and temporarily requires double the data size
Start-DedupJob -Volume "D:" -Type Unoptimization
# Monitor running deduplication jobs
Get-DedupJob
# Wait for a job to complete and check its outcome
$Job = Get-DedupJob -Volume "D:" | Where-Object { $_.Type -eq "Optimization" }
while ($Job.State -eq "Running") {
Write-Host "$(Get-Date -Format 'HH:mm:ss') - Progress: $($Job.Progress)% | Rate: $($Job.Throughput) MB/s"
Start-Sleep -Seconds 10
$Job = Get-DedupJob -Volume "D:" | Where-Object { $_.Type -eq "Optimization" }
}
Write-Host "Optimization completed: $($Job.State)"
Step 6: Data Deduplication in Hyper-V Workloads on CSV
Windows Server 2025 Datacenter edition extends deduplication support to Cluster Shared Volumes (CSVs) used by Hyper-V clusters. This allows deduplication of VHDX files for running virtual machines, which can yield significant savings in VDI and multi-tenant environments where VMs share a common base OS:
# On a Hyper-V cluster node, enable deduplication on a CSV volume
# CSV deduplication requires Windows Server 2025 Datacenter edition
Enable-DedupVolume -Volume "C:ClusterStorageVolume1" -UsageType HyperV
# Verify it's enabled on the CSV
Get-DedupVolume -Volume "C:ClusterStorageVolume1"
# Start optimization on the CSV
Start-DedupJob -Volume "C:ClusterStorageVolume1" -Type Optimization
# Monitor savings on CSV volumes
Get-DedupStatus -Volume "C:ClusterStorageVolume1" |
Select-Object Volume, SavingsRate,
@{N="SavedGB";E={[math]::Round($_.SavedSpace/1GB,2)}},
OptimizedFilesCount
# Measure deduplication ratio across all cluster volumes
Get-ClusterSharedVolume | ForEach-Object {
$CSVPath = $_.SharedVolumeInfo.FriendlyVolumeName
$DedupStatus = Get-DedupStatus -Volume $CSVPath -ErrorAction SilentlyContinue
if ($DedupStatus) {
[PSCustomObject]@{
CSVName = $_.Name
Volume = $CSVPath
SavingsRate = "$($DedupStatus.SavingsRate)%"
SavedGB = [math]::Round($DedupStatus.SavedSpace/1GB, 2)
}
}
} | Format-Table -AutoSize
Step 7: Disable Data Deduplication
If you need to disable deduplication — before migrating a volume to a storage system that does not support the deduplication chunk store format, or before cloning a disk — you must first run an Unoptimization job to restore all file data to its original non-deduplicated form. Disabling without unoptimizing leaves chunk-store-encoded data that some tools cannot read correctly:
# Step 1: Run unoptimization to restore all data to natural form
# This requires free space equal to the SavedSpace amount to be available
Start-DedupJob -Volume "D:" -Type Unoptimization -Wait
# Step 2: Verify unoptimization is complete (OptimizedFilesCount should approach 0)
Get-DedupStatus -Volume "D:" | Select-Object OptimizedFilesCount, SavedSpace, SavingsRate
# Step 3: Disable deduplication on the volume
# DataAccess mode disables new optimization but preserves existing chunk store (faster)
Disable-DedupVolume -Volume "D:" -DataAccess
# Full disable (after unoptimization completes, removes chunk store entirely)
Disable-DedupVolume -Volume "D:"
# Verify deduplication is disabled
Get-DedupVolume -Volume "D:"
The -DataAccess flag is useful when you want to temporarily pause deduplication activity without waiting for unoptimization — for example, during performance-sensitive maintenance operations. It disables new optimization jobs while keeping the existing chunk store intact so existing deduplicated files remain readable.
Conclusion
Data Deduplication on Windows Server 2025 is a mature, production-ready technology that delivers substantial storage savings across file server, Hyper-V, and backup workloads with minimal administrative overhead. By selecting the correct usage type when enabling deduplication, tuning minimum file age and exclusions to avoid processing files that are too new or too small to benefit, monitoring savings rates with Get-DedupStatus, and scheduling manual jobs during off-peak hours, you can typically recover 40–80% of your volume capacity on file server workloads without purchasing additional storage. The key operational principle is to let deduplication run for at least 7–14 days before evaluating savings, as the deduplication engine requires time to process the existing file catalog and build the shared chunk store. For environments with mixed workloads, enable deduplication volume-by-volume with workload-appropriate settings rather than applying a one-size-fits-all configuration.