首页 运维 正文
Rsnapshot:一款面向Linux远程文件系统备份工具

 2022-10-23    389  

Rsnapshot是一款开源本地/远程文件系统备份实用工具,它采用Perl语言编写而成,充分利用了Rsync和SSH程序的功能,可以针对Linux/Unix文件系统创建预定的增量备份,同时只占用了一套单个完全备份的空间(外加变化的数据),并将本地驱动器上的那些备份存放到不同的硬盘驱动器、外置USB驱动器、NFS挂载驱动器上,或者干脆经由SSH,通过网络存放到另一台机器上。

安装Rsnapshot备份工具

本文将演示如何安装、设置及使用rsnapshot,以创建增量的每小时、每天、每周和每月的本地备份,以及创建远程备份。想执行本文中介绍的所有步骤,你必须是根用户(root user)。

***步:在Linux下安装rsnapshot备份工具

如果你使用基于红帽和Debian的发行版,那么使用Yum和APT(高级打包工具)安装rsnapshot可能略有不同。

在红帽企业级Linux(RHEL)/CentOS上

首先,你得安装并启用名为EPEL的第三方软件库。请点击这个链接,在你的RHEL/CentOS系统下安装并启用第三方软件库。Fedora用户不需要任何特别的软件库配置。一旦你完成了设置工作,就可以从命令行来安装rsnapshot,如下所示。

#yuminstallrsnapshot

在Debian/Ubuntu/Linux Mint上

默认情况下,rsnapshot已包含在Ubuntu的软件库中,所以你可以使用apt-get命令来安装它,如下所示。

#apt-getinstallrsnapshot

第二步:设置无需密码的SSH登录机制

想备份远程Linux服务器上的内容,你的rsnapshot备份服务器就要能够通过SSH来连接,而不需要密码。为了做到这一点,你就需要创建SSH公共密钥和私有密钥,以便在rsnapshot服务器上验证身份。请点击下面这个链接,以便在你的rsnapshot备份服务器上生成公共密钥和私有密钥。

《使用SSH密钥生成器,创建无需密码的SSH登录机制》(http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/)

第三步:配置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不知道你想多频繁地拍取快照。你要指定保存多少数据、添加保存数据的时间间隔以及每个间隔有多久。

好了,默认设置足够好了,但我还是希望你启用"monthly"(每月)时间间隔,那样你还能拥有更长期的备份。请编辑这个部分,以便看起来类似下面的设置。

#########################################
#备份间隔#
#必须具有独特性,而且按照升序排列#
#即按照每小时、每天、每周等备份#
#########################################
intervalhourly6
intervaldaily7
intervalweekly4
intervalmonthly3

另外你还需要编辑的是"ssh_args"这个变量。如果你将默认的SSH端口(22)改成了别的端口号,就要指定你那台远程备份服务器的那个端口号。

ssh_args-p7851

***,添加你想要备份的本地和远程备份目录。

备份本地目录

如果你已决定将目录本地备份到同一台机器上,备份条目应该看起来像这样。比如说,我要备份我的/tecmint目录和/etc目录。

backup/tecmint/localhost/
backup/etc/localhost/

备份远程目录

如果你想备份远程服务器目录,那么你要告诉rsnapshot服务器在哪里、你又想备份哪些目录。我在这里要备份rsnapshot服务器上"/data/backup"目录下的远程服务器"/home"目录。

backuproot@example.com:/home//data/backup/

另外请参阅:

《如何使用Rsync(远程同步)工具,备份/同步目录?》(http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/)

