| 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 |