远程文件系统备份工具:Rsnapshot
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,如下所
示。
# yum install rsnapshot
在Debian/Ubuntu/Linux Mint上
默认情况下,rsnapshot已包含在Ubuntu的软件
库中,所以你可以使用apt-get命令来安装它,如
下所示。
# apt-get install rsnapshot
第二步:设置无需密码的SSH登录机制
想备份远程Linux服务器上的内容,你的
rsnapshot备份服务器就要能够通过SSH来连接,
而不需要密码。为了做到这一点,你就需要创建
SSH公共密钥和私有密钥,以便在rsnapshot服务
器上验证身份。请点击下面这个链接,以便在你
的rsnapshot备份服务器上生成公共密钥和私有密
钥。
《使用SSH密钥生成器,创建无需密码的SSH
登录机制》(http://www.tecmint.com/sshpasswordless-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”(每月)时间间隔,那样你还
能拥有更长期的备份。请编辑这个部分,以便看
起来类似下面的设置。
#############################
# 备份间隔 #
# 必须具有独特性,而且按照升序排列 #
# 即按照每小时、每天、每周等备份 #
#############################
interval hourly 6
interval daily 7
interval weekly 4
interval monthly 3
另外你还需要编辑的是”ssh_args”这个变
量。如果你将默认的SSH端口(22)改成了别的
端口号,就要指定你那台远程备份服务器的那个
端口号。
ssh_args -p 7851
最后,添加你想要备份的本地和远程备份目
录。
备份本地目录
如果你已决定将目录本地备份到同一台机器
上,备份条目应该看起来像这样。比如说,我要
备份我的/tecmint目录和/etc目录。
backup /tecmint/ localhost/
backup /etc/ localhost/
备份远程目录
如果你想备份远程服务器目录,那么你要告
诉rsnapshot服务器在哪里、你又想备份哪些目
录。我在这里要备份rsnapshot服务器上”/data/
backup”目录下的远程服务器”/home”目录。
backup root@example.com:/home/ /data/
backup/
排除文件和文件夹
这里,我要排除一切内容,然后只专门定义
我想要备份什么内容。为此,你需要创建一个排
除文件。
# 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 root@example.com:/home/ /data/
backup/
所有上述选项和参数的解释如下:
config_version 1.2 = 配置文件版本
snapshot_root = 存储快照的备份目的地
cmd_cp = 拷贝命令路径
cmd_rm = 删除命令路径
cmd_rsync = rsync路径
cmd_ssh = SSH路径
cmd_logger = 系统日志的外壳命令接口路径
cmd_du = 磁盘使用命令路径
interval hourly = 保留多少的每小时备份
interval daily = 保留多少的每天备份
interval weekly = 保留多少的每周备份
interval monthly = 保留多少的每月备份
ssh_args = 可选的SSH变量,比如不同的端口
(-p)
verbose = 不需要加以说明
loglevel = 不需要加以说明
logfile = 日志文件路径
exclude_file = 排除文件路径(下面会更详细地
解释)
rsync_long_args = 传递到rsync的长变量
lockfile = 不需要加以说明
backup = 备份项的完整路径,后跟位置的相
对路径
第四步:验证rsnapshot配置
一旦你完成了所有的配置工作,就需要验证
一切都按预期的那样在运作。运行下面这个命
令,验证你的配置使用了正确语法。
# rsnapshot configtest
Syntax OK
要是一切配置正确,你会收到”Syntax OK”
(语法正确)的消息。要是你收到了任何错误的
消息,那就意味着你需要在运行rsnapshot之前,
先纠正那些错误。
接下来,对其中一个快照测试一番,确保我
们在生成正确的结果。我们拿”hourly”(每小
时)这个参数,使用-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创建一
个”hourly”备份。它实际上输出了我们在实际
执行该命令时它会执行的那些命令。
第五步:手动运行rsnapshot
验证了结果后,你可以去除”-t”选项,实际
运行这个命令。
# rsnapshot hourly
上面这个命令会运行备份脚本,连同我们添
加在rsnapshot.conf文件中的所有配置,创建一
个”backup”目录,然后在它下面创建组织管理
我们那些文件的目录结构。在运行上面这个命令
后,你可以进入到备份目录来验证结果,然后使
用ls -l命令列出目录结构,如下所示。
command as shown.
# cd /data/backup
# ls -l
total 4
drwxr-xr-x 3 root root 4096 Oct 28 09:11 hourly.0
第六步:让过程自动化
为了让这个过程自动化,你就需要通过Cron
计划任务工具,安排rsnapshot按某些时间间隔运
行。默认情况下,rsnapshot在”/etc/cron.d/
rsnapshot”下随带cron文件;要是这个文件不存
在,就创建一个,然后将下面几行添加到该文
件。
默认情况下,规则被注释,所以你要去除计
划部分前面的”#”,以便启用这些值。