La página personal de Juan Gabriel Covas
– Juan Gabriel Covas. 2015-2016
Mis notas en inglés acerca de este paquete de backup incluido en las distros más populares de Linux.
rsnapshot is a filesystem snapshot utility. It can take incremental snapshots of local and remote filesystems for any number of machines.
Local filesystem snapshots are handled with rsync. Secure remote connections are handled with rsync over ssh.
Since I’ve worked a lot with “rsync over ssh” for fast, custom mirroring and backup solutions, this old, established program looked perfect to me. I also liked the concept of rapidly having a “snapshot server” that simply pulls files from other boxes and easily allows you to access historical, incremental backups for them. It’s a “standard package” on both Ubuntu and RedHat/CentOS distros and many others. Backend is mainly Perl, rsync and other standard tools (cp, ssh), so it’s pretty KISS.
Allows for very simple restore operations and simple historical backups (i.e. automatic rotation for hourly, daily, weekly, monthly), saving a lot of disk space by using hard links.
RH/CentOS # yum install rsnapshot Ubuntu # aptitude install rsnapshot
The manpage for rsnapshot is pretty straightforward. Anyway, I had a taste of the features by looking at:
Things I like:
Preparing a host to allow passwordless login by the snapshot server (so it can pull the files)
Add the public key to the file /home/user/.ssh/authorized_keys
$ if [ ! -d .ssh ]; then mkdir .ssh ; chmod 700 .ssh ; fi $ echo “ssh-rsa XXXXXXXXXXXXXXXXXXXXXXX” >>~/.ssh/authorized_keys $ chmod 600 .ssh/authorized_keys
PermitRootLogin without-password (restart sshd!!!!)
TEST the connection so you bypass the known host check and obviously test that everything works
Preparing a mysql database to allow remote login (so the snapshot server can pull the dumps)
Make sure firewall allows TCP port 3306
Update CSF Firewall, file:
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,9876,3000:3050,3306" TCP_OUT = "20,21,22,25,53,80,110,113,443,9876,3000:3050,3306"
Creating a new user “remotebackup” with “all privileges” that can connect from anywhere:
skip-networking is commented at mysql server (so you allow networking)
/etc/my.cnf.d/server.cnf (requires mysql restart)
Configuration changes done at:
# This file requires TABS between elements # # Directories require a trailing slash: # right: /home/ # wrong: /home
You can later test configuration using:
$ rsnapshot configtest
# All snapshots will be stored under this root directory. # snapshot_root /.snapshots/
Define snapshot root:
snapshot_root /var/cache/rsnapshot/ snapshot_root /backupdrive/rsnapshot/
Uncomment cmd_ssh to use rsync over ssh:
#cmd_ssh /usr/bin/ssh cmd_ssh /usr/bin/ssh
Comment hourly retain since we don’t want it:
retain hourly 6 #retain hourly 6
Uncomment logfile so we get logs:
#logfile /var/log/rsnapshot.log logfile /var/log/rsnapshot.log
Uncomment ssh_args so we can set a custom port, key, etc. for remote server(s): Note: we could have different configs by calling rsnapshot using “-c configgile”
#ssh_args -p 22 ssh_args -p 9876 -i /root/.ssh/snapshot_rsa
Changes done at /etc/cron.d/rsnapshot
I commented the hourly cron since I don’t want it (also commented the hourly retain at .conf)
# This is a sample cron file for rsnapshot. # The values used correspond to the examples in /etc/rsnapshot.conf. # There you can also set the backup points and many other things. # # To activate this cron file you have to uncomment the lines below. # Feel free to adapt it to your needs. # 0 */4 * * * root /usr/bin/rsnapshot hourly 30 3 * * * root /usr/bin/rsnapshot daily 0 3 * * 1 root /usr/bin/rsnapshot weekly 30 2 1 * * root /usr/bin/rsnapshot monthly
Official rsnapshot HOWTO
Pass arguments to conf backup/backup_script directive
Use the fourth column of a “backup”. This is how you specify per-backup-point options to over-ride global settings. This extra parameter can take several options, separated by commas.
Syntax test for config file:
# rsnapshot configtest
Run rsnapshot in test mode. This will print out a verbose list of the things it will do, without actually doing them. To do a test run, run this command:
# rsnapshot -t daily [hourly]
To see the sum total of all space used, try:
My database backup script for “backup_script” at rsnapshot.conf
I have written a “rsnapshot-mysql.sh” bash script to be able to pull all mysql databases from local or remote hosts. It writes each database on a directory and dumps tables separately to be more rsnapshot friendly. Since this complicates the db restore process, it automatically creates restore scripts too.