How to Install and Use Restic on Linux for Fast, Encrypted, and Deduplicated Backups

Safeguarding critical data against hardware failure, ransomware attacks, and accidental deletion is an essential responsibility for any Linux system administrator. While legacy tools like tar and rsync can copy files, they lack native client-side encryption, fine-grained chunk deduplication, and atomic snapshot verification. Restic is a modern, standalone backup utility written in Go that treats backups as immutable, cryptographically secured snapshots. It automatically deduplicates blocks across backups and supports a vast range of storage destinations. This guide demonstrates how to install and utilise Restic on Linux to create secure, encrypted, and deduplicated backups.

Why Choose Restic for Linux Backups?

Restic distinguishes itself from traditional backup utilities through several architectural principles:

  • End-to-End Encryption: Every repository is secured by AES-256 in counter mode and authenticated with Poly1305. Data is encrypted before leaving your host machine.
  • Content-Defined Chunking (Deduplication): Restic splits files into variable-sized chunks using Rabin fingerprints. If duplicate files or minor edits exist, only modified chunks are saved, dramatically saving storage space.
  • Universal Storage Backends: Backups can be written directly to local disks, external USB drives, SFTP servers, Amazon S3, Backblaze B2, Google Cloud Storage, or Microsoft Azure Blob Storage.
  • Snapshot Immutability: Every backup operation generates a self-contained snapshot representing the complete file system tree at that exact moment. Deleting old snapshots reclaims unused chunks without corrupting subsequent snapshots.

Installing Restic on Linux

Restic is packaged across all major distribution repositories and can also be installed as a standalone static binary.

Method 1: Installing via Native Package Managers

On Ubuntu and Debian:

sudo apt update && sudo apt install -y restic

On Fedora and RHEL-derivatives:

sudo dnf install -y restic

On Arch Linux:

sudo pacman -S restic

Method 2: Upgrading or Direct Binary Installation

Restic features a built-in self-updater. To ensure you are running the newest release, run:

sudo restic self-update

Initialising a Secure Backup Repository

Before saving snapshots, you must initialise a repository. A repository is the directory or cloud container where Restic stores encrypted data blobs and index trees.

Initialising on a Local or External Storage Drive

To initialise a repository on an external drive mounted at /mnt/backup-drive/restic-repo:

restic init --repo /mnt/backup-drive/restic-repo

Restic prompts you to enter and confirm a password. Store this password securely in a password manager. If this key is lost, your encrypted data cannot be decrypted by any party.

Exporting Environment Variables for Non-Interactive Shells

To avoid repeatedly typing repository flags and passwords, export them into your shell environment or a restricted credentials file (chmod 600):

export RESTIC_REPOSITORY="/mnt/backup-drive/restic-repo"
export RESTIC_PASSWORD="YourSecurePasswordHere"

Creating Snapshots with Exclusion Patterns

Once initialised, creating a snapshot is as simple as running restic backup followed by target directories:

restic backup /home/user/documents /srv/www

Excluding Unnecessary Files and Caches

Backing up temporary directories, browser caches, and development dependencies waste bandwidth and storage. Use exclusion flags or an exclude file:

restic backup /home/user \
  --exclude="/home/user/.cache" \
  --exclude="/home/user/.local/share/Trash" \
  --exclude="**/node_modules" \
  --exclude="**/.git"

Alternatively, create a text file named excludes.txt and pass it with --exclude-file=excludes.txt.

Listing and Inspecting Snapshots

To view all completed snapshots stored inside the repository:

restic snapshots

Restic outputs a formatted table showing snapshot IDs, timestamps, hostnames, tags, and source paths.

To inspect the contents of a specific snapshot without extracting files:

restic ls 7a4b8c9d

To compare differences between two snapshots:

restic diff 7a4b8c9d 3f2e1d0c

Restoring Files from a Backup

Restic offers two convenient restoration methods: standard directory extraction and mounting snapshots as a virtual filesystem.

Method 1: Direct File Extraction

To restore an entire snapshot to a recovery folder:

restic restore 7a4b8c9d --target /tmp/restored-data

To extract a single specific file or directory from the snapshot:

restic restore 7a4b8c9d --target /tmp/recovery --include "/home/user/documents/report.pdf"

Method 2: Interactive FUSE Mounting

If you need to search through historical versions visually, mount your entire repository as a read-only filesystem using FUSE:

mkdir -p /mnt/restic-browse
restic mount /mnt/restic-browse

Open another terminal and browse /mnt/restic-browse/snapshots. You can copy individual files using standard commands (such as cp) or graphical file managers. Press Ctrl + C in the original terminal to unmount the filesystem.

Repository Maintenance and Pruning Obsolete Snapshots

Over time, accumulating daily snapshots can consume substantial storage. Restic includes a forget command with flexible retention policies to prune old snapshots automatically:

restic forget \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 12 \
  --keep-yearly 3 \
  --prune

The --prune flag instructs Restic to physically scan the repository, identify unreferenced data chunks, and purge them from disk to reclaim physical space.

Verifying Repository Integrity

Hardware degradation, silent bit rot, or disk errors can corrupt storage sectors. Run periodic health checks to verify that all cryptographic hashes match:

restic check --read-data-subset=10%

This command verifies the repository structure and downloads a 10% random sample of data packets to ensure decryption keys and file blocks remain completely healthy.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.