The 3-2-1 backup rule

Every serious homelab person follows the 3-2-1 rule. It sounds complex but it is just three numbers:

3 copies
Keep 3 total copies of your data — the original plus two backups.
2 media types
Store on 2 different storage types, e.g. NAS + external USB drive.
1 offsite
Keep 1 copy somewhere else entirely — cloud, friend's house, office.
⚠️Your NAS counts as ONE copy. RAID is not a backup. If your NAS catches fire, every drive inside it goes with it. You need at least one copy elsewhere.

Backup to a USB drive with rsync

rsync is a free tool that copies files to another location but only transfers what has changed since last time. First run: 1 hour. Every run after: 2 minutes.

Step 1Plug in your USB drive and mount it
bash
$
lsblk
sdb 2T disk ← your USB drive

$
sudo mkdir -p /mnt/backup && sudo mount /dev/sdb1 /mnt/backup
Step 2Run your first backup
bash
# Basic backup — -a preserves everything, -h shows human sizes
$
rsync -avh --progress /mnt/data/ /mnt/backup/data/

# Always do a dry run first — shows what would change without moving files
$
rsync -avhn --delete /mnt/data/ /mnt/backup/data/
Step 3Automate with cron
bash
$
crontab -e

# Runs backup every night at 2am
0 2 * * * rsync -aqh --delete /mnt/data/ /mnt/backup/data/ >> /var/log/nas-backup.log 2>&1
💡The trailing slash on /mnt/data/ matters in rsync — it means copy the contents of this folder, not the folder itself.

Cloud backup with Restic and Backblaze B2

Backblaze B2 costs around $6 per TB per month. Restic is a free backup tool that encrypts your data before sending it to the cloud — even Backblaze cannot read your files.

Step 1Create a Backblaze B2 bucket

Go to backblaze.com → sign up → B2 Cloud Storage → Create Bucket → name it mynas-backup. Then create an Application Key with read/write access. Copy the Key ID and Application Key.

Step 2Install Restic and initialise your backup repo
bash
$
sudo apt install restic

# Set your B2 credentials
$
export B2_ACCOUNT_ID=your_key_id
$
export B2_ACCOUNT_KEY=your_application_key

# Create your encrypted backup repository (first time only)
$
restic -r b2:mynas-backup:data init
enter password: ← choose a strong password and save it safely
Step 3Back up and restore
bash
$
restic -r b2:mynas-backup:data backup /mnt/data
snapshot abc12345 saved

# List snapshots
$
restic -r b2:mynas-backup:data snapshots

# Restore everything from latest snapshot
$
restic -r b2:mynas-backup:data restore latest --target /mnt/restore

Related guides