linux 的本地远程文件系统备份实用程序rsnapshot

rsnapshot是一个开源的本地/远程文件系统备份实用程序,是用Perl语言编写的,它的优点是Rsync和SSH程序的强大功能,可以创建Linux/Unix文件系统的定时增量备份,而只占用一个完整备份加上差异的空间,并将这些备份保存在本地驱动器上到不同的硬盘驱动器、外部u盘、NFS挂载的驱动器或简单地通过网络通过SSH连接到另一台机器。

本文将演示如何安装、设置和使用rsnapshot创建增量hourly,daily,weeklymonthly本地备份,以及远程备份。要执行本文中的所有步骤,必须使用root用户。

第1步:在Linux中安装 Rsnapshot Backup

安装rsnapshot使用YumAPT可能略有不同,如果你使用Red HatDebian基于分布。

在 RHEL/CentOS 上

你必须安装并启用名为的第三方存储库EPEL.请按照以下链接在你的下安装和启用RHEL/CentOS系统。Fedora用户不需要任何特殊的存储库配置。

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

设置完成后,安装rsnapshot从命令行

  1. # yum install rsnapshot
在 Debian/Ubuntu/Linux Mint 上
  1. # apt-get install rsnapshot

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

要备份远程 Linux 服务器,你的rsnapshot backup server将能够通过连接SSH没有密码。为此,你需要创建一个SSH公钥和私钥进行身份验证rsnapshot服务器。

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

第 3 步:配置 Rsnapshot

现在你需要编辑并添加一些参数rsnapshot配置文件。打开rsnapshot.conf文件与vi或者nano编辑。

  1. # vi /etc/rsnapshot.conf

接下来创建一个备份目录,你要在其中存储所有备份。我的备份目录位置是 /data/backup/。搜索并编辑以下参数以设置备份位置。

  1. snapshot_root /data/backup/

同时取消注释cmd_ssh允许远程备份的行SSH.要取消注释该行,请删除#在下一行之前,以便rsnapshot可以安全地将你的数据传输到备份服务器。

  1. cmd_ssh /usr/bin/ssh

你需要决定要保留多少个旧备份,因为rsnapshot不知道你要多久创建一次快照。你需要指定要保存多少数据、添加要保留的间隔以及每个间隔的数量。

默认设置已经足够了,但我仍然希望你启用 monthly 间隔,以便你还可以进行更长期的备份。请编辑此部分以类似于以下设置。

  1. #########################################
  2. # BACKUP INTERVALS #
  3. # Must be unique and in ascending order #
  4. # i.e. hourly, daily, weekly, etc. #
  5. #########################################
  6. interval hourly 6
  7. interval daily 7
  8. interval weekly 4
  9. interval monthly 3

你需要编辑的另一件事是 ssh_args。如果你更改了默认值SSH Port(22) 到其他内容,你需要指定远程备份服务器的端口号。

  1. ssh_args -p 7851
备份本地目录

如果你决定在本地将目录备份到同一台机器上,则备份条目将如下所示。例如,我正在备份我的/rumenz/etc目录。

  1. backup /rumenz/ localhost/
  2. backup /etc/ localhost/
备份远程目录

如果要备份远程服务器目录,则需要告诉rsnapshot服务器在哪里以及要备份哪些目录。在这里,我正在备份我的远程服务器 /home 目录下 /data/backup rsnapshot 服务器上的目录。

  1. backup root@example.com:/home/ /data/backup/
排除文件和目录

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

  1. # vi /data/backup/rumenz.exclude

