//------------------------------------------------------------------- //-------------------------------------------------------------------
Set Up BorgBackup to a Storage VPS

How to Set Up BorgBackup to a Storage VPS with SSH for Incremental Backups

BorgBackup creates fast incremental backups over SSH that save space by removing duplicate data. In this guide, you will learn the complete setup process for backing up your production server to a High Storage VPS using BorgBackup to a Storage VPS.

By the end of this guide, you will have a complete backup system that runs automatically every day, keeps your data safe on a remote server, and uses minimal storage thanks to deduplication and incremental backups.

Prerequisites To Back up Your Server Using BorgBackup to a Storage VPS

To follow this guide, you will need the following setup:

You will need two Linux servers, one to back up, which is your source server, and one to store the data, which is your Storage VPS. If you need a high-storage VPS, you can check PerLod Hosting, providing flexible and reliable options.

Also, you must have administrative access to both machines to run the necessary commands.

Install BorgBackup on Both Servers

You must install the BorgBackup package on both the Source server and the Storage VPS, which allows the two servers to communicate and manage your backup data efficiently.

Based on your Linux OS, you can use the commands below to install BorgBackup:

On Ubuntu and Debian:

sudo apt update
sudo apt install borgbackup -y

On RHEL, AlmaLinux, and Rocky Linux:

sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install borgbackup -y

Configure SSH Key Authentication

To enable automated backups without manual password entry, you need to set up SSH key authentication. This secure method allows your Source server to log in to the Storage VPS automatically while restricting access to only backup commands.

Generate an SSH key pair on the source server with the command below:

sudo ssh-keygen -t ed25519 -f /root/.ssh/borgbackup_key -N ""

To display the public key, run the command below:

sudo cat /root/.ssh/borgbackup_key.pub

Now you must create a dedicated user for backups on the Storage VPS with the commands below:

sudo adduser --disabled-password borgbackup
sudo su - borgbackup
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

You must add the public key from the source server to the storage VPS with restricted access. Open the following file:

nano ~/.ssh/authorized_keys

Add the following line with your actual public key:

command="borg serve --restrict-to-path /home/borgbackup/backups",restrict YOUR_PUBLIC_KEY

The “command=” setting locks this key so it can only run backups and cannot be used to control your server or run other commands. The restrict option adds an extra layer of safety by blocking all other unnecessary SSH features.

Once you are done, create the backup directory on the storage VPS with the command below:

mkdir -p /home/borgbackup/backups
exit

At this point, you can test the SSH connection from the source server with the following command:

sudo ssh -i /root/.ssh/borgbackup_key borgbackup@storage-vps-ip

You should see a message about restricted access, not a shell prompt.

Initialize the Borg Repository

Now that the servers are connected, you need to set up the storage space for your backups. You can initialize a new and encrypted repository on the storage VPS where all your future backup data will be securely stored.

To initialize a new Borg repository, run the commands below from the source server:

export BORG_RSH='ssh -i /root/.ssh/borgbackup_key'
borg init --encryption=repokey-blake2 borgbackup@storage-vps-ip:/home/borgbackup/backups/server1

Note: The –encryption=repokey-blake2 setting encrypts your backups using a key stored directly inside the repository. You will be asked to create a password for this key, save it carefully, because if you lose it, you will lose access to all your backups forever.

Save the passphrase as an environment variable for automated backups with the command below:

export BORG_PASSPHRASE='your-secure-passphrase'

Create First Backup with BorgBackup to a Storage VPS

Once your repository is ready, you can run your first backup. The following command will securely copy your chosen files from the source server to the storage VPS:

export BORG_RSH='ssh -i /root/.ssh/borgbackup_key'
export BORG_PASSPHRASE='your-secure-passphrase'

borg create --stats --progress --compression lz4 \
  borgbackup@storage-vps-ip:/home/borgbackup/backups/server1::{hostname}-{now:%Y-%m-%d-%H%M%S} \
  /etc /var/www /home --exclude '*.tmp' --exclude '/home/*/.cache'

