rsnapshot是一款基于Linux系统的备份工具,适用于大多数Linux发行版,可通过包管理器轻松安装。rsnapshot使用Perl编写,无额外依赖,支持本地和远程备份。通过rsnapshot可以备份本地目录,远程备份则利用SSH和Rsync实现。本教程将介绍如何在Linux服务器上使用Rsnapshot进行备份和恢复,包括本地备份和远程备份的配置,以及如何结合Cron实现自动备份。
前提条件
要完成本教程,请确保具备以下条件:
- 一台Linux服务器,如Debian、Ubuntu、CentOS或其他发行版
- 一个具有管理员权限的非root用户
- 可选:一台额外的服务器用于测试远程备份
安装rsnapshot
rsnapshot是一款备份工具,在大多数Linux发行版上均可用。本节将在Debian服务器上安装rsnapshot。如果你使用其他发行版,请使用相应的包管理器进行安装。
首先,使用以下命令更新软件包索引。本示例使用Debian,你也可以使用Ubuntu、Linux Mint等基于Debian的发行版。
sudo apt update

更新完成后,运行以下命令安装rsnapshot包。输入Y确认安装。
sudo apt install rsnapshot

安装完成后,检查rsnapshot二进制文件的位置和版本。
which rsnapshot
rsnapshot --version
如下图所示,Rsnapshot 1.4已安装在/usr/bin/rsnapshot路径下。

配置SSH密钥认证
在进行远程备份时,必须确保rsnapshot服务器能够使用SSH密钥认证登录到目标服务器。因此进行远程备份需要具备以下条件:
- 一个用于登录目标服务器的用户
- 已启用基于SSH密钥的认证
本节将在rsnapshot服务器上生成SSH密钥,然后将SSH公钥复制到目标服务器192.168.10.41,使用用户alice。
在rsnapshot服务器上,使用以下ssh-keygen命令生成SSH公钥和私钥。提示输入密钥位置和密码时按回车跳过。
ssh-keygen -t ed25519

现在运行以下ssh-copy-id命令将SSH公钥上传到目标服务器。本示例将使用基于密钥的SSH认证,通过用户alice从服务器192.168.10.41进行远程备份。
ssh-copy-id alice@192.168.10.41
提示时输入密码。

SSH公钥上传完成后,就可以开始配置Rsnapshot了。
配置rsnapshot
本节将配置rsnapshot进行本地和远程备份。你需要修改默认配置文件/etc/rsnapshot.conf,设置默认备份目录,启用与SSH和Rsync的集成,设置间隔备份计划,然后配置本地和远程备份。
复制rsnapshot默认配置文件/etc/rsnapshot.conf,并使用nano或vim编辑器修改。
sudo cp /etc/rsnapshot.conf /etc/rsnapshot.conf.orig
sudo nano /etc/rsnapshot.conf
修改默认的snapshot_root为新目录。该目录将用于存储备份数据。
snapshot_root /data/backup/
取消注释cmd_rsync和cmd_ssh选项以启用通过SSH的rsync远程备份。
cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh
修改默认的备份级别或间隔,如下所示。命名是可选的,可根据需要更改。本示例中daily 6将创建名为daily.0到daily.5的备份目录。
注意:请使用TAB而不是空格,否则会报错。
retain daily 6 retain weekly 7 retain monthly 4
取消注释logfile选项以启用rsnapshot日志记录。
logfile /var/log/rsnapshot.log
如果远程服务器使用自定义SSH端口,取消注释ssh_args选项并修改端口。
ssh_args -p 22
对于本地备份,使用如下配置。本示例将备份本地目录/home/arvdl到local。目标路径应为相对路径,等同于/srv/backup/name-interval/local。
backup /home/arvdl/ local
对于通过SSH和Rsync的远程备份,使用如下配置。本示例将从远程服务器192.168.10.41通过用户alice备份/etc和/var/www目录到server1相对路径目录。
backup alice@192.168.10.41:/etc/ server1 backup alice@192.168.10.41:/var/www server1
保存并退出文件。
配置完成后,使用以下命令检查并测试rsnapshot配置。如果配置正确,将显示"Syntax OK"。
rsnapshot configtest

手动测试rsnapshot备份
现在已经配置好了rsnapshot,让我们通过手动执行备份来验证和测试。检查备份目录和rsnapshot日志文件。
运行以下rsnapshot命令手动测试备份。将daily替换为你的备份名称。
rsnapshot daily
如果过程完成,使用以下命令检查备份目录/srv/backup。你将看到一个新的备份目录daily.0,包含来自本地和远程服务器的备份文件。
ls /srv/backup/
运行以下命令检查rsnapshot的磁盘使用情况。
rsnapshot du
在下面的输出中,可以看到rsnapshot备份的总磁盘使用量为5MB。

最后,检查备份日志文件/var/log/rsnapshot.log以查看备份过程。
cat /var/log/rsnapshot.log
以下显示备份成功,但有一些警告,例如备份/etc/shadow文件时出现权限拒绝。

使用Cron实现自动备份
对于自动备份,可以将rsnapshot与Cron集成。例如,将Cron设置为按daily、weekly和monthly进行自动备份。
使用nano编辑器打开文件/etc/cron.d/rsnapshot。该文件是rsnapshot生成的示例文件。
sudo nano /etc/cron.d/rsnapshot
输入以下配置实现通过rsnapshot的自动备份。本示例中daily备份将每天运行,weekly和monthly也将在各自的时间运行。
0 0 * * * root rsnapshot daily 0 0 * * 0 root rsnapshot weekly 0 0 1 * * root rsnapshot monthly
保存文件并退出编辑器。
至此,你的自动备份将通过Cron运行。
恢复rsnapshot备份
要恢复rsnapshot备份,只需将数据从备份目录复制到目标位置。例如,可以从备份目录/srv/backup中复制数据。
总结
恭喜!你已完成rsnapshot的安装和配置教程,学会了本地和远程备份的设置,掌握了一些基本的rsnapshot命令。最后,还学会了如何结合rsnapshot和Cron实现自动备份。