Rsnapshot(基于 Rsync)——Linux 的本地/远程文件系统备份实用程序
rsnapshot是一个开源的本地/远程文件系统备份实用程序,它是用Perl语言编写的,利用Rsync和SSH程序的强大功能来创建Linux / Unix文件系统的计划增量备份,同时只占用一个完整备份加上差异的空间,并将这些备份保存在本地 驱动器上的不同硬盘驱动器、外部USB棒、NFS 挂载驱动器或只是通过SSH通过网络传输到另一台机器。
本文将演示如何安装、设置和使用rsnapshot创建增量每小时、每日、每周和每月本地备份以及远程备份。要执行本文中的所有步骤,您必须是root用户。
步骤 1:在 Linux 中安装 Rsnapshot Backup
如果您使用基于Red Hat和Debian 的发行版,使用Yum和APT安装rsnapshot可能会略有不同。
在 RHEL/CentOS 上
首先,您必须安装并启用名为EPEL的第三方存储库。请按照以下链接在您的RHEL / CentOS系统下安装并启用。Fedora用户不需要任何特殊的存储库配置。
设置完成后,按照所示从命令行安装rsnapshot 。
# yum install rsnapshot
在 Debian/Ubuntu/Linux Mint 上
默认情况下,rsnapshot包含在Ubuntu的存储库中,因此您可以使用apt-get命令安装它,如图所示。
# apt-get install rsnapshot
第 2 步:设置 SSH 无密码登录
要备份远程 Linux 服务器,您的rsnapshot 备份服务器将能够通过SSH连接而无需密码。为此,您需要创建SSH公钥和私钥以在rsnapshot服务器上进行身份验证。请按照以下链接在您的rsnapshot备份服务器上生成公钥和私钥。
步骤3:配置Rsnapshot
现在您需要编辑并向rsnapshot配置文件添加一些参数。使用vi或nano编辑器打开rsnapshot.conf文件。
# vi /etc/rsnapshot.conf
接下来创建一个备份目录,您要在其中存储所有备份。 在我的例子中,我的备份目录位置是“ /data/backup/ ”。 搜索并编辑以下参数以设置备份位置。
snapshot_root /data/backup/
另外,取消注释“ cmd_ssh ”行,以允许通过SSH进行远程备份。要取消注释该行,请删除以下行前面的“ # ”,以便rsnapshot可以安全地将数据传输到备份服务器。
cmd_ssh /usr/bin/ssh
接下来,您需要决定要保留多少旧备份,因为 rsnapshot 不知道您要多久拍摄一次快照。您需要指定要保存的数据量、添加要保留的间隔以及每种间隔的数量。
好吧,默认设置已经足够好了,但我仍然希望您启用“每月”间隔,以便您也可以进行更长期的备份。请编辑此部分以使其类似于以下设置。
######################################### # BACKUP INTERVALS # # Must be unique and in ascending order # # i.e. hourly, daily, weekly, etc. # ######################################### interval hourly 6 interval daily 7 interval weekly 4 interval monthly 3
您需要编辑的另一件事是“ ssh_args ”变量。 如果您将默认SSH 端口( 22 )更改为其他值,则需要指定远程备份服务器的端口号。
ssh_args -p 7851
最后,添加您想要备份的本地和远程备份目录。
备份本地目录
如果您决定将目录本地备份到同一台机器,则备份条目将如下所示。例如,我正在备份我的/example和/etc目录。
backup /example/ localhost/ backup /etc/ localhost/
备份远程目录
如果您想要备份远程服务器目录,则需要告诉 rsnapshot 服务器在哪里以及要备份哪些目录。这里,我正在 rsnapshot服务器上的“ /data/backup ”目录下备份我的远程服务器“ /home ”目录。
backup root@example.com:/home/ /data/backup/
另请阅读:
排除文件和目录
在这里,我将排除所有内容,然后仅具体定义我想要备份的内容。为此,您需要创建一个排除文件。
# vi /data/backup/example.exclude
首先获取要备份的目录列表,然后添加(-*)以排除其他所有内容。这将仅备份文件中列出的内容。我的排除文件如下所示。
+ /boot + /data + /example + /etc + /home + /opt + /root + /usr - /usr/* - /var/cache + /var - /*
由于使用rsync递归,使用排除文件选项可能非常棘手。因此,我上面的例子可能不是您想要的。接下来将排除文件添加到rsnapshot.conf文件中。
exclude_file /data/backup/example.exclude
最后,您几乎完成了初始配置。在继续操作之前,请保存“ /etc/rsnapshot.conf ”配置文件。有很多选项需要解释,但这是我的示例配置文件。
config_version 1.2 snapshot_root /data/backup/ cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger cmd_du /usr/bin/du interval hourly 6 interval daily 7 interval weekly 4 interval monthly 3 ssh_args -p 25000 verbose 2 loglevel 4 logfile /var/log/rsnapshot/ exclude_file /data/backup/example.exclude rsync_long_args --delete --numeric-ids --delete-excluded lockfile /var/run/rsnapshot.pid backup /example/ localhost/ backup /etc/ localhost/ backup root@example.com:/home/ /data/backup/
以上所有选项及论点解释如下:
- config_version 1.2 = 配置文件版本
- snapper_root = 存储快照的备份目标
- cmd_cp = 复制命令的路径
- cmd_rm = 删除命令的路径
- cmd_rsync = rsync 路径
- cmd_ssh = SSH 路径
- cmd_logger = syslog 的 shell 命令接口路径
- cmd_du = 磁盘使用命令的路径
- 间隔每小时= 保留多少个每小时备份。
- 每日间隔= 每天保留多少个备份。
- 每周间隔= 每周保留多少个备份。
- 每月间隔= 每月保留多少个备份。
- ssh_args =可选的 SSH 参数,例如不同的端口 (-p )
- 详细=不言自明
- loglevel = 不言自明
- logfile = 日志文件路径
- exclude_file = 排除文件的路径(将会详细解释)
- rsync_long_args = 传递给 rsync 的长参数
- lockfile = 不言自明
- 备份= 要备份的完整路径,后跟放置的相对路径。
步骤4:验证Rsnapshot配置
完成所有配置后,就该验证一切是否按预期运行了。运行以下命令来验证您的配置是否具有正确的语法。
# rsnapshot configtest Syntax OK
如果所有配置都正确,您将收到“语法正常”消息。如果您收到任何错误消息,则意味着您需要在运行rsnapshot之前更正这些错误。
接下来,对其中一个快照进行测试运行,以确保我们生成正确的结果。我们使用“ hourly ”参数通过-t(test )参数进行测试运行。下面的命令将显示它将要执行的操作的详细列表,而无需实际执行这些操作。
# rsnapshot -t hourly
示例输出
echo 2028 > /var/run/rsnapshot.pid mkdir -m 0700 -p /data/backup/ mkdir -m 0755 -p /data/backup/hourly.0/ /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home \ /backup/hourly.0/localhost/ mkdir -m 0755 -p /backup/hourly.0/ /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \ /backup/hourly.0/localhost/ mkdir -m 0755 -p /data/backup/hourly.0/ /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \ /usr/local /data/backup/hourly.0/localhost/ touch /data/backup/hourly.0/
注意:上述命令告诉rsnapshot创建“每小时”备份。它实际上打印出我们真正执行时将执行的命令。
步骤5:手动运行Rsnapshot
验证结果后,您可以删除“ -t ”选项来真正运行该命令。
# rsnapshot hourly
上述命令将运行备份脚本,其中包含我们在rsnapshot.conf文件中添加的所有配置,并创建一个“备份”目录,然后在其下创建组织文件的目录结构。运行上述命令后,您可以通过转到备份目录并使用ls -l 命令列出目录结构来验证结果,如下所示。
# cd /data/backup # ls -l total 4 drwxr-xr-x 3 root root 4096 Oct 28 09:11 hourly.0
步骤 6:自动化流程
实现流程自动化,您需要从Cron安排rsnapshot以一定间隔运行。默认情况下,rsnapshot在“ /etc/cron.d/rsnapshot ”下带有cron文件,如果不存在,请创建一个并向其中添加以下几行。
默认情况下规则是带注释的,因此您需要从调度部分前面删除“ # ”以启用这些值。
# 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
让我准确解释一下上述 cron 规则的作用:
- 每4 小时运行一次,并在/backup目录下创建一个每小时目录。
- 每天凌晨 3:30运行并在/backup目录下创建每日目录。
- 每周一凌晨3:00运行,并在/backup目录下创建每周目录。
- 每月凌晨2:30运行并在/backup目录下创建每月目录。
为了更好地理解cron 规则的工作原理,我建议您阅读我们描述的文章。
步骤 7:Rsnapshot 报告
rsnapshot提供了一个漂亮的小型报告Perl 脚本,它会向您发送电子邮件警报,其中包含有关数据备份期间发生的所有详细信息。要设置此脚本,您需要将脚本复制到“ /usr/local/bin ”下的某个位置并使其可执行。
# cp /usr/share/doc/rsnapshot-1.3.1/utils/rsnapreport.pl /usr/local/bin # chmod +x /usr/local/bin/rsnapreport.pl
接下来,将“ rsnapshot.conf ”文件中的“ –stats ”参数添加到 rsync 的长参数部分。
vi /etc/rsnapshot.conf
rsync_long_args --stats --delete --numeric-ids --delete-excluded
现在编辑之前添加的crontab 规则并调用rsnapreport.pl脚本将报告传递到指定的电子邮件地址。
# 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 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Hourly Backup" yourname@email.com 30 3 * * * root /usr/bin/rsnapshot daily 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Daily Backup" yourname@email.com 0 3 * * 1 root /usr/bin/rsnapshot weekly 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Weekly Backup" yourname@email.com 30 2 1 * * root /usr/bin/rsnapshot monthly 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Montly Backup" yourname@email.com
一旦您正确添加了上述条目,您将收到一份类似于下面的电子邮件地址的报告。
SOURCE TOTAL FILES FILES TRANS TOTAL MB MB TRANS LIST GEN TIME FILE XFER TIME -------------------------------------------------------------------------------------------------------- localhost/ 185734 11853 2889.45 6179.18 40.661 second 0.000 seconds
参考链接
现在就是这样了,如果安装过程中出现任何问题,请给我留言。在此之前,请继续关注Example,了解有关开源世界的更多有趣文章。