Restic is a backup-tool written in Go and compatible with Windows and Linux. From a user-standpoint it is kind of similar to Borg-Backup, with some differences, for e.g. that a repository can be shared with multiple hosts for better compression and deduplication. And since it is written in Go it is faster than Borg which uses Python.
Installation
There are a few ways to install restic.
On Fedora you could install it with dnf but the packages is a few versions behind the upstream. Normally this wouldn’t be an issue, but since the Repository-Format changed in v0.14 you should look for newer versions.
It is also available over flatpak but in an older version as well.
My preferred method is downloading the binary from GitHub and placing it in /usr/local/bin
. Since I don’t want to specify the version while calling the binary, I will add a link restic -> restic-v0.16.4
.
Usage
All commands will work the same on windows and linux. You only need to adjust the path format. For Example /mnt/restic
or D:\Restic
.
Initialize Repository
First we need to create/initialize a repository to save the backups in. You can use multiple backends to store repositories but I will focus on local folders (which includes mounted nfs and smb shares) and sftp/ssh.
# local
restic -r /path/to/repo init
# sftp
restic -r sftp:user@host:/path/to/repo init
If your SFTP server is running on a different port you can either specify the port
sftp://user@host:port//path/to/repo
or create a entry in your ~/.ssh/config
Host backuphost
User restic
Port 2222
and than use the server as if it would use the default port.
restic -r sftp:backuphost:/path/to/repo init
While creating the Repository it will ask you for a password which is the only way to access your backups. Keep it Safe!
Backup Data
Backing up data is fairly straight forward as well.
This command will backup all home-directories to a local repository. If you are using a SFTP-Repository specify it after the -r
-flag. Just as in the Repo-Initialization.
restic -r /path/to/repo backup /home
That’s it.
The first Backup will take quite long but every successive backup will use this existing snapshot to only read and save the delta, which is really fast even if you need to backup a few TB from a HDD.
Listing Backups
Every Backup is a Snapshot in restic terms. You can list them like so.
restic -r /path/to/repo snapshots
Clean Up Old Backups
Of course you want to delete some of the old backups after some time. Restic uses the same approach as for e.g. the Proxmox-Backup-Server where you define it to keep the last-x.
A list with all parameters can be found here in the official documentation. My usual cleanup looks like this.
restic -r /path/to/repo forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6
This will keep on backup for every day in the last week. One for the last 4 weeks and one for the last 6 Months. This usually covers all my needs.
The forget
command will only mark the chunk as unused. They are still stored. To finally delete them use prune
restic -r /path/to/repo prune
Using a password-file
If you want to create backups with a script without the password from stdin
you can use a password-file which is a textfile containing just you password. Keep the permissions on that file to a minimum!
restic -r /path/to/repo -p /home/user/passwordfile
Restoring Backups
The easiest way is to restore the latest backup to a temporary location and then coping the files from there.
restic -r /path/to/repo restore latest --target /tmp/restic-restore
You can also specify a different snapshot
restic -r /path/to/repo restore 7896896 --target /tmp/restic-restore
To filter paths you can use --include /home/myfile
and --exclude /home/myotherfile
.
On Linux you can also mount a snapshot to browse it’s content and copy the desired files. This is not supported on Windows yet.
restic -r /path/to/repo mount /mnt/restic
Finding a file in a Backup
If you are searching for a specific file you can search for it.
restic -r /path/to/reop find myfile.txt