Table of Contents
- Types of Backups in Linux
- 1.1 Full Backups
- 1.2 Incremental Backups
- 1.3 Differential Backups
- 1.4 Mirror Backups
- 1.5 Snapshots
- Essential Linux Backup Tools
- 2.1 Command-Line Tools
- 2.1.1
rsync: The Swiss Army Knife of File Syncing - 2.1.2
tar: Archiving with Compression - 2.1.3
dd: Disk Imaging for Raw Copies - 2.1.4
borgbackup: Deduplication & Encryption
- 2.1.1
- 2.2 GUI Tools for Desktop Users
- 2.2.1 Timeshift (System Snapshots)
- 2.2.2 Deja Dup (Simple Data Backups)
- 2.3 Snapshot Tools (LVM, Btrfs, ZFS)
- 2.1 Command-Line Tools
- What to Backup?
- 3.1 User Data vs. System Data
- 3.2 Critical Directories to Include
- Where to Store Backups?
- 4.1 Local Storage (External Drives, NAS)
- 4.2 Remote/Cloud Storage
- 4.3 The 3-2-1 Backup Rule
- Backup Best Practices
- 5.1 Regularity & Scheduling
- 5.2 Encryption
- 5.3 Compression
- 5.4 Versioning & Retention
- Automating Backups
- 6.1 Cron Jobs: Scheduling with
cron - 6.2 Systemd Timers
- 6.3 Backup Scripts (with Logging)
- 6.1 Cron Jobs: Scheduling with
- Testing Backups: The “Forgotten” Step
- 7.1 How to Test Backup Integrity
- 7.2 Restoring a Single File
- 7.3 Full System Recovery Test
- Recovery Scenarios & Troubleshooting
- 8.1 Restoring Accidentally Deleted Files
- 8.2 Recovering from OS Failure
- 8.3 Common Backup Issues & Fixes
- Conclusion
- References
1. Types of Backups in Linux
Not all backups are created equal. The type you choose depends on your goals (speed, storage efficiency, recovery time) and the data being protected. Here are the most common backup types:
1.1 Full Backups
A full backup copies all selected data (e.g., an entire directory or disk) to a backup location.
- Pros: Simplest to restore (no dependencies on other backups).
- Cons: Slow and storage-intensive (duplicates all data every time).
- Use Case: Baseline backups (e.g., monthly full backups of /home).
1.2 Incremental Backups
An incremental backup copies only data that has changed since the last backup (full or incremental).
- Pros: Fast and storage-efficient (smaller backup sizes).
- Cons: Restores require the full backup + all subsequent incrementals (complex dependency chain).
- Use Case: Daily backups after a weekly full backup.
1.3 Differential Backups
A differential backup copies data changed since the last full backup (not the last differential).
- Pros: Faster to restore than incremental (only full + latest differential needed).
- Cons: Larger than incremental backups over time (grows until next full backup).
- Use Case: Balancing speed and storage (e.g., full backup on Sunday, differential daily).
1.4 Mirror Backups
A mirror backup is an exact, real-time copy of data (e.g., syncing a folder to an external drive).
- Pros: Always up-to-date; simple to restore.
- Cons: No version history (deleting a file deletes it from the mirror too!).
- Use Case: Temporary or real-time syncs (e.g.,
rsync --deletefor a mirror).
1.5 Snapshots
A snapshot is a point-in-time “freeze” of a filesystem (e.g., LVM, Btrfs, or ZFS snapshots). It captures the state of data at a specific moment without copying the entire dataset.
- Pros: Fast, space-efficient (uses copy-on-write); ideal for consistent backups of live systems.
- Cons: Requires snapshot-capable filesystems (e.g., Btrfs) or volume managers (e.g., LVM).
- Use Case: Creating a consistent backup of a running database before a full backup.
2. Essential Linux Backup Tools
Linux offers a rich ecosystem of backup tools, from lightweight command-line utilities to user-friendly GUIs. Below are the most popular options:
2.1 Command-Line Tools
2.1.1 rsync: The Swiss Army Knife
rsync is a powerful utility for syncing files/directories locally or over a network. It uses delta-transfer (only sends changed data) and supports incremental backups.
-
Key Features: Incremental sync, compression (
-z), delete extraneous files (--delete), and exclude patterns (--exclude). -
Example 1: Basic Mirror Backup
rsync -av --delete /home/user/Documents/ /mnt/external-drive/backups/Documents/(
-a= archive mode, preserves permissions;-v= verbose.) -
Example 2: Incremental Backup with Logging
rsync -av --link-dest=/mnt/backups/last-full /home/user/ /mnt/backups/incremental-$(date +%Y%m%d)/(Creates hard links to unchanged files from the last full backup, saving space.)
2.1.2 tar: Archiving with Compression
tar (tape archive) bundles files into a single archive, often combined with compression tools like gzip or xz.
-
Key Features: Supports full/differential backups, compression, and encryption (via
gpg). -
Example 1: Full Backup with Gzip Compression
tar -czf /mnt/backups/full-$(date +%Y%m%d).tar.gz /home/user /etc(
-c= create,-z= gzip,-f= output file.) -
Example 2: Encrypted Backup with GPG
tar -czf - /home/user | gpg -c > /mnt/backups/encrypted-backup.tar.gz.gpg(Encrypts the archive with a password using GPG.)
2.1.3 dd: Disk Imaging
dd creates bit-for-bit copies of disks or partitions (e.g., /dev/sda). It’s ideal for bare-metal recovery.
- Example: Backup Entire Disk to Image
(dd if=/dev/sda of=/mnt/external-drive/sda-backup.img bs=4M status=progressif= input file,of= output file,bs= block size.) - Caveat: Slow for large disks; use
ddrescueinstead if the disk has errors.
2.1.4 borgbackup: Deduplication & Encryption
borgbackup (or borg) is a next-gen tool with deduplication (stores unique data only), compression, and built-in encryption.
- Key Features: Deduplication, incremental backups, encryption, and versioning.
- Example: Initialize a Borg Repository & Backup
# Create encrypted repo borg init --encryption=repokey /mnt/external-drive/borg-repo # Backup /home/user to repo (incremental by default) borg create --progress /mnt/external-drive/borg-repo::backup-$(date +%Y%m%d) /home/user
2.2 GUI Tools for Desktop Users
2.2.1 Timeshift
Timeshift is a GUI tool for system snapshots (like Windows System Restore). It uses rsync or Btrfs/LVM snapshots under the hood.
- Use Case: Recovering from a broken OS update or misconfiguration.
- Features: Schedules (daily/weekly), automatic cleanup of old snapshots, and easy restoration via live USB.
2.2.2 Deja Dup
Deja Dup (GNOME Backup) is a simple GUI for backing up user data (e.g., /home). It uses tar for archiving and supports cloud storage (Google Drive, Nextcloud).
- Features: Encryption, scheduled backups, and one-click restore.
2.3 Snapshot Tools
For advanced users, snapshot-capable filesystems/volume managers enable consistent backups:
- LVM Snapshots: Create a read-only snapshot of an LVM volume before running a backup (avoids data corruption in live systems).
- Btrfs/ZFS Snapshots: Built-in snapshot support for point-in-time recovery (e.g.,
btrfs subvolume snapshot).
3. What to Backup?
Not all data is equal. Focus on two categories:
3.1 User Data vs. System Data
- User Data: Irreplaceable files like documents, photos, and project files (stored in
/home). - System Data: OS configurations, installed software, and critical directories (needed to restore the OS).
3.2 Critical Directories to Include
| Data Type | Directories | Purpose |
|---|---|---|
| User Data | /home/<user> | Personal files, settings, and projects. |
| System Configs | /etc | System-wide configurations (e.g., fstab). |
| Application Data | /var/lib (e.g., databases, docker). | Data for apps like MySQL, PostgreSQL. |
| Custom Software | /usr/local | Manually installed tools (not in package managers). |
4. Where to Store Backups?
Backup storage is as critical as the backup itself. Use multiple locations to mitigate risk:
4.1 Local Storage
- External Drives: USB HDDs/SSDs (affordable, portable).
- Network-Attached Storage (NAS): Centralized storage on your local network (e.g., Synology, QNAP).
4.2 Remote/Cloud Storage
- Cloud Services: AWS S3, Backblaze, or Nextcloud (for offsite redundancy).
- Self-Hosted: Rsync over SSH to a remote server (e.g.,
rsync -av /home user@remote-server:/backups/).
4.3 The 3-2-1 Backup Rule
A golden rule for backup redundancy:
- 3 Copies of your data (original + 2 backups).
- 2 Different Media (e.g., internal drive + external SSD + cloud).
- 1 Offsite Copy (protects against theft, fire, or natural disasters).
5. Backup Best Practices
5.1 Regularity & Scheduling
- Frequency: Back up user data daily; system data weekly/monthly (adjust based on how often data changes).
- Avoid “Set It and Forget It”: Review schedules quarterly (e.g., increase frequency if you’re working on a critical project).
5.2 Encryption
Always encrypt sensitive data, especially offsite backups:
- Use
borg’s built-in encryption orgpgwithtar. - Store encryption keys securely (e.g., password manager, hardware key).
5.3 Compression
Reduce backup size with compression:
tar -z(gzip, fast) ortar -J(xz, higher compression).- Avoid over-compressing already compressed files (e.g., JPEGs, ZIPs—wastes CPU).
5.4 Versioning & Retention
- Versioning: Keep multiple backup versions (e.g., daily backups for 7 days, weekly for 1 month).
- Retention Policy: Automatically delete old backups (e.g.,
borg pruneto keep only the last 4 weekly backups).
6. Automating Backups
Manual backups are error-prone. Automate with these tools:
6.1 Cron Jobs: Scheduling with cron
cron is a time-based job scheduler. Edit crontabs with crontab -e to run backups automatically.
- Example: Daily Backup at 2 AM
(Runs# Crontab entry (run `crontab -e` to edit) 0 2 * * * /home/user/scripts/backup-script.sh >> /var/log/backup.log 2>&1backup-script.shdaily at 2 AM and logs output.)
6.2 Systemd Timers
For more control (e.g., dependencies, calendar events), use systemd timers instead of cron.
- Example: Create a
.servicefile and a.timerfile to trigger backups.
6.3 Backup Scripts
Write a script to handle logic (e.g., check disk space, send alerts on failure).
- Sample Script Snippet
#!/bin/bash BACKUP_DIR="/mnt/external-drive/backups" SOURCE="/home/user" # Check if backup drive is mounted if ! mountpoint -q "$BACKUP_DIR"; then echo "Error: Backup drive not mounted!" exit 1 fi # Run rsync backup rsync -av --delete "$SOURCE" "$BACKUP_DIR/latest/" # Log success/failure if [ $? -eq 0 ]; then echo "Backup succeeded: $(date)" >> "$BACKUP_DIR/backup.log" else echo "Backup FAILED: $(date)" >> "$BACKUP_DIR/backup.log" # Send email alert (use `mail` or `sendmail`) fi
7. Testing Backups: The “Forgotten” Step
A backup is useless if it can’t be restored. Always test!
7.1 How to Test Backup Integrity
- Verify Tar Archives:
tar -tvf backup.tar.gz(lists contents to confirm files exist). - Check Rsync Mirrors:
rsync -nav --delete /home/user/ /mnt/mirror/(dry run to detect missing files).
7.2 Restoring a Single File
- From Tar:
tar -xzf backup.tar.gz home/user/Documents/important.docx -C /tmp/(extracts to/tmp). - From Rsync:
rsync -av /mnt/backups/latest/home/user/Documents/ /home/user/Documents/(restores the directory).
7.3 Full System Recovery Test
- Bare-Metal Recovery: Use a live Linux USB to restore a
dddisk image orborgsystem backup. - Virtual Machine Test: Restore a backup to a VM to validate OS boot and functionality.
8. Recovery Scenarios & Troubleshooting
8.1 Restoring Accidentally Deleted Files
- From a Tar Backup: Extract the file using
tar -xzf backup.tar.gz path/to/file. - From a Borg Repository:
borg extract /repo::backup-20240101 home/user/lost-file.txt.
8.2 Recovering from OS Failure
- Boot from a live Linux USB.
- Mount the backup drive and target partition (e.g.,
/mnt/restore). - Restore with
rsync,tar, orborg(e.g.,tar -xzf /mnt/backup/system.tar.gz -C /mnt/restore).
8.3 Common Backup Issues & Fixes
| Issue | Cause | Fix |
|---|---|---|
| ”Permission denied” | Backup run without sudo (e.g., accessing /root). | Run with sudo or add user to backup group. |
| Backup drive full | Retention policy not pruning old backups. | Use borg prune or delete old backups. |
| Corrupted archive | Interrupted backup or bad disk. | Use tar --verify during backup; test with ddrescue. |
9. Conclusion
Backups are not optional—they’re a critical part of Linux system administration and personal data management. By combining the right tools (e.g., rsync, borg), strategies (3-2-1 rule), and habits (automation, testing), you can ensure your data survives hardware failures, human error, or disasters.
Remember: The best backup is one you’ve tested and can restore. Start small (back up /home today!), then expand to system backups and offsite storage. Your future self will thank you.