Introduction
Data is the lifeblood of any organization, and protecting it from loss—whether through hardware failure, accidental deletion, ransomware, or natural disaster—is essential for business continuity. For small teams, the challenge is doing this effectively without enterprise-level budgets or dedicated backup administrators.
Open source backup solutions have matured significantly, offering features that rival commercial products at a fraction of the cost. Modern tools provide efficient deduplication, encryption, cloud storage integration, and automated scheduling—all without licensing fees.
This guide explores the leading open source backup solutions suitable for small teams. We’ll cover Restic for its simplicity and cloud-native design, Borg for efficient deduplication, Duplicati for user-friendly GUI options, and strategies for implementing comprehensive backup coverage without overwhelming complexity.
Understanding Backup Requirements
Before selecting tools, understanding what needs backup and what recovery time objectives you need helps make informed decisions.
Assessing Your Data
Start by cataloging your critical data. For most small teams, this includes databases (PostgreSQL, MySQL, MongoDB), application state (file storage, user uploads), configuration files (infrastructure as code, secrets), and developer artifacts (code repositories, CI/CD pipelines).
Not all data needs the same protection level. Some data is irreplaceable—customer data, intellectual property, years of accumulated content. Other data might be easily reconstructed from sources—generated files, caches, temporary data.
Defining Recovery Objectives
Two key metrics guide backup strategy. Recovery Point Objective (RPO) defines how much data loss is acceptable—expressed in time, this determines how frequently you need to back up. If RPO is one hour, you must capture data at least every hour. Recovery Time Objective (RTO) defines how quickly you need to be operational after data loss—this determines whether you need instant recovery capabilities or can tolerate longer restoration times.
For most small teams, an RPO of 24 hours (daily backups) is acceptable for non-critical data, while critical systems benefit from hourly or even continuous backup. RTO depends on business criticality—a marketing website might tolerate hours of downtime, while a SaaS product needs minutes.
Backup Strategies
Three primary strategies address different needs. Full backups capture everything, providing simple recovery but consuming significant storage and time. Incremental backups capture only changes since the last backup, minimizing storage and speed but adding recovery complexity—restoration requires the full backup plus all incremental changes. Deduplication reduces storage by identifying and storing only unique data chunks, achieving excellent compression while maintaining fast backup times.
Modern backup tools typically combine these strategies, taking full backups periodically while using incremental or deduplicated backups for daily operations.
Restic: Modern, Efficient Backups
Restic has emerged as a leading open source backup solution, offering a modern design that emphasizes simplicity, efficiency, and security. Written in Go, it’s cross-platform, fast, and provides strong encryption.
Key Features
Restic’s deduplication is intelligent—it identifies redundant data across backups, storing unique chunks only once. This approach dramatically reduces storage requirements, especially for virtual machines or systems with significant duplication.
Encryption is built in by default. Restic encrypts all data client-side before transmission, meaning the backup repository stores only encrypted blobs. Even if someone gains access to your backup storage, they cannot read your data without the password.
The incremental backup model means only changed data is transmitted after the initial backup. This efficiency makes Restic practical even for large datasets with limited bandwidth.
Installing and Initializing Restic
Restic runs on Linux, macOS, and Windows. Install it through package managers:
# Linux
apt-get install restic
# macOS
brew install restic
# Windows
choco install restic
Initialize a backup repository:
# Create a repository encrypted with a password
restic init --repo /backup/myapp
# Or use a specific backend
restic init --repo s3:https://s3.amazonaws.com/bucket/myapp
The password you provide encrypts your backup data—lose the password and you lose access to your backups.
Basic Backup Operations
Backing up data is straightforward:
# Backup a directory
restic backup /data/myapp --repo /backup/myapp
# Backup with tags for organization
restic backup /data/myapp --repo /backup/myapp --tag production
# Exclude patterns
restic backup /data/myapp --repo /backup/myapp \
--exclude "*.tmp" \
--exclude "node_modules"
Restic automatically handles deduplication—you’ll see significantly reduced backup times after the initial full backup.
Restoration
Restoring from Restic is equally simple:
# List available snapshots
restic snapshots --repo /backup/myapp
# Restore a snapshot to a directory
restic restore latest --repo /backup/myapp --target /restored
# Restore specific files
restic restore latest --repo /backup/myapp --target /restored \
--include "important-file.txt"
Cloud Storage Integration
Restic supports numerous backends for storing backup data:
# S3-compatible storage
restic init --repo s3:https://s3.amazonaws.com/bucket/myapp
# Backblaze B2 (cost-effective)
restic init --repo b2:bucketname:path
# Google Cloud Storage
restic init --repo gs:bucket-name:path
# Azure Blob Storage
restic init --repo azure:container-name:path
# Local filesystem
restic init --repo /backup/myapp
Backblaze B2 provides excellent value for small teams—significantly cheaper than S3 for many use cases while maintaining compatibility with tools that expect S3-compatible APIs.
Borg Backup: Deduplication Excellence
BorgBackup (commonly called Borg) provides the most efficient deduplication available in open source tools. Originally designed for Linux systems, it excels at backing up large volumes of data where deduplication can significantly reduce storage requirements.
Key Features
Borg’s deduplication is its standout feature. It identifies data chunks that appear anywhere in the backup repository and stores each unique chunk only once. This approach works across time—identical files or file versions across different backups all share storage.
Compression options let you trade CPU cycles for storage savings. LZ4 provides fast compression with minimal impact, while ZSTD offers better compression ratios.
The verification feature checks repository integrity, ensuring you can actually restore when needed. Regular verification catches silent corruption before it becomes a problem.
Installing and Initializing Borg
Borg is available in most Linux distributions and can be installed:
# Debian/Ubuntu
apt-get install borgbackup
# macOS
brew install borg-backup
Initialize a repository:
# Local repository
borg init --encryption=repokey /backup/myrepo
# Remote repository via SSH
borg init user@backup-server:/backup/myrepo
The encryption option ensures your backup data is protected at rest.
Creating Backups
Borg uses a archive-based model where each backup creates a named archive:
# Create backup with current date
borg create /backup/myrepo::$(date +%Y-%m-%d) /data/myapp
# Backup with exclusion
borg create /backup/myrepo::daily \
/data/myapp \
--exclude '*.tmp' \
--exclude-cache
# Prune old backups automatically
borg prune /backup/myrepo \
--keep-daily=7 \
--keep-weekly=4 \
--keep-monthly=6
The prune command automatically manages retention, removing old backups according to your schedule while keeping daily, weekly, and monthly snapshots as specified.
Restoration
Restoring from Borg provides flexibility:
# List archives
borg list /backup/myrepo
# Extract entire archive
borg extract /backup/myrepo::2024-01-15
# Extract specific paths
borg extract /backup/myrepo::2024-01-15 --path home/important/
# Mount as filesystem for easy browsing
borg mount /backup/myrepo::2024-01-15 /mnt/backup
Duplicati: User-Friendly Backups
Duplicati provides a graphical interface for backups, making it accessible to users who prefer visual tools. It runs on Windows, macOS, and Linux, with a web-based interface for configuration and monitoring.
Key Features
Duplicati’s web interface provides visual configuration of backup jobs, monitoring of backup status, and easy restoration through a file browser. This accessibility makes it suitable for teams without dedicated backup administration.
Built-in scheduling handles automatic backups without external cron jobs. Encryption uses AES-256, protecting your data in transit and at rest. Source files can be filtered by path, size, or modification time, providing control over what gets backed up.
The backup destination can be local storage, network shares, or various cloud providers. This flexibility lets you start with local backup and add cloud storage as needs evolve.
Setting Up Duplicati
Run Duplicati as a service or container:
# Docker deployment
docker run -d \
--name=duplicati \
-p 8200:8200 \
-v /data:/source \
-v /backup:/backup \
-v duplicati:/config \
linuxserver/duplicati
Access the web interface at http://localhost:8200 to configure backup jobs.
Configuration Through the Interface
Duplicati guides you through backup configuration:
- Source Data: Select folders or files to back up
- Destination: Choose backup location (local, S3, B2, etc.)
- Schedule: Set automatic backup frequency
- Retention: Define how long to keep backups
- Options: Configure encryption, compression, and filters
The interface provides immediate feedback on configuration issues and validates settings before saving.
Building a Complete Backup Strategy
Implementing comprehensive backup requires more than selecting tools—you need a strategy covering what to back up, where to store it, and how to recover.
The 3-2-1 Rule
A classic backup principle: keep at least 3 copies of your data, on 2 different types of media, with 1 stored offsite. For small teams, this translates to:
- Original data on production systems
- Local backup on a different device (external drive or NAS)
- Offsite backup in cloud storage or a secondary location
This ensures that even if your primary system and local backup both fail (fire, theft, ransomware), you can recover from the offsite copy.
Prioritizing by Criticality
Not all data requires the same backup investment. Prioritize:
Critical (daily backup, multiple retention points):
- Customer databases
- Financial records
- Source code repositories
Important (weekly backup, standard retention):
- Configuration files
- Documentation
- User-generated content
Nice-to-have (monthly or on-demand):
- Development builds
- Temporary working files
- Downloadable assets that can be reconstructed
Automation and Monitoring
Automated backups ensure consistency. Configure scheduled backups to run during low-usage periods:
# Cron job for Restic daily backup at 2 AM
0 2 * * * restic backup /data --repo /backup/myapp --password-file /etc/restic-pw
Monitor backup success and failure:
# Log output to file
0 2 * * * restic backup /data --repo /backup/myapp --password-file /etc/restic-pw >> /var/log/backup.log 2>&1
Set up alerts for backup failures—either through monitoring systems or simple approaches like cron email notifications.
Testing Restoration
The only backup that matters is one you can actually restore. Test restoration regularly:
# Monthly restoration test
0 3 * * 0 restic restore latest --repo /backup/myapp --target /test-restore && \
diff -r /data/myapp /test-restore/myapp
Document your restoration procedures. When disaster strikes, you shouldn’t be figuring out how to restore for the first time.
Cost Considerations
Open source backup tools are free, but storage costs vary significantly by provider and approach.
Cloud Storage Pricing
Compare storage costs across providers:
| Provider | Price per GB/month | Notes |
|---|---|---|
| Backblaze B2 | $0.006 | Lowest general-purpose |
| AWS S3 | $0.023 | Standard pricing |
| Google Cloud Storage | $0.020 | Regional variants |
| Azure Blob | $0.018 | Hot tier pricing |
For a 100GB repository, Backblaze B2 costs approximately $0.60 monthly versus $2.30 for S3—a significant difference over time.
Calculating Storage Needs
After initial backup, incremental backups typically add 5-10% of changed data weekly. A 100GB initial backup with 5GB weekly changes over a month requires approximately 120GB storage with deduplication, growing to around 150GB monthly.
Plan for growth. Storage costs are recurring—choose providers with pricing that scales affordably.
Minimizing Storage Costs
Several approaches reduce storage requirements:
- Enable deduplication (both Restic and Borg do this automatically)
- Use compression (trades CPU for storage)
- Exclude unnecessary data (build artifacts, caches, temp files)
- Implement appropriate retention (don’t keep backups forever)
Conclusion
Protecting your data doesn’t require enterprise budgets or complex infrastructure. Open source tools like Restic, Borg, and Duplicati provide enterprise-grade capabilities for small teams.
Start with a simple approach: identify your critical data, implement basic backup to local storage, then add offsite protection as you validate the process. Test restoration regularly—confidence in your backup is as important as having backups themselves.
The best backup solution is one you’ll actually use consistently. Choose tools that fit your workflow, automate as much as possible, and maintain vigilance about monitoring and testing. Your future self will thank you when disaster strikes and recovery works as expected.
Resources
- Restic Documentation
- BorgBackup Documentation
- Duplicati Documentation
- Backblaze B2
- Backup Best Practices
Comments