Command parameters:

  • --stats: Shows backup size statistics after completion.
  • --progress: Displays real-time backup progress.
  • --compression lz4: Uses fast LZ4 compression.
  • {hostname}-{now:%Y-%m-%d-%H%M%S}: Creates an archive name with hostname and timestamp.
  • /etc /var/www /home: Directories to back up.
  • --exclude: Files or folders to skip.

To view all archives in your repository, you can use the command below:

borg list borgbackup@storage-vps-ip:/home/borgbackup/backups/server1

List files in a specific archive with the following command:

borg list borgbackup@storage-vps-ip:/home/borgbackup/backups/server1::archive-name

To extract an entire archive, you can use:

borg extract borgbackup@storage-vps-ip:/home/borgbackup/backups/server1::archive-name

Extract specific files or directories with:

borg extract borgbackup@storage-vps-ip:/home/borgbackup/backups/server1::archive-name /etc/nginx

Also, you can remove old archives according to retention policies:

borg prune --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
borgbackup@storage-vps-ip:/home/borgbackup/backups/server1

Note: Pruning marks archives for deletion, but doesn’t free disk space until you run compact.

Free disk space after pruning with the command below:

borg compact borgbackup@storage-vps-ip:/home/borgbackup/backups/server1

Automate Borg Backups with Cron

Running backups manually for production environments isn’t efficient. To ensure consistent data protection, you should automate the backup process using cron, which will execute your backups on a scheduled basis without any manual steps.

Create a backup script with the command below:

sudo nano /usr/local/bin/borgbackup.sh

Add the following content to the file:

#!/bin/bash

export BORG_RSH='ssh -i /root/.ssh/borgbackup_key'
export BORG_PASSPHRASE='your-secure-passphrase'
export BORG_REPO='borgbackup@storage-vps-ip:/home/borgbackup/backups/server1'

borg create --stats --compression lz4 \
  $BORG_REPO::{hostname}-{now:%Y-%m-%d-%H%M%S} \
  /etc /var/www /home \
  --exclude '*.tmp' \
  --exclude '/home/*/.cache'

borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 $BORG_REPO

borg compact $BORG_REPO

Make the script executable with the command below:

sudo chmod +x /usr/local/bin/borgbackup.sh

Add a cron job to run daily, for example, at 2 AM:

sudo crontab -e

Add the following line to the file:

0 2 * * * /usr/local/bin/borgbackup.sh >> /var/log/borgbackup.log 2>&1

To verify backup integrity, you can run the command below:

borg check --verify-data borgbackup@storage-vps-ip:/home/borgbackup/backups/server1

The –verify-data flag performs a deep check, reading the actual backup data to make sure no files are corrupted.

To view the repository statistics, you can use:

borg info borgbackup@storage-vps-ip:/home/borgbackup/backups/server1

This displays total repository size, number of archives, and deduplication statistics.

FAQs

How much space does BorgBackup save with deduplication?

BorgBackup saves 50 to 90% of storage space by only storing unique data and ignoring duplicates. The exact savings depend on how much your data changes between backups.

Can I limit BorgBackup bandwidth?

Yes, add –remote-ratelimit=5000 to your borg create command to limit upload speed. You can adjust it according to your needs.

How do I back up with Borg to a different SSH port?

Modify the BORG_RSH variable to include the port: export BORG_RSH='ssh -i /root/.ssh/borgbackup_key -p 2222'

Conclusion

At this point, you have a complete BorgBackup to a Storage VPS setup that automatically protects your data with encrypted backups. The system automatically compresses your data to save space and runs without manual work.

To stay safe, test restoring your files regularly to make sure your backups work, and keep your encryption password stored securely offline. For critical servers, consider setting up email alerts for backup failures.

We hope you enjoy this guide. Subscribe to our X and Facebook channels to get the latest articles.

Post Your Comment

PerLod delivers high-performance hosting with real-time support and unmatched reliability.

Contact us

Payment methods

payment gateway
Perlod Logo
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.