《如何使用SCP命令,传送文件/文件夹?》(http://www.tecmint.com/scp-commands-examples/)

排除文件和文件夹

这里,我要排除一切内容,然后只专门定义我想要备份什么内容。为此,你需要创建一个排除文件。

#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_version1.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
intervalhourly6
intervaldaily7
intervalweekly4
intervalmonthly3
ssh_args-p25000
verbose2
loglevel4
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/
backuproot@example.com:/home//data/backup/

所有上述选项和参数的解释如下:

config_version1.2=配置文件版本
snapshot_root=存储快照的备份目的地
cmd_cp=拷贝命令路径
cmd_rm=删除命令路径
cmd_rsync=rsync路径
cmd_ssh=SSH路径
cmd_logger=系统日志的外壳命令接口路径
cmd_du=磁盘使用命令路径
intervalhourly=保留多少的每小时备份
intervaldaily=保留多少的每天备份
intervalweekly=保留多少的每周备份
intervalmonthly=保留多少的每月备份
ssh_args=可选的SSH变量,比如不同的端口(-p)
verbose=不需要加以说明
loglevel=不需要加以说明
logfile=日志文件路径
exclude_file=排除文件路径(下面会更详细地解释)
rsync_long_args=传递到rsync的长变量
lockfile=不需要加以说明
backup=备份项的完整路径,后跟位置的相对路径

第四步:验证rsnapshot配置

一旦你完成了所有的配置工作,就需要验证一切都按预期的那样在运作。运行下面这个命令,验证你的配置使用了正确语法。

#rsnapshotconfigtest
SyntaxOK

要是一切配置正确,你会收到"Syntax OK"(语法正确)的消息。要是你收到了任何错误的消息,那就意味着你需要在运行rsnapshot之前,先纠正那些错误。

接下来,对其中一个快照测试一番,确保我们在生成正确的结果。我们拿"hourly"(每小时)这个参数,使用-t(测试)参数进行一番测试。下面这个命令会显示冗长列表,表明该命令要执行的一系列操作,但又不实际执行这些操作。

#rsnapshot-thourly

示例输出

echo2028>/var/run/rsnapshot.pid
mkdir-m0700-p/data/backup/
mkdir-m0755-p/data/backup/hourly.0/
/usr/bin/rsync-a--delete--numeric-ids--relative--delete-excluded/home\
/backup/hourly.0/localhost/
mkdir-m0755-p/backup/hourly.0/
/usr/bin/rsync-a--delete--numeric-ids--relative--delete-excluded/etc\
/backup/hourly.0/localhost/
mkdir-m0755-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创建一个"hourly"备份。它实际上输出了我们在实际执行该命令时它会执行的那些命令。

第五步:手动运行rsnapshot

验证了结果后,你可以去除"-t"选项,实际运行这个命令。

#rsnapshothourly

上面这个命令会运行备份脚本,连同我们添加在rsnapshot.conf文件中的所有配置,创建一个"backup"目录,然后在它下面创建组织管理我们那些文件的目录结构。在运行上面这个命令后,你可以进入到备份目录来验证结果,然后使用ls -l命令列出目录结构,如下所示。

commandasshown.
#cd/data/backup
#ls-l
total4
drwxr-xr-x3rootroot4096Oct2809:11hourly.0

第六步:让过程自动化

为了让这个过程自动化,你就需要通过Cron计划任务工具,安排rsnapshot按某些时间间隔运行。默认情况下,rsnapshot在"/etc/cron.d/rsnapshot"下随带cron文件;要是这个文件不存在,就创建一个,然后将下面几行添加到该文件。

默认情况下,规则被注释,所以你要去除计划部分前面的"#",以便启用这些值。

#这是rsnapshot的示例计划任务文件。
#所用的值对应于/etc/rsnapshot.conf中的示例。
#你还可以在那里设定备份点及其他许多选项。
#想激活这些计划任务文件,你就得取消下面几行的注释。
#请随意改动,以符合你的需要。
0*/4***root/usr/bin/rsnapshothourly
303***root/usr/bin/rsnapshotdaily
03**1root/usr/bin/rsnapshotweekly
3021**root/usr/bin/rsnapshotmonthly

让我具体解释一下上述的计划任务规则具体执行什么操作:

  • 每隔4小时运行一次,在/backup目录下创建hourly目录。
  • 每天凌晨3:30运行,在/backup目录下创建daily目录。
  • 每周运行一次,具体时间是星期一凌晨3:00,在/backup目录下创建weekly目录。
  • 每月运行一次,具体时间是凌晨2:30,在/backup目录下创建monthly目录。

为了更深入地了解计划任务规则是如何工作的,我建议你参阅我们的这篇描述文章。

第七步: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脚本,将报告传递到指定的电子邮件地址。

#这是rsnapshot的示例计划任务文件。
#所用的值对应于/etc/rsnapshot.conf中的示例。
#你还可以在那里指定备份点和另外许多选项。
#想激活这个cron文件,你得取消下面几行的注释。
#请随意改动,以符合你的需要。
0*/4***root/usr/bin/rsnapshothourly2>&1|\/usr/local/bin/rsnapreport.pl|mail-s"HourlyBackup"yourname@email.com
303***root/usr/bin/rsnapshotdaily2>&1|\/usr/local/bin/rsnapreport.pl|mail-s"DailyBackup"yourname@email.com
03**1root/usr/bin/rsnapshotweekly2>&1|\/usr/local/bin/rsnapreport.pl|mail-s"WeeklyBackup"yourname@email.com
3021**root/usr/bin/rsnapshotmonthly2>&1|\/usr/local/bin/rsnapreport.pl|mail-s"MonthlyBackup"yourname@email.com

一旦你正确添加了上述条目,就能将报告传递到类似下面的电子邮件地址。

SOURCETOTALFILESFILESTRANSTOTALMBMBTRANSLISTGENTIMEFILEXFERTIME
---------------------------------------------------------------------
localhost/185734118532889.456179.1840.661second0.000seconds

原文链接:https://77isp.com/post/8883.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。