网站搜索

Rsnapshot(基于 Rsync)- 适用于 Linux 的本地/远程文件系统备份实用程序


rsnapshot 是一个开源本地/远程文件系统备份实用程序,采用Perl语言编写,具有Perl语言的强大功能Rsync和SSH程序创建Linux/Unix文件系统的计划增量备份,同时只占用空间一份完整备份加上差异,并将这些备份保存在本地驱动器到不同硬盘、外部USB记忆棒上、NFS 安装的驱动器或通过 SSH 通过网络连接到另一台计算机。

本文将演示如何安装、设置和使用rsnapshot来创建增量每小时每日每周和<每月本地备份,以及远程备份。要执行本文中的所有步骤,您必须是root 用户。

步骤1:在Linux中安装Rsnapshot Backup

如果您使用的是 Red Hat,使用 YumAPT 安装 rsnapshot 可能会略有不同基于 Debian 的发行版。

在 RHEL/CentOS 上

首先,您必须安装并启用名为 EPEL 的第三方存储库。请点击以下链接在您的 RHEL/CentOS 系统下安装并启用。 Fedora 用户不需要任何特殊的存储库配置。

  1. 在 RHEL/CentOS 6/5/4 中安装并启用 EPEL 存储库

设置完毕后,从命令行安装rsnapshot,如图所示。

yum install rsnapshot
在 Debian/Ubuntu/Linux Mint 上

默认情况下,rsnapshot包含在Ubuntu的存储库中,因此您可以使用apt-get命令安装它,如图所示。

apt-get install rsnapshot

第2步:设置SSH无密码登录

要备份远程 Linux 服务器,您的 rsnapshot 备份服务器 将能够通过 SSH 连接,无需密码。为此,您需要创建 SSH 公钥和私钥,以便在 rsnapshot 服务器上进行身份验证。请点击以下链接在您的rsnapshot备份服务器上生成公钥和私钥。

  1. 使用 SSH Keygen 创建 SSH 无密码登录

步骤3:配置Rsnapshot

现在您需要编辑一些参数并将其添加到 rsnapshot 配置文件中。使用vinano编辑器打开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

最后,添加要备份的本地和远程备份目录。

备份本地目录

如果您决定将目录本地备份到同一台计算机,则备份条目将如下所示。例如,我正在备份我的 /howtoing/etc 目录。

backup		/tecmint/		localhost/
backup		/etc/			localhost/
备份远程目录

如果您想备份远程服务器目录,那么您需要告诉 rsnapshot 服务器在哪里以及您要备份哪些目录。在这里,我对 rsnapshot 服务器上“/data/backup”目录下的远程服务器“/home”目录进行备份。

backup		 [email :/home/ 		/data/backup/

另请阅读:

  1. 如何使用 Rsync(远程同步)工具备份/同步目录
  2. 如何使用 SCP 命令传输文件/文件夹
排除文件和目录

在这里,我将排除所有内容,然后仅具体定义我要备份的内容。为此,您需要创建一个排除文件。

vi /data/backup/tecmint.exclude

首先获取要备份的目录列表,然后添加 ( – * ) 以排除其他所有内容。这只会备份您在文件中列出的内容。我的排除文件看起来与下面类似。

+ /boot
+ /data
+ /tecmint
+ /etc
+ /home
+ /opt
+ /root
+ /usr
- /usr/*
- /var/cache
+ /var
- /*

由于使用了rsync递归,使用排除文件选项可能会非常棘手。所以,我上面的例子可能不是你想要的。接下来将排除文件添加到 rsnapshot.conf 文件中。

exclude_file    /data/backup/tecmint.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/tecmint.exclude
rsync_long_args --delete        --numeric-ids   --delete-excluded
lockfile        /var/run/rsnapshot.pid
backup		/tecmint/		localhost/
backup		/etc/			localhost/
backup		[email :/home/ 		/data/backup/

以上所有选项及参数解释如下:

  1. config_version 1.2=配置文件版本
  2. snapshot_root=存储快照的备份目标
  3. cmd_cp=复制命令的路径
  4. cmd_rm=删除命令的路径
  5. cmd_rsync=rsync 路径
  6. cmd_ssh=SSH 路径
  7. cmd_logger=系统日志的 shell 命令接口的路径
  8. cmd_du=磁盘使用命令的路径
  9. 每小时间隔=每小时保留多少个备份。
  10. 每日间隔=每日保留多少备份。
  11. 每周间隔=每周保留多少次备份。
  12. 每月间隔=每月保留多少备份。
  13. ssh_args=可选的 SSH 参数,例如不同的端口 (-p )
  14. 详细=不言自明
  15. 日志级别=不言自明
  16. 日志文件=日志文件路径
  17. exclude_file=排除文件的路径(将更详细地解释)
  18. rsync_long_args=传递给 rsync 的长参数
  19. 锁定文件=不言自明
  20. 备份=要备份内容的完整路径,后跟放置的相对路径。

步骤 4:验证 Rsnapshot 配置

完成所有配置后,就可以验证一切是否按预期工作。运行以下命令来验证您的配置是否具有正确的语法。

rsnapshot configtest

Syntax OK

如果一切配置正确,您将收到一条“语法正常”消息。如果您收到任何错误消息,则意味着您需要在运行 rsnapshot 之前更正这些错误。

接下来,对其中一个快照进行测试运行,以确保我们生成正确的结果。我们采用“每小时”参数,使用-t测试)参数进行测试运行。下面的命令将显示它将执行的操作的详细列表,但实际上并不执行这些操作。

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 文件中添加的所有配置运行备份脚本,并创建一个“backup”目录,然后在其下创建目录结构组织我们的文件。运行上述命令后,您可以通过转到备份目录并使用 ls -l 命令列出目录结构来验证结果,如下所示。

cd /data/backup
ls -l

total 4
drwxr-xr-x 3 root root 4096 Oct 28 09:11 hourly.0

第 6 步:自动化流程

要自动执行该过程,您需要安排 rsnapshotCron 中按特定时间间隔运行。默认情况下,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 规则的作用:

  1. 4小时运行一次,并在/backup目录下创建一个每小时目录。
  2. 每天凌晨 3:30 运行,并在 /backup 目录下创建每日目录。
  3. 每周在每个星期一凌晨3:00运行,并在/backup下创建一个每周目录强>目录。
  4. 每月凌晨 2:30 运行一次,并在 /backup 目录下创建一个每月目录。

为了更好地了解 cron 规则 的工作原理,我建议您阅读我们的描述文章。

  1. 11 个 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" [email 
30     3     * * *    root    /usr/bin/rsnapshot daily 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Daily Backup" [email 
0      3     * * 1    root    /usr/bin/rsnapshot weekly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Weekly Backup" [email 
30     2     1 * *    root    /usr/bin/rsnapshot monthly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Montly Backup" [email 

正确添加上述条目后,您的电子邮件地址将收到一份类似于下面的报告。

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

参考链接

  1. rsnapshot 主页

暂时就这样,如果安装过程中出现任何问题请给我评论。在此之前,请继续关注 TecMint,了解有关开源世界的更多有趣文章。