首先获取要备份的目录列表并添加 (*) 以排除其他所有内容。这只会备份你在文件中列出的内容。我的排除文件类似于以下内容。

  1. + /boot
  2. + /data
  3. + /rumenz
  4. + /etc
  5. + /home
  6. + /opt
  7. + /root
  8. + /usr
  9. - /usr/*
  10. - /var/cache
  11. + /var
  12. - /*

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

  1. exclude_file /data/backup/rumenz.exclude

最后保存 /etc/rsnapshot.conf 配置文件,然后再进一步。有很多选项可以解释,但这里是我的示例配置文件。

  1. config_version 1.2
  2. snapshot_root /data/backup/
  3. cmd_cp /bin/cp
  4. cmd_rm /bin/rm
  5. cmd_rsync /usr/bin/rsync
  6. cmd_ssh /usr/bin/ssh
  7. cmd_logger /usr/bin/logger
  8. cmd_du /usr/bin/du
  9. interval hourly 6
  10. interval daily 7
  11. interval weekly 4
  12. interval monthly 3
  13. ssh_args -p 25000
  14. verbose 2
  15. loglevel 4
  16. logfile /var/log/rsnapshot/
  17. exclude_file /data/backup/rumenz.exclude
  18. rsync_long_args --delete --numeric-ids --delete-excluded
  19. lockfile /var/run/rsnapshot.pid
  20. backup /rumenz/ localhost/
  21. backup /etc/ localhost/
  22. backup root@example.com:/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 命令接口到 syslog 的路径
  8. cmd_du= 磁盘使用命令的路径
  9. interval hourly= 要保留多少小时的备份。
  10. interval daily= 要保留多少每日备份。
  11. interval weekly= 要保留多少每周备份。
  12. interval monthly= 每月要保留多少备份。
  13. ssh_args= 可选的 SSH 参数,例如不同的端口 (-p)
  14. verbose= verbose
  15. loglevel= loglevel
  16. logfile= 日志文件的路径
  17. exclude_file= 排除文件的路径(将更详细地解释)
  18. rsync_long_args= 传递给 rsync 的长参数
  19. lockfile= lockfile
  20. backup= 要备份的内容的完整路径,然后是放置的相对路径。

步骤 4:验证 Rsnapshot 配置

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

  1. # rsnapshot configtest
  2. Syntax OK

如果一切配置正确,你将收到 Syntax OK“ 信息。如果你收到任何错误消息,则意味着你需要在运行之前更正这些错误rsnapshot.

接下来,对其中一个快照进行测试运行,以确保我们生成了正确的结果。我们采取 hourly 参数使用-t(test)参数。下面的命令将显示它将执行的操作的详细列表,而不实际执行它们。

  1. # rsnapshot -t hourly
输出
  1. echo 2028 > /var/run/rsnapshot.pid
  2. mkdir -m 0700 -p /data/backup/
  3. mkdir -m 0755 -p /data/backup/hourly.0/
  4. /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home \
  5. /backup/hourly.0/localhost/
  6. mkdir -m 0755 -p /backup/hourly.0/
  7. /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \
  8. /backup/hourly.0/localhost/
  9. mkdir -m 0755 -p /data/backup/hourly.0/
  10. /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
  11. /usr/local /data/backup/hourly.0/localhost/
  12. touch /data/backup/hourly.0/

上面的命令告诉rsnapshot创造一个hourly备份。它实际上打印出当我们真正执行它时它将执行的命令。

第 5 步:手动运行 Rsnapshot

验证结果后,你可以删除 -t 选项来真正运行命令。

  1. # rsnapshot hourly

上面的命令将使用我们添加的所有配置运行备份脚本rsnapshot.conf文件并创建一个 backup 目录,然后在其下创建用于组织我们文件的目录结构。运行上述命令后,你可以通过转到备份目录并使用ls -l命令列出目录结构来验证结果

  1. # cd /data/backup
  2. # ls -l
  3. total 4
  4. drwxr-xr-x 3 root root 4096 Oct 28 09:11 hourly.0

第 6 步:自动化流程

使流程自动化,你需要安排rsnapshot以一定的时间间隔运行Cron.默认情况下,rsnapshot自带cron文件在 /etc/cron.d/rsnapshot,如果它不存在,则创建一个并向其添加以下几行。

默认规则是注释的,所以你需要删除 # 从前面的调度部分启用这些值。

  1. # This is a sample cron file for rsnapshot.
  2. # The values used correspond to the examples in /etc/rsnapshot.conf.
  3. # There you can also set the backup points and many other things.
  4. #
  5. # To activate this cron file you have to uncomment the lines below.
  6. # Feel free to adapt it to your needs.
  7. 0 */4 * * * root /usr/bin/rsnapshot hourly
  8. 30 3 * * * root /usr/bin/rsnapshot daily
  9. 0 3 * * 1 root /usr/bin/rsnapshot weekly
  10. 30 2 1 * * root /usr/bin/rsnapshot monthly
  1. 运行每4 hours并创建一个hourly目录下/backup目录。
  2. 每天运行于3:30am并创建一个daily目录下/backup目录。
  3. 运行weekly在每个Monday3:00am并创建一个weekly目录下/backup目录。
  4. 运行每monthly2:30am并创建一个monthly目录下/backup目录。

第 7 步:Rsnapshot 报告

rsnapshot提供一个小报告Perl script给你发送一个email alert包含有关数据备份期间发生的情况的所有详细信息。要设置此脚本,你需要将脚本复制到 /usr/local/bin 并使其可执行。

  1. # cp /usr/share/doc/rsnapshot-1.3.1/utils/rsnapreport.pl /usr/local/bin
  2. # chmod +x /usr/local/bin/rsnapreport.pl

添加 –stats 参数在你的 rsnapshot.conf 文件添加到 rsync 的长参数部分。

  1. vi /etc/rsnapshot.conf
  1. rsync_long_args --stats --delete --numeric-ids --delete-excluded

现在编辑crontab rules之前添加的并调用rsnapreport.pl脚本将报告传递到指定的电子邮件地址。

  1. # This is a sample cron file for rsnapshot.
  2. # The values used correspond to the examples in /etc/rsnapshot.conf.
  3. # There you can also set the backup points and many other things.
  4. #
  5. # To activate this cron file you have to uncomment the lines below.
  6. # Feel free to adapt it to your needs.
  7. 0 */4 * * * root /usr/bin/rsnapshot hourly 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Hourly Backup" yourname@email.com
  8. 30 3 * * * root /usr/bin/rsnapshot daily 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Daily Backup" yourname@email.com
  9. 0 3 * * 1 root /usr/bin/rsnapshot weekly 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Weekly Backup" yourname@email.com
  10. 30 2 1 * * root /usr/bin/rsnapshot monthly 2>&1 | \/usr/local/bin/rsnapreport.pl | mail -s "Montly Backup" yourname@email.com

你正确添加了上述条目,你将收到类似于以下内容的报告到你的电子邮件地址。

  1. SOURCE TOTAL FILES FILES TRANS TOTAL MB MB TRANS LIST GEN TIME FILE XFER TIME
  2. --------------------------------------------------------------------------------------------------------
  3. localhost/ 185734 11853 2889.45 6179.18 40.661 second 0.000 seconds

返回笔记列表
入门小站