Title: Using rsnapshot for easy backups | |
Author: Solène | |
Date: 10 January 2020 | |
Tags: openbsd | |
Description: | |
## Introduction | |
rsnapshot is a handy tool to manage backups using rsync and hard links | |
on the | |
filesystem. rsnapshot will copy folders and files but it will skip | |
duplication | |
over backups using hard links for files which has not changed. | |
This kinda create snapshots of your folders you want to backup, only | |
using | |
rsync, it's very efficient and easy to use, and getting files from | |
backups is | |
really easy as they are stored as files under the rsnapshot backup. | |
## Installation | |
Installing rsnapshot is very easy, on most systems it will be in your | |
official | |
repository packages. | |
To install it on OpenBSD: `pkg_add rsnapshot` (as root) | |
## Configuration | |
Now you may want to configure it, in OpenBSD you will find a template | |
in | |
`/etc/rsnapshot.conf` that you can edit for your needs (you can make a | |
backup | |
of it first if you want to start over). As it's stated in big (as big | |
as it can | |
be displayed in a terminal) letters at the top of the configuration | |
sample | |
file, you will see that things must be separated by TABS and not | |
spaces. I've | |
made the mistakes more than once, don't forget using tabs. | |
I won't explain all options, but only the most importants. | |
The variable `snapshot_root` is where you want to store the backups. | |
Don't put | |
that directory in a directory you will backup (that will end into an | |
infinite | |
loop) | |
The variable `backup` is for telling rsnapshot what you want to backup | |
from | |
your system to which directory inside snapshot_root | |
Here are a few examples: | |
backup /home/solene/ myfiles/ | |
backup /home/shera/Documents shera_files/ | |
backup /home/shera/Music shera_files/ | |
backup /etc/ etc/ | |
backup /var/ var/ exclude=logs/* | |
**Be careful when using ending slashes to paths, it works the same as | |
with rsync**. | |
`/home/solene/` means that into target directory, it will contains the | |
content | |
of `/home/solene/` while `/home/solene` will copy the folder solene | |
within the | |
target directory, so you end up with | |
target_directory/solene/the_files_here. | |
The variables `retain` are very important, this will define how | |
rsnapshot keep | |
your data. In the example you will see alpha, beta, gamma but it could | |
be hour, | |
day, week or foo and bar. It's only a name that will be used by | |
rsnapshot to | |
name your backups and also that you will use to tell rsnapshot which | |
kind of | |
backup to do. Now, I must explain how rsnapshot actually work. | |
## How it work | |
Let's go for a straighforward configuration. We want a backup every | |
hour on the | |
last 24h, a backup every day for the past 7 days and 3 manuals backup | |
that we | |
start manually. | |
We will have this in our rsnapshot configuration | |
retain hourly 24 | |
retain daily 7 | |
retain manual 3 | |
but how does rsnapshot know how to do what? The answer is that it | |
doesn't. | |
In root user crontab, you will have to add something like this: | |
# run rsnapshot every hour at 0 minutes | |
0 * * * * rsnapshot hourly | |
# run rsnapshot every day at 4 hours 0 minutes | |
0 4 * * * rsnapshot daily | |
and then, when you want to do a manual backup, just start `rsnapshot | |
manual` | |
Every time you run rsnapshot for a "kind" of backup, the last version | |
will be | |
named in the rsnapshoot root directory like hourly.0 and every backups | |
will be | |
shifted by one. The directory getting a number higher than the number | |
in the | |
`retain` line will be deleted. | |
## New to crontab? | |
If you never used crontab, I will share two important things to know | |
about it. | |
Use MAILTO="" if you don't want to receive every output generated from | |
scripts | |
started by cron. | |
Use a PATH containing /usr/local/bin/ in it because in the default cron | |
PATH it | |
is not present. Instead of setting PATH you can also using full binary | |
paths | |
into the crontab, like /usr/local/bin/rsnapshot daily | |
You can edit the current user crontab with the command `crontab -e`. | |
Your crontab may then look like: | |
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/l | |
ocal/sbin | |
MAILTO="" | |
# comments are allowed in crontab | |
# run rsnapshot every hour at 0 minutes | |
0 * * * * rsnapshot hourly | |
# run rsnapshot every day at 4 hours 0 minutes | |
0 4 * * * rsnapshot daily |