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

Linux服务器使用Rsnapshot备份与恢复教程

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

sudo apt install rsnapshot

Linux服务器使用Rsnapshot备份与恢复教程

安装完成后,检查rsnapshot二进制文件的位置和版本。

which rsnapshot
rsnapshot --version

如下图所示,Rsnapshot 1.4已安装在/usr/bin/rsnapshot路径下。

Linux服务器使用Rsnapshot备份与恢复教程

配置SSH密钥认证

在进行远程备份时,必须确保rsnapshot服务器能够使用SSH密钥认证登录到目标服务器。因此进行远程备份需要具备以下条件:

- 一个用于登录目标服务器的用户

- 已启用基于SSH密钥的认证

本节将在rsnapshot服务器上生成SSH密钥,然后将SSH公钥复制到目标服务器192.168.10.41,使用用户alice。

在rsnapshot服务器上,使用以下ssh-keygen命令生成SSH公钥和私钥。提示输入密钥位置和密码时按回车跳过。

ssh-keygen -t ed25519

Linux服务器使用Rsnapshot备份与恢复教程

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

ssh-copy-id alice@192.168.10.41

提示时输入密码。

Linux服务器使用Rsnapshot备份与恢复教程

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

Linux服务器使用Rsnapshot备份与恢复教程

手动测试rsnapshot备份

现在已经配置好了rsnapshot,让我们通过手动执行备份来验证和测试。检查备份目录和rsnapshot日志文件。

运行以下rsnapshot命令手动测试备份。将daily替换为你的备份名称。

rsnapshot daily

如果过程完成,使用以下命令检查备份目录/srv/backup。你将看到一个新的备份目录daily.0,包含来自本地和远程服务器的备份文件。

ls /srv/backup/

运行以下命令检查rsnapshot的磁盘使用情况。

rsnapshot du

在下面的输出中,可以看到rsnapshot备份的总磁盘使用量为5MB。

Linux服务器使用Rsnapshot备份与恢复教程

最后,检查备份日志文件/var/log/rsnapshot.log以查看备份过程。

cat /var/log/rsnapshot.log

以下显示备份成功,但有一些警告,例如备份/etc/shadow文件时出现权限拒绝。

Linux服务器使用Rsnapshot备份与恢复教程

使用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实现自动备份。