Skip to main content

Compression and Bandwidth

Two factors dominate rsync transfer performance: compression (shrinking data before it goes over the wire) and bandwidth control (preventing rsync from saturating your network). Getting these right can mean the difference between a 10-minute backup and a 2-hour one.

Compression (-z)​

How It Works​

When you enable compression with -z, rsync compresses file data before sending it over the network, then decompresses on the receiving end. This trades CPU time for reduced network traffic.

# With compression (data compressed in transit)
rsync -avz /var/www/html/ user@remote:/backup/www/

# Without compression (raw data sent)
rsync -av /var/www/html/ user@remote:/backup/www/

When to Use Compression​

ScenarioUse -z?Why
Remote transfer over internetYesReduces data sent over slow links
Transfer over LAN (1 Gbps+)NoNetwork is faster than compression overhead
Text-heavy files (code, SQL, configs, logs)YesText compresses 5–10x
Already-compressed files (.jpg, .mp4, .gz, .zip)NoCan't compress further; wastes CPU
Mixed content (code + images)MaybeCompression helps some files, not others

Compression Levels​

Fine-tune the CPU vs bandwidth trade-off:

# Low compression (fast, less CPU, less effective)
rsync -avz --compress-level=1 /var/www/ user@remote:/backup/

# Default compression (level 6 — good balance)
rsync -avz /var/www/ user@remote:/backup/

# Maximum compression (slow, most CPU, smallest transfer)
rsync -avz --compress-level=9 /var/www/ user@remote:/backup/
LevelCPU UsageCompression RatioBest For
1LowMinimalFast networks where you want slight shrinkage
6 (default)MediumGoodMost remote transfers
9HighMaximumVery slow connections where bandwidth is precious

Skip Compression for Specific File Types​

Rsync automatically skips compression for files that are already compressed. You can customize this list:

# Rsync's default skip list includes: gz, zip, jpg, mp4, etc.
# Add custom skip patterns:
rsync -avz --skip-compress=gz/jpg/mp4/png/zip/rar/pdf \
/var/www/ user@remote:/backup/

Bandwidth Limiting (--bwlimit)​

Why Limit Bandwidth?​

Running rsync at full speed on a production server can:

  • Slow down your website for visitors
  • Saturate shared hosting bandwidth
  • Trigger rate limiting from cloud providers
  • Overwhelm VPS network interfaces

How to Limit​

# Limit to 5 MB/s (5000 KB/s)
rsync -avz --bwlimit=5000 /var/www/ user@remote:/backup/

# Limit to 1 MB/s (conservative for production hours)
rsync -avz --bwlimit=1000 /var/www/ user@remote:/backup/

# Limit to 10 MB/s (generous for off-hours)
rsync -avz --bwlimit=10000 /var/www/ user@remote:/backup/

Bandwidth Recommendations​

ScenarioRecommended LimitReasoning
Production VPS during business hours1–5 MB/sLeave bandwidth for visitors
Production VPS off-hours10–50 MB/sSite has minimal traffic
Dedicated server20–100 MB/sMore capacity available
LAN transferNo limitNetwork isn't shared
Metered connection1–2 MB/sAvoid overage charges
Scheduling Strategy

Run bandwidth-limited backups during business hours and unlimited backups at night:

# Cron: 2 AM unlimited backup
0 2 * * * rsync -avz /var/www/ backup-server:/backups/www/

# Cron: 2 PM throttled sync for critical changes
0 14 * * * rsync -avz --bwlimit=2000 /var/www/ backup-server:/backups/www/

Delta Transfer vs Whole File​

Rsync uses delta transfer by default for remote syncs — sending only the changed parts of files. For local syncs, it uses whole file mode.

ModeHow It WorksBest For
Delta transfer (default for remote)Compares checksums, transfers only changed blocksRemote/WAN transfers
Whole file (--whole-file)Copies full files regardless of changesFast LAN, or when checksum computation is slower than copying
# Force whole-file mode (faster on fast LANs)
rsync -av --whole-file /var/www/ /nas/backup/www/

# Force delta transfer (rare — it's default for remote)
rsync -av --no-whole-file /var/www/ /nas/backup/www/

Monitoring Transfer Performance​

Progress Display​

# Per-file progress bar
rsync -avzP /var/www/ user@remote:/backup/

# Human-readable file sizes
rsync -avzhP /var/www/ user@remote:/backup/

Post-Transfer Statistics​

rsync -avz --stats /var/www/ user@remote:/backup/

Example output:

Number of files: 45,832
Total file size: 12.4 GB
Total transferred file size: 340 MB
Total bytes sent: 285 MB
Transfer speed: 15.2 MB/s
Speedup: 36.47

Key metrics to watch:

  • Speedup — how much data rsync avoided sending (higher = more efficient)
  • Total transferred file size vs Total file size — delta transfer savings

Logging for Automated Jobs​

rsync -avz --stats --log-file=/var/log/rsync-backup.log \
/var/www/ user@backup:/backups/www/

Optimizing for Different Network Conditions​

Slow Internet (< 10 Mbps)​

rsync -avz --compress-level=9 --bwlimit=500 -P \
/var/www/ user@remote:/backup/
  • Maximum compression to minimize data
  • Low bandwidth limit to prevent saturation
  • Progress + resume for large transfers

Fast Internet (100+ Mbps)​

rsync -avz --compress-level=1 -P \
/var/www/ user@remote:/backup/
  • Light compression (CPU is the bottleneck, not network)
  • No bandwidth limit needed

Fast LAN (1 Gbps+)​

rsync -av --whole-file /var/www/ /nas/backup/
  • No compression (network is faster than CPU)
  • Whole-file mode (reading + writing is faster than checksumming)

Unstable Connection​

rsync -avz -P --partial-dir=.rsync-partial --timeout=60 \
/var/www/ user@remote:/backup/
  • -P enables resume
  • --partial-dir stores partial files in a hidden directory
  • --timeout prevents hanging on dropped connections

Common Pitfalls​

PitfallImpactPrevention
Using -z on LAN transfersWastes CPU, slows transferSkip compression for fast networks
Using -z on already-compressed filesNo benefit + CPU overheadRsync auto-skips most, but check
No --bwlimit on production serversWebsite slows down during backupAlways limit during business hours
--bwlimit too aggressiveBackup never finishes before next runEnsure backup completes in its window
Not using -P for large transfersCan't resume after interruptionAlways use -P for GB+ transfers
Ignoring --stats outputNo visibility into transfer efficiencyEnable stats for monitoring

Quick Reference​

# Standard remote backup (with compression)
rsync -avzP /var/www/ user@remote:/backup/

# Bandwidth-limited production backup
rsync -avz --bwlimit=5000 /var/www/ user@remote:/backup/

# Maximum compression (slow connection)
rsync -avz --compress-level=9 -P /var/www/ user@remote:/backup/

# Fast LAN transfer (no compression)
rsync -av --whole-file /var/www/ /nas/backup/

# View transfer statistics
rsync -avz --stats /var/www/ user@remote:/backup/

# Log to file for automated jobs
rsync -avz --log-file=/var/log/rsync.log /var/www/ remote:/backup/

What's